Recreating Roland Alpha Juno PWM Saw oscillator - ideas?
-
@griffinboy said in Recreating Roland Alpha Juno PWM Saw oscillator - ideas?:
So, the easiest way to achieve it in a 'pretend' hacky manner, would be to record the original waveform output from the synth while sweeping the PWM, and extract frames to create a wavetable. You could then use the built in Hise wavetable synthesiser module to play it back.
Wavetable was my first thought too. Mainly so I can stick with built-in modules for now but also because I'm not looking for 100% accuracy or an emulation that interacts with other components of the system.
I'll be doing a lot of processing after the oscillator section, so any 'flaws' of the wavetable approach will likely be very lost in the mix.
So now I just have to dig into the Wavetable Synthesizer module.
Any tips on the fastest/easiest way to take a power-of-2 WAV and convert it for use in the WT module? I'll read the docs, of course, but if there's a standard 'quick' conversion method I'll use it!
-
@modularsamples said in Recreating Roland Alpha Juno PWM Saw oscillator - ideas?:
Here's a bargain basement approach using the file player in signal-in mode. Just drop a single cycle waveform into the file player and boom, something that sounds like pwm. Watch out when changing waveforms though, the file player really doesn't like this when using single cycle waveforms and will make loud, unpleasant noises.
Crikey! That's a bit too brute force for me!
Love the simplicity though!
-
@dannytaurus said in Recreating Roland Alpha Juno PWM Saw oscillator - ideas?:
I'll be doing a lot of processing after the oscillator section,
That emphasises differences rather than obscures them. Everything downstream is affected by the source.
But if accuracy to the original is not the goal, this isn't a problem whatsoever.
As for creating wavetables, use python. You can code custom tools to take your cycles and stitch them into a wavetable. You can even generate PWM in python.
(it takes a bit of setup to get python up and running though, with all the right libraries and versions, it can be a pain) After it's setup though it's great, and ChatGPT is good at writing python code, so you basically have an unlimited supply of little audio dev tools that you can generate.
Or... if you own Serum2, use that. The wavetable editor is good and it can extract cycles and stitch them using different morphs.
-
@Orvillain said in Recreating Roland Alpha Juno PWM Saw oscillator - ideas?:
kindly ask @Christoph-Hart to implement PWM for the sawtooth shapes in the waveform generator
Oof! That would be nice!
I was very pleasantly surprised to find PWM on all the oscillator waveforms in the Synthstrom Deluge synth. Really opens up a lot of sound design stuff.
-
In the context of sawtooth shapes, PWM is really just a per-voice phase reset (IE: Hey.... we've hit our threshold... reset the saw to zero....) - that's how most people do it anyway, iirc. So I actually don't think it would be too hard to add that to the existing waveform generator. If I knew the code, I'd have a go myself!!
-
@griffinboy Good point!
What about this? it should be pretty close to how the AJ works (I think) as it's splitting the signal and "chopping" the output of the saw. The PWM still happens on the pulse..
HiseSnippet 2170.3oc6Z0CaibbEdVRM5+KN14rgSQ.HBRw4fCBj5uyBo3n90VHG0QHJqjq5xvcGRNf6tylcWJIlf.b.oIcIsFHEtxUAHAoKEA45R.xkBCi.jJiz3B2cEI.oy9Myrq3rjKEonH44CWj.DzNuY1468226MCYYetIMHf6iLV7j1dTjwx3JscCaraCByEc3dHir3yQ6z1iDDPsPFFYeOg.iElAI+442eGhMw0j1YHD5TNyj9.lCKrynkK9CY11GPrnmvbzl85EOzj6tK2l2xWrY4QdDylj5ziHhokAideRPCjw2Gug4VaZZUcqplVadupqs0FEJrV97qs9ZE1vZMR002vZqUWkr4VHiY22hEx8qDRBoAHiY1ga0tRC94tpM3TV.qpMU7PATEXmUCe.21RnhhQQ61fYaUN15DfPF3xcrUYU1paiKwrXWNdGa12TJHWmUna.MxjDdYS.uB5vKuF7RARFZPZFEjdcbESelWXGIB7rD9P2PpeMB3mzghZtHimh2kCSvMbEGRS5A9vCWtf6rY972MG7m24GTqkqYHi6li6dDOj9P267NK9yWbgE+EKlqaQ0pkpLw13ysso9oJVDZ3eUK7NtsbpR8uatyH1snWNQP8SZSw82lp6xMUZs1D4tG5xBenG0seABnHSE7eevg6QBIBGQzXv77n9gLADL1idFjFnbKKf2iFzLj6AIB83yfnEtUKaRXxPHQhVj.vFjvuIbNtArv15Ihis3pgEhuNtLKzrQ5XLSJXDrTSBLFkMdK790pQMC6.vYvG7imLod5a+BwauJaRReJ29uczHtbKZN4vz.V.0uP+3S+2+9+4ecX4S8FZ9z3j76huNITyNRITIiY0l+COi5eFiddGR1TYzlcRQxNyv4ou5Z.uDj6lnlvBwXrBywyltu6YTaffRhw2.XjpQZYGFOZxnxRbWtWCtKyTOP7XZnOqdcpuN1SUg1NLDJi2YjaW7XpMkDnEo98J9.lKk3C1I5HZKJbsqOlp+5swJ3lSjJk6l32lpgYWI+a1gh+cri2QmKdpZ5lGu+Eg9jBCph0KXObDLW8EELOl2Jj4VuDAR6u.JBbTKmJPcESJ.QWWpsnvfQFQOQpmyKdV.nJTWK4CeI7SjvBhmMhDVHVnV6TGQCOm62Tl4F8+fIPXGlCGPNe6Rnsss4muK2wiEEvCwQxwJysaGSWYjQMiXPtsCuE79iPZmrkcr4lMqv9YzXPCGz3DByV7FpzJ.ZAz5gtUf2irZrQ1So9Ax8bNb9UfegjoijTWye.wDL8sKSfB+PVonqRvCR8Ww7ROYrFnmAnNgSrDw6JtrsBOfZ3HrLhCAIbkkI9vJf1xEcWlI10AYRY056Tw5IdBhOxH15kwGFbpPpIwFcpnLuX4x8SL8rJkXNwT+F3ZhsX0GWUXaPIzq2VSuRLqdUotdMWslMtziHmwrhot.1qAAhgWMoJbKPE7oqnjkBtmOZYC.wFYzwIRys.4cW9Dbh5RL2Hb1gAtD4htF642uRH0SEHpMVSnYII3STqETtYgtKBonSnWDdBW9tfTHn8J4dtD9Cbsn0.ujE.r5pSPWoU02ym2xS9PO6dTe.8LN5pUk0K1ip7q9zhcoJezG9g+odUkh+Rm+w8UmK8.e5OsEjg0dLoOOoYwT0GX7AnOO+985ZxW754ZVVpO4NVvu7B2AMrwZ.gbeUn4vkaHZZaLoKHT55hf7uCKDvH5YCm0ouzpJwoRkJkLZDNoxjLGVwgO.J9zvhRx.nRtQTdFZ.cVb8dv4RJ9t5oivnUL5bcY0h+Vd3h+d2gif3o0+CuYwXtN.iS7vusaExc.V0nFrj6fzTc8ywJ9qGNc7m7s16SiHAq3v4gMfFslzJ55ChD7QOsWeFvObs7YKiOlFPi15wjB8nm1WhC8PRcVj4UIfElTotiq9VlUCyKhc3VoP3baMTe4L5E3ZKe5fcbBBHvO3kJAjTPZDPRACf.ZlDDPcZe+DhecZn5BYE2twEw2E6dLnJ.o8NsfSfptFfDiHzLH36h3CfruSUpEXMjKO9PI8kmq6bFYtvHyAn03PYpOiaIuKuwPNy+6Sd1uyJ8NgPOp3TnwgkvOfy8fSi5GNEZdXxqOSslt0xnvXOVWzWKfgpTMVwikR5jZ5id4bioQ6ji0pB8yLhJlzLFzMe5hJyXPprnp4+pjcDUbXriyg8njlERkgWHI0JopkbSo3ke.atTS0c9H6O+PKYDuCoiwWLTrkYRWTPuSCEL54lFje9JqHDkZtJL9HdNkg2.MmrE+BIMQQ8T2+ZbK8xQP6v0LO5pUrm+Wt4J1h3R.LXd1sm70G5qts7jwogwaaY80hye0IoKpcyZPytcSFIo0kBRqcSofwCw9W2yQNwe8u3K+6e1PFGkfkudumZ5E6EIj1My89WyFrGiWj.qVsLoTv7IYQnbE0ic6at5KGWjvS9jm8ruawWctHgjmkEpklJ4hTPpmkUH3+28culRYugWilFiVwDpmwHxpT6HZ5zyX78JaSI9IsKKqBwTRR8dojRdk5nIng6h+5+CZF8agc3t7UC.ITdRS+anBI0k2qCH45GY2fNj.WNyhk1MU9l524W7bRATK04ML09vFdMLOvjYaC+U9MGJAveKLwkX2Nfth9jR8iINwDtNferlpBu8gLXJQmJyMoRf1sA2KnShvi9a67V+wey+purs5DcWEumr62zOr7zPq9QLKH53xWy+8iu2e9KJ8Q2PsJka.PchEcUZ9Iyw9vhaauiB8a+r+yGeuuym2WEZvDhirJqc.TzNbdSGh7aQyn88SdZ7c9wgX5yebzUjHT04ki.4WtRlgEvkDOmq.5rtMiBxtGaZl7U0yBWcTW3Zi5BWeTW3Fi5B2bTW38F0E9tCdghuRtQm6QD1BTGk2WwxZruKopczo5+J38.PLC
This is a pretty good read once you get past the flame war:
-
@dannytaurus I am a bit late to the party here, but there is actually some wonderful open source resources for getting started on this (not in HISE, but it translates).
The main one that comes to mind is The Audio Programmer's Creating Synthesizer Plug-Ins with C++ and JUCE where you reconstruct the Roland JX11. They guide you on building the oscillators from scratch and there's a section on PWM as well.
I think this would be highly valuable for what you are trying to achieve!
-
@HISEnberg Awesome! Thanks!
-
@Orvillain said in Recreating Roland Alpha Juno PWM Saw oscillator - ideas?:
In the context of sawtooth shapes, PWM is really just a per-voice phase reset (IE: Hey.... we've hit our threshold... reset the saw to zero....) - that's how most people do it anyway, iirc. So I actually don't think it would be too hard to add that to the existing waveform generator. If I knew the code, I'd have a go myself!!
I don't think this is how the PWM Saw is created in the AJ2. From the front panel diagrams, and some initial scope readings, it looks more like a regular (non-resetting) saw wave with chunks chopped out of it during each cycle. The chunks chopped out are dictated by a variable pulse-width wave.
This could mean it's even simpler to implement in the Waveform Generator. We would set a duty cycle between 0-100% in the UI and during each generation of the saw (or other shape) wave the code would say shall we output the waveform or silence, based on the duty cycle high/low state.
Does that make sense?
EDIT: this is very simplified, of course, and only takes into account one pulse, but multiplying up to 2/4/8/etc pluses doesn't sound like it would be that much more work.
Also, I have no idea if I'm using any of the correct terminology here. Just words that sound about right!
-
@modularsamples said in Recreating Roland Alpha Juno PWM Saw oscillator - ideas?:
@griffinboy Good point!
What about this? it should be pretty close to how the AJ works (I think) as it's splitting the signal and "chopping" the output of the saw. The PWM still happens on the pulse..
HiseSnippet 2170.3oc6Z0CaibbEdVRM5+KN14rgSQ.HBRw4fCBj5uyBo3n90VHG0QHJqjq5xvcGRNf6tylcWJIlf.b.oIcIsFHEtxUAHAoKEA45R.xkBCi.jJiz3B2cEI.oy9Myrq3rjKEonH44CWj.DzNuY1468226MCYYetIMHf6iLV7j1dTjwx3JscCaraCByEc3dHir3yQ6z1iDDPsPFFYeOg.iElAI+442eGhMw0j1YHD5TNyj9.lCKrynkK9CY11GPrnmvbzl85EOzj6tK2l2xWrY4QdDylj5ziHhokAideRPCjw2Gug4VaZZUcqplVadupqs0FEJrV97qs9ZE1vZMR002vZqUWkr4VHiY22hEx8qDRBoAHiY1ga0tRC94tpM3TV.qpMU7PATEXmUCe.21RnhhQQ61fYaUN15DfPF3xcrUYU1paiKwrXWNdGa12TJHWmUna.MxjDdYS.uB5vKuF7RARFZPZFEjdcbESelWXGIB7rD9P2PpeMB3mzghZtHimh2kCSvMbEGRS5A9vCWtf6rY972MG7m24GTqkqYHi6li6dDOj9P267NK9yWbgE+EKlqaQ0pkpLw13ysso9oJVDZ3eUK7NtsbpR8uatyH1snWNQP8SZSw82lp6xMUZs1D4tG5xBenG0seABnHSE7eevg6QBIBGQzXv77n9gLADL1idFjFnbKKf2iFzLj6AIB83yfnEtUKaRXxPHQhVj.vFjvuIbNtArv15Ihis3pgEhuNtLKzrQ5XLSJXDrTSBLFkMdK790pQMC6.vYvG7imLod5a+BwauJaRReJ29uczHtbKZN4vz.V.0uP+3S+2+9+4ecX4S8FZ9z3j76huNITyNRITIiY0l+COi5eFiddGR1TYzlcRQxNyv4ou5Z.uDj6lnlvBwXrBywyltu6YTaffRhw2.XjpQZYGFOZxnxRbWtWCtKyTOP7XZnOqdcpuN1SUg1NLDJi2YjaW7XpMkDnEo98J9.lKk3C1I5HZKJbsqOlp+5swJ3lSjJk6l32lpgYWI+a1gh+cri2QmKdpZ5lGu+Eg9jBCph0KXObDLW8EELOl2Jj4VuDAR6u.JBbTKmJPcESJ.QWWpsnvfQFQOQpmyKdV.nJTWK4CeI7SjvBhmMhDVHVnV6TGQCOm62Tl4F8+fIPXGlCGPNe6Rnsss4muK2wiEEvCwQxwJysaGSWYjQMiXPtsCuE79iPZmrkcr4lMqv9YzXPCGz3DByV7FpzJ.ZAz5gtUf2irZrQ1So9Ax8bNb9UfegjoijTWye.wDL8sKSfB+PVonqRvCR8Ww7ROYrFnmAnNgSrDw6JtrsBOfZ3HrLhCAIbkkI9vJf1xEcWlI10AYRY056Tw5IdBhOxH15kwGFbpPpIwFcpnLuX4x8SL8rJkXNwT+F3ZhsX0GWUXaPIzq2VSuRLqdUotdMWslMtziHmwrhot.1qAAhgWMoJbKPE7oqnjkBtmOZYC.wFYzwIRys.4cW9Dbh5RL2Hb1gAtD4htF642uRH0SEHpMVSnYII3STqETtYgtKBonSnWDdBW9tfTHn8J4dtD9Cbsn0.ujE.r5pSPWoU02ym2xS9PO6dTe.8LN5pUk0K1ip7q9zhcoJezG9g+odUkh+Rm+w8UmK8.e5OsEjg0dLoOOoYwT0GX7AnOO+985ZxW754ZVVpO4NVvu7B2AMrwZ.gbeUn4vkaHZZaLoKHT55hf7uCKDvH5YCm0ouzpJwoRkJkLZDNoxjLGVwgO.J9zvhRx.nRtQTdFZ.cVb8dv4RJ9t5oivnUL5bcY0h+Vd3h+d2gif3o0+CuYwXtN.iS7vusaExc.V0nFrj6fzTc8ywJ9qGNc7m7s16SiHAq3v4gMfFslzJ55ChD7QOsWeFvObs7YKiOlFPi15wjB8nm1WhC8PRcVj4UIfElTotiq9VlUCyKhc3VoP3baMTe4L5E3ZKe5fcbBBHvO3kJAjTPZDPRACf.ZlDDPcZe+DhecZn5BYE2twEw2E6dLnJ.o8NsfSfptFfDiHzLH36h3CfruSUpEXMjKO9PI8kmq6bFYtvHyAn03PYpOiaIuKuwPNy+6Sd1uyJ8NgPOp3TnwgkvOfy8fSi5GNEZdXxqOSslt0xnvXOVWzWKfgpTMVwikR5jZ5id4bioQ6ji0pB8yLhJlzLFzMe5hJyXPprnp4+pjcDUbXriyg8njlERkgWHI0JopkbSo3ke.atTS0c9H6O+PKYDuCoiwWLTrkYRWTPuSCEL54lFje9JqHDkZtJL9HdNkg2.MmrE+BIMQQ8T2+ZbK8xQP6v0LO5pUrm+Wt4J1h3R.LXd1sm70G5qts7jwogwaaY80hye0IoKpcyZPytcSFIo0kBRqcSofwCw9W2yQNwe8u3K+6e1PFGkfkudumZ5E6EIj1My89WyFrGiWj.qVsLoTv7IYQnbE0ic6at5KGWjvS9jm8ruawWctHgjmkEpklJ4hTPpmkUH3+28culRYugWilFiVwDpmwHxpT6HZ5zyX78JaSI9IsKKqBwTRR8dojRdk5nIng6h+5+CZF8agc3t7UC.ITdRS+anBI0k2qCH45GY2fNj.WNyhk1MU9l524W7bRATK04ML09vFdMLOvjYaC+U9MGJAveKLwkX2Nfth9jR8iINwDtNferlpBu8gLXJQmJyMoRf1sA2KnShvi9a67V+wey+purs5DcWEumr62zOr7zPq9QLKH53xWy+8iu2e9KJ8Q2PsJka.PchEcUZ9Iyw9vhaauiB8a+r+yGeuuym2WEZvDhirJqc.TzNbdSGh7aQyn88SdZ7c9wgX5yebzUjHT04ki.4WtRlgEvkDOmq.5rtMiBxtGaZl7U0yBWcTW3Zi5BWeTW3Fi5B2bTW38F0E9tCdghuRtQm6QD1BTGk2WwxZruKopczo5+J38.PLC
This is a pretty good read once you get past the flame war:
Yeah, I read a lot of that thread. Pity about the flame war!
The snippet sounds awesome! Great starting point for me to learn how all this stuff works.
Thanks!