Looking at going back to school

LoboLives

Looking at going back to school
« on: June 05, 2020, 11:27:50 PM »
I've developed more and more interest in the area of software development and programming and I've been curious what areas of software development would best for leading down a path to develop software for synthesizers? I've been looking at online courses and trying to see how to best approach this. Does anyone have any suggestions or tips?

Re: Looking at going back to school
« Reply #1 on: June 10, 2020, 01:39:44 PM »
I guess the first question is how much experience you already have about software development?

The second question would be how much experience of signal processing you have in the digital domain?

LoboLives

Re: Looking at going back to school
« Reply #2 on: June 10, 2020, 08:29:13 PM »
I guess the first question is how much experience you already have about software development?

The second question would be how much experience of signal processing you have in the digital domain?

Very little if any

Re: Looking at going back to school
« Reply #3 on: June 11, 2020, 11:35:38 AM »
I highly recommend checking out Native Instruments Reaktor 6 for a primer.   It's a graphic programming environment, however it goes very deep into lower level logic when using primary and core programming -- You can design extremely elaborate instruments, and get a good feel for the logic puzzles that go into audio engineering and synth design.   

I had Reaktor for years (packaged with NI Komplete Standard or above) and never really explored its depths, but last year I took a deep dive.   I'm close to completing a 16-Voice Poly Synth with a sort of wish list of features that my ultimate analog poly would have.   (three morphable multi-core VA oscillators, wavetable osc option, deep voice modeling implementation,  highly graphical interface with lots of visual feedback, dual filter/amp stereo binarual architecture, a variety of filter types, super flexible mod matrix like the Moog One with mod transforms, advanced envelopes and lfos, giant effects sections with deep modulation, etc..)    I would say its inspired by PEK, Pro3, and Moog One... sort of a mashup of my favorite features from those synths.

This is a zoomed in example of one of my Reaktor Oscillator Core Macros to give an idea of what the graphical programming looks like:



This is a screenshot of the front end interface:




For next steps, most VSTs and DSP engineering is programmed in C++  ....   I'm actually considering getting further into DSP / Audio Engineering too.   (for my day job I'm a MS dot.net programmer / database engineer)   I've been considering going the JUCE route.    Would be interested in hearing if anyone else has used JUCE?   



OB-X8, Pro 3, P6, Rev2, Take 5, 3rd Wave, Deepmind, PolyBrute, Sub 37
Sound Sets:
https://sounddesign.sellfy.store/
Free Patches:
https://www.PresetPatch.com/user/CreativeSpiral

LoboLives

Re: Looking at going back to school
« Reply #4 on: June 11, 2020, 02:12:36 PM »
I highly recommend checking out Native Instruments Reaktor 6 for a primer.   It's a graphic programming environment, however it goes very deep into lower level logic when using primary and core programming -- You can design extremely elaborate instruments, and get a good feel for the logic puzzles that go into audio engineering and synth design.   

I had Reaktor for years (packaged with NI Komplete Standard or above) and never really explored its depths, but last year I took a deep dive.   I'm close to completing a 16-Voice Poly Synth with a sort of wish list of features that my ultimate analog poly would have.   (three morphable multi-core VA oscillators, wavetable osc option, deep voice modeling implementation,  highly graphical interface with lots of visual feedback, dual filter/amp stereo binarual architecture, a variety of filter types, super flexible mod matrix like the Moog One with mod transforms, advanced envelopes and lfos, giant effects sections with deep modulation, etc..)    I would say its inspired by PEK, Pro3, and Moog One... sort of a mashup of my favorite features from those synths.

This is a zoomed in example of one of my Reaktor Oscillator Core Macros to give an idea of what the graphical programming looks like:



This is a screenshot of the front end interface:




For next steps, most VSTs and DSP engineering is programmed in C++  ....   I'm actually considering getting further into DSP / Audio Engineering too.   (for my day job I'm a MS dot.net programmer / database engineer)   I've been considering going the JUCE route.    Would be interested in hearing if anyone else has used JUCE?

Awesome. I'll check this out for sure.

Re: Looking at going back to school
« Reply #5 on: June 16, 2020, 12:34:43 PM »
Hi. I don't have any real formal math or DSP training, but I am a software engineering and have learned enough to build a dx100-style VSTi in C++ using Juce (for example). I eventually started doing my DSP kind of stuff in PureData and more recently switched to Max. IMO, they are a great way to understand signal flow and DSP concepts before you get into the nitty gritty of actually programming a VST or something. There are definitely some tasks that are very tricky with them vs a normal textual programming language, but those things are not the bread and butter of what you'd be doing. It's worth noting that even if you are coding a VST in C++, these languages are still much quicker and easier for prototyping ideas and so they would still be useful.

I don't have any experience with Reaktor, but it looks like a sort of similar idea to me.

