1. IMPORTANT:
    We launched a new online community and this space is now closed. This community will be available as a read-only resources until further notice.
    JOIN US HERE

Voyager and PolyBLEP

Discussion in 'REAKTOR' started by Misha Davidoff, May 6, 2017.

  1. Misha Davidoff

    Misha Davidoff Member

    Messages:
    79
    Hello my friends! I'm back after very nice year full of c++ learning=) And I have new quenstions for you.
    1. Moog Voyager using VCO or DCO? If VCO then how it used by midi, routing, OS and memory?
    2. PolyBLEP implementation in Reaktor - how to make it and how it compare to actual circuit simulation?
    3. Moog Voyager using "Discrete" VCO, so I need to simulate every capacitor, resistor and transistor?
    4. How to get specific Voyager's waveforms on overall frequencies (i.e. frequency response?)
    5. How to implement c++ code to Reaktor?
    6. What you guys think about this methods
    https://link.springer.com/article/10.1155/2011/785103
    and how to implement them in Reaktor?
    Frequency spectrum error in few dBs, how I guess there should be a way to make better signal-based simulation (maybe this is only way to get that sound instead trying to model circuit, because there no available Moog Voyager schematic or service manual (but maybe Model D or 901 or 921 or some others may be useful?))
    Thanks!

    Cheers!
     
  2. colB

    colB NI Product Owner

    Messages:
    3,969
    Probably better to ask this in a forum about the hardware... muffwigler or some such
    There are lots of resources with information about polyBlep implementation. I had the most luck at KVRaudio forum. user 'mystran' has made some very informative posts on the subject. There have also been discussion here which you should be able to find using google search.
    try this search query in google:
    'site:www.native-instruments.com/forum/ polyblep'
    No, there are no usable virtual instruments that model every component, it would require way too much cpu. Even the developers who use a modelling approach for filters tend to use a heavily simplified model. This requires a deep understanding of the electronics involved in order to work out which elements can be removed, which must stay, and which can be replaced with more efficient abstract/theoretical mathematical constructs.
    Get a voyager, and some analysis hardware (scope, frequency analyser etc.), and to a lot of work testing the voyagers output at different settings. Then use your results to inform the development of your simulated model.
    Reaktor is a visual language that follows the dataflow programming paradigm. There are no functions or procedures, no object orientation. imperative programming is possible, but sometimes a bit fiddly and messy particularly in Primary. Iteration is a pain in Primary, and impossible in core.
    Fortunately, most DSP related code is relatively low level and not too difficult to convert. The main difficulties are:
    Iteration, what to do with for/next and while loops: Either unroll them, or use clunky primary level iterators.
    variables: learn core and use the OBC system for manipulating data as variables (good for state machines etc.)
    Data structures: Very difficult in Reaktor, best find a different way, or prepare for trouble ;) There is no way to define data types, no decent iteration for sorting, no functions to use in loops to apply procedures to collections of objects...

    If you know Reaktor primary and core well, and know C++ well, then it's pretty straightforward in most cases to read through the c++ code until you understand the system it represents, then develop a new version of that system in Reaktor. It's also not too difficult to notice when you are looking at something that is just not going to work out well in Reaktor e.g. low level cpu sensitive processing that handles arbitrary numbers of user defined objects in complex data structures using iterated processes ;) That's the kind of thing that can be done efficiently in c++, but don't even think about trying in Reaktor!

    Unless you have Voyager hardware to test with, analysis tools and the skills to use them, then I think you are better sticking with a standard polyBLEP approach based on 'ideal' waveforms, or maybe piecewise polyBLEP waveforms if you want to try and get closer to the shape of 'real' VCOs from sketchy oscilloscope pics you get from google images.
    Most of the sound is in the filters, and I suspect any extra magic that does come from the oscillators is not from static waveshape, but from dynamic changes in waveshape and response over time and/or frequency response curves that can be achieved by filtering.

    If you're not careful, you can spend weeks and months working away on this and end up with some great oscillators that sound indistinguishable from the ones in the Reaktor factory library ;)
     
    • Informative Informative x 2
    • Like Like x 1
  3. Misha Davidoff

    Misha Davidoff Member

    Messages:
    79
    IIRC polyBLEP is for antialiasing (clear sound without digital artefacts. Maybe this is what makes polyBLEP osc sound nice to ears and feels like great analog osc?), but not for analog feel achiving.
    As far as I know developers only simulate nonlinear components (not whole circuit), but I just want to learn how to make things to sound and operate the way I want (and implement this knowlegde into VST or/and Reaktor block) and how to built all this equations (using SPICE?)=)
    I don't have anything of this:( but I have open source service manuals/schematic of Minimoog and Micromoog (Micromoog osc morphing from saw to pulse, but Voyager osc from triangle to pulse:)) what could be useful (maybe?;))
    Also I wonder Monark osc is based on Minimoog schematic or something else?
    I will try this "piecewise polyBLEP waveforms" method - I'm beginner and I don't know much about anything and feel myself pretty uneducated, so that's would be very interesting:)
    Filtering is nice and interesting approach, so analog waveform movement (trembling phase/pitch/amplitude/bins/spectrum in time or something)and shapes are made by filering (or you mean a wave-digital filter model)? I think oscillator making this kind of shapes by op-amps, cap, resistors and transistor somehow. In this paper https://link.springer.com/article/10.1155/2011/785103 the reference signals were recorded directly from the oscillator module output without feeding them through the filter module using an M-Audio Quattro audio interface with sampling frequency 44100 KHz and resolution of 16 bits.

    And in overall aspect I can't simulate Moog Voyager because I don't have not only schematic but also paper with approximation equations made by scientists for guys like me who wants to simulate something? In other word this tasks is very hard for me, but I will try to make and learn everything I can (that could be useful).
     
  4. salamanderanagram

    salamanderanagram NI Product Owner

    Messages:
    3,454
    quite frankly, you are underestimating how difficult this sort of work is. as you can see from the paper you posted, this is the subject of research by paid professionals. as you can also see in that paper, not only does the expected spectrum change with the frequency of the oscillator, so does the shape of the oscillator itself. building something that closely emulates the voyager would be an immense amount of work.

    that said, i outlined the process for creating wave morphs in the last thread you started on this subject, and later i posted a block to reaktortutorials that implements said algorithm (we also have over an hour of material on polyBLEPs and polyBLAMPs, which you will also need for this project) . from there it's just low pass filtering on top of the oscillator. but the filter shape is weird and inconsistent so probably difficult to design.

    if you are truly interested in the subject, i suggest you take a substantial amount of math (particularly discrete math, high level calculus and high level algebra) and electrical engineering classes.
     
    • Informative Informative x 1
  5. Misha Davidoff

    Misha Davidoff Member

    Messages:
    79
    Is it possible to implement this equations to Reaktor or C++ code and use?

    I remember, but I don't understand how you did it and all this math (can you explain please?).
    I don't understand, what do you mean?
    Can you advise something in this direction?
     
  6. salamanderanagram

    salamanderanagram NI Product Owner

    Messages:
    3,454
    yep. however as you can see in the paper, it's really just an approximation that is pretty far off in the mid frequencies from what i can see.

    i don't remember either, but it had something to do with using a hard sync oscillator. my code is released though, as i mentioned, if you want to have a look. i would start by trying to build a sawtooth oscillator using polyBLEPs. then try to add a hard sync function that doesn't alias.

    the voyager oscillator is just a sawtooth with the higher harmonics at a slightly lower amplitude, which can be achieved with the proper lowpass filter, as described in the paper you linked.

    honestly not really, it really depends on what you already know, what resources you have available to you, etc. i just taught myself most of multivariable calculus in just a couple of days using KHAN ACADEMY, which i highly recommend if you are good at self-motivated learning. i'm not going to pretend i can do it very well or anything, but i now understand the concepts and can do the math as long as i can look at my notes. i'm just a high school graduate myself, so you don't need to go to harvard to learn this stuff, you just have to be interested and have the right background knowledge.

    all of DSP (and a substantial amount of computer math in general) is based around the concepts taught in discrete math, so you definitely want to take that and any pre-requisites for it. linear algebra, functional analysis and other subjects come up frequently too. DSP is an engineering field, so you want to be familiar with as much math as possible.
     
    Last edited: May 7, 2017
    • Like Like x 1
  7. Misha Davidoff

    Misha Davidoff Member

    Messages:
    79
    I noticed the difference, so I wonder how did you made better approximation than that in the paper? I'm very excited of all that methods and I would try to implement it.

    Can you give me a link please?

    That's would be really great and useful! Thank you!

    Yes, I think Voyager schematic is based on Minimoog+Micromoog combination schematic with Waveshaper section add-on for waveform morphing that was firstly added in Micromoog. I guess exactly this section makes this unusual filtering with comparison to Minimoog relative "ideal" saw wave for example. Also I guess Waveshaper makes signal more dull in comparison with Minimoog bright saw. I guess this section is the answer on question "Why Voyager waveforms look this way?". We have Micromoog schematic in open source but Micromoog waveshaper doing morphing from saw to thin pulse (or silence).
    Here Micromoog waveshaper section circuit:
    http://www.fantasyjackpalance.com/f...og/300_dpi_gif/micromoog_multimoog_main_2.gif

    Oh, you mean source filter? I thought you were about standard lowpass filter. This is some spectral, IIR, iFFT processing going on?=)

    Yep, I subbed to their nice youtube channel.
    I saw this video:


    Thank you for motivating me. I'm very interested in all this things. And thank you guys a lot for sharing with me your knowledge!
     
    Last edited: May 9, 2017
  8. Misha Davidoff

    Misha Davidoff Member

    Messages:
    79
    After all, I'm half a musician (at least I try to be), and half an enthusiast who wants to create his own instruments that would do what I want. At school I did not like math, it seemed to me boring, but now I see great potential and opportunities of math, so I will try to learn discrete math (right now I'm also learning c++).
     
  9. salamanderanagram

    salamanderanagram NI Product Owner

    Messages:
    3,454
    you're misunderstanding.
    the paper is just modeling a static sawtooth to match the spectrum of a moog sawtooth.
    i made a normal sawtooth that transitions like a voyager. the two aren't related and my method is not "better" than the paper, it's just a different thing.

    https://www.reaktortutorials.com/media/shape-oscillator-and-envelope/47344

    again, you're misunderstanding ;)
    i'm telling you what i would do if i were to work on something like this. you'll need to take those steps yourself.

    just to warn you, it's a pretty advanced subject, you may need some pre-reqs.