Anyway, I would be open to mentoring someone in this stuff, at least up to the point that I can. The easiest way to get started would be to install PureData (it's free) and start working through its documentation, which is fairly thorough.

LoboLives

Re: Looking at going back to school
« Reply #6 on: June 17, 2020, 01:02:55 AM »
Hi. I don't have any real formal math or DSP training, but I am a software engineering and have learned enough to build a dx100-style VSTi in C++ using Juce (for example). I eventually started doing my DSP kind of stuff in PureData and more recently switched to Max. IMO, they are a great way to understand signal flow and DSP concepts before you get into the nitty gritty of actually programming a VST or something. There are definitely some tasks that are very tricky with them vs a normal textual programming language, but those things are not the bread and butter of what you'd be doing. It's worth noting that even if you are coding a VST in C++, these languages are still much quicker and easier for prototyping ideas and so they would still be useful.

I don't have any experience with Reaktor, but it looks like a sort of similar idea to me.

Anyway, I would be open to mentoring someone in this stuff, at least up to the point that I can. The easiest way to get started would be to install PureData (it's free) and start working through its documentation, which is fairly thorough.

I'd absolutely would welcome any mentoring you can provide. I'll download PureData and check it out. Thanks so much.

Pym

  • **
  • 200
Re: Looking at going back to school
« Reply #7 on: June 17, 2020, 08:25:54 AM »
Step 1: Find a project you are excited about that seems too simple
Step 2: Get frustrated when project is way more difficult than expected
Step 3: Repeat Step 1

Hi. I don't have any real formal math or DSP training, but I am a software engineering and have learned enough to build a dx100-style VSTi in C++ using Juce (for example). I eventually started doing my DSP kind of stuff in PureData and more recently switched to Max. IMO, they are a great way to understand signal flow and DSP concepts before you get into the nitty gritty of actually programming a VST or something. There are definitely some tasks that are very tricky with them vs a normal textual programming language, but those things are not the bread and butter of what you'd be doing. It's worth noting that even if you are coding a VST in C++, these languages are still much quicker and easier for prototyping ideas and so they would still be useful.

I don't have any experience with Reaktor, but it looks like a sort of similar idea to me.

Anyway, I would be open to mentoring someone in this stuff, at least up to the point that I can. The easiest way to get started would be to install PureData (it's free) and start working through its documentation, which is fairly thorough.

I'd absolutely would welcome any mentoring you can provide. I'll download PureData and check it out. Thanks so much.
Sequential

Re: Looking at going back to school
« Reply #8 on: June 19, 2020, 09:14:18 PM »
Step 1: Find a project you are excited about that seems too simple
Step 2: Get frustrated when project is way more difficult than expected
Step 3: Repeat Step 1

What about Step 4?   haha...  The bleak reality of getting into a new programming environment.   This was my experience when I got into Arduino for my Chromatic Music Spiral sculpture...  Many frustrating sessions just to get the basic framework setup and get components working.   About 50 hours later all was good though :)

I actually just downloaded JUCE today... now trying to get it set up with Visual Studio. 

Hey @Pym, what type of IDE do you guys use in house when programming firmware for hardware instruments?   Is it something like Visual Studio / Xcode / CLion, or something more proprietary and specific to the ICs you use?


https://www.youtube.com/watch?v=7WrQFnOpqRI
« Last Edit: June 19, 2020, 09:45:25 PM by creativespiral »

OB-X8, Pro 3, P6, Rev2, Take 5, 3rd Wave, Deepmind, PolyBrute, Sub 37
Sound Sets:
https://sounddesign.sellfy.store/
Free Patches:
https://www.PresetPatch.com/user/CreativeSpiral

Re: Looking at going back to school
« Reply #9 on: June 19, 2020, 09:44:16 PM »
Hi. I don't have any real formal math or DSP training, but I am a software engineering and have learned enough to build a dx100-style VSTi in C++ using Juce (for example). I eventually started doing my DSP kind of stuff in PureData and more recently switched to Max. IMO, they are a great way to understand signal flow and DSP concepts before you get into the nitty gritty of actually programming a VST or something. There are definitely some tasks that are very tricky with them vs a normal textual programming language, but those things are not the bread and butter of what you'd be doing. It's worth noting that even if you are coding a VST in C++, these languages are still much quicker and easier for prototyping ideas and so they would still be useful.

I don't have any experience with Reaktor, but it looks like a sort of similar idea to me.

Anyway, I would be open to mentoring someone in this stuff, at least up to the point that I can. The easiest way to get started would be to install PureData (it's free) and start working through its documentation, which is fairly thorough.

Hey @wbajzek - yeah, Puredata looks like a similar concept.  I've played around with Max a bit too.  I've found Reaktor to be a really great environment for prototyping ideas.  I initially started a Reaktor project to do a sort of proof of concept on an advanced voice modeling setup, but ended up expanded on it and building out a fully featured poly synth... have probably spent 150 hours on this current project - I'm like 95% of the way there, but the last 5% will probably take as long as the first 95%, if the laws of programming hold up.  ;)

I'm just feeling like the JUCE / Visual Studio route seems like the next logical step, as I use VS for work and occasional Arduino/Teensy programming.   I would be interested to hear more about your experiences with your DX100-style project!..  if you have any examples, or links that you recommend for VST / Audio app programming with JUCE.     

Cheers, Jason

OB-X8, Pro 3, P6, Rev2, Take 5, 3rd Wave, Deepmind, PolyBrute, Sub 37
Sound Sets:
https://sounddesign.sellfy.store/
Free Patches:
https://www.PresetPatch.com/user/CreativeSpiral

Re: Looking at going back to school
« Reply #10 on: June 20, 2020, 04:36:55 AM »
Yeah, I recommended PD because it’s free.

I agree about JUCE being the next step. It’s not the only option but I think it’s the best in class and free for non-commercial use.

My progression was that I tried to make a 32-partial additive synth in Max... It worked, but it was a mess. I now know that that was entirely my fault :) But I found JUCE and decided to remake it in that because I naively thought it would be faster and easier. In some ways it was but the reality is that 32 partials * 16 voices is going to slam almost any CPU, and I found myself too tempted to try to optimize it prematurely. Later I learned that a proper build without the debug flags enabled was the right way to do that :)

Anyway, around that time I miraculously found a DX100 in my family’s piano bench, that nobody seemed to know about. I brought it home with me and encountered the inevitable “this isn’t great to program, I wish it had some knobs, maybe I could remake it JUCE.” So I basically did that. i got it to about 90% complete before I lost interest, but I learned a lot from it. Most of what I struggled with was that the conventions for managing the UI that are put forth by the JUCE tutorials (which are nonetheless a great way to get started) are difficult to manage when you have a complex enough UI. My plugin got left in a state where that really needed a rework so it wouldn’t take me forever to make changes to it, and in the meantime I upgraded JUCE and found that some of it had broken compatibility and that I would have to fix that as well.

But really, it is abandoned for now because I found that I was programming all day for work and then in all of my free time, which was overloading me and not actually leaving me time to make music. I also wasn’t interested in selling a commercial VST that was not my own idea, and so that led me to use Max4Live for my smaller personal projects, and then eventually to purchase Max itself for larger ones. I use it more as a compositional tool at this point and build small, purpose-made synths to facilitate those, rather than trying to make general purpose synthesizers in it. I did make a Prophet 6 “clone” in Max4Live that I use often, and occasionally I tinker with better ways of rewriting in order to improve my skills.

In summary, I’d say that I’ve learned enough JUCE to know how to learn whatever I need to build whatever synth I want as long as I understand how that synth works. However, prototyping that synth would be much faster in Max, so that’s how I do it, and so far I haven’t come up with something that I felt was worth the effort of rewriting in JUCE. If you want to do this stuff on your own you need to learn to be a good instrument designer as much as a programmer.

Re: Looking at going back to school
« Reply #11 on: June 25, 2020, 11:58:05 AM »
I guess the first question is how much experience you already have about software development?

The second question would be how much experience of signal processing you have in the digital domain?

Very little if any

Sorry I didn't get notified of your answer.

For plugin type stuff I would recommend Will Pirkle's books: https://www.willpirkle.com/about/books/ he is a really nice guy as well.

The problem is if you haven't got any software development skills this could be a bit of a steep curve!


Another approach could be "Pure Data", you can get nice setups like Bela: https://bela.io or the organelle: https://www.critterandguitari.com/organelle so you can run your creations on real hardware.

Or just run it on your computer to see how you get on, start here: http://msp.ucsd.edu/techniques/latest/book.pdf



LPF83

  • ***
  • 1437
Re: Looking at going back to school
« Reply #12 on: July 31, 2020, 04:35:55 PM »

My progression was that I tried to make a 32-partial additive synth in Max... It worked, but it was a mess. I now know that that was entirely my fault :)

That's awesome, I chuckled when I read this, because one of the first synths I ever owned when I got started in late 80's was a Kawai K5... long story why that and not something else.. lol.  And it was very high quality, but it was an ADDITIVE synth... jeez, talk about a brutal introduction to programming synths!   Just google the front panel image of the thing and think about what additive synth is and you can image what front-panel programming was like.  Luckily I had a good software editor (anyone here old enough to remember Dr. T's?)   So kind of like what you described, my first custom sounds were kind of a mess!   Additive is hard to get "sounding right".

In terms of writing software for synths, despite many decades of software engineering experience under my belt I've yet to do it on synths.  I do know that to write "great" synth algorithms, some experience in C/C++ and a good understanding of basic trigonometry (sine/cosine/tangent etc) is helpful.  Any courses in electrical engineering should be especially helpful, but at the same time I would imagine combining that basic knowledge with some pragmatic approach to what actually sounds good to the human ear is what results in some of the more important contributions to synth hardware innovation.

The Korg synths offer an software development kit for writing custom oscillators and filters for their 'logue line of synths.  I've yet to go there but the topic is fascinating, and I really like what Tim Shoebridge and others are doing with their customizations.
Prophet 10, OB-X8m, Prophet 6, OB-6, 3rd Wave, Prophet 12m, Prophet Rev2-16, Toraiz AS-1, Pro 2, Virus TI2, Moog SlimPhatty, Hydrasynth desktop, Korg Minilogue XDm, Roland JP-8080, Roland System-8, Roland SPD-SX SE / Octapad, Maschine, Cubase/Ableton/Akai MPC