I absolutely want more people to start working with cmajor. I feel like it’s a super natural environment. Being able to get up a working UI and even iterate on it with basic web code (or even your favorite web frameworks) is motivational and the DSP is super straightforward as far as I can tell. Although I don’t currently have enough understanding of DSP to make extensive comments on the DSP workflow I found it much easier to get going with it than JUCE. Would love to see an expert like you try it!
Disclaimer though if you want to build a VST with it you would be back in JUCE and C++ and CMake territory. However, the giant hurdle that can be ends up being remedied by what you’ve already made in cmajor leaving you with a build-able project in a few commands and setup.
Hi nice content there, can you show me a course on where to learn any specific type of c++ audio library like BASS, portaudio, synthesia tookit or any other rather than juce, because i wanted to make a music engraving software and ive been struggling to find the resources to learn what i want, and right now i dont know where to start.
overall that is a great list, I would disagree about zig not being ready for audio programming and DSP programming. Its driving factor is you can cross compile zig, c, and c++ code. This allows you to inject zig code slowly into an existing c/c++ project. It has defaults similar to rust with safe and fast builds. It has comptime which is insanely amazing and is generics on steroids. It does have a package manager that works with zig, c, and c++ built into the compiler. Although it has breaking changes and not 1 yet. You can totally develop in the audio industry with it
Perhaps $150 isn't expensive for someone who uses Matlab to its fullest extent. However, in the context of this video, which briefly describes relevant programming languages in simple terms, it's entirely reasonable to assume the target audience member is less experienced. So, I don't think the people this video is intended for would get their money's worth if they bought Matlab. If I may ask, do you use Matlab yourself? If so, personal bias towards Matlab might be a slight factor here. But to be fair, even though I haven't used Matlab myself, everything I hear about it very positive - with the exception of using it as a beginner for creating audio processing software.
I think you were too dismissive of Max/MSP considering how you're supportive of Pure Data. The licensing is different but there's also a massive community of audio specialists working with Max. In fact, there are many developing products in Max. Additionally, you can now export Max projects for the web and Raspberry Pi.
Agree. I prefer max to faust for rapid prototyping. Gen~ feature is key. You cant do this in pure data. Now you can export to web and hardware too. Also good for prototyping with visuals/opengl/etc…
Speaking from experience - doing stuff on the audio thread is a dantean experience in rust. It's definitely not for beginners. So you know like in C/C++ you can prealloc an arena or maybe an object pool and just use it? In rust custom allocators are unstable and prepare yourself for wrapping every single one of your objects in MaybeUninit. Shared mutable state is kinda unavoidable in audio - hence you will end up using RefCell or UnsafeCell more than a healthy amount. Slice accesses are bound checked unless the compiler can prove that it's impossible to get out of bounds, So you either go with processing every sample in a foreach loop using maps and zips or have to agree to making a wrapper type around a raw pointer that overloads the [] operator which is a footgun waiting to fire (rust is way more strict about aliasing than c++). And the solution is to actually place asserts that will be present in your release build as well, which check if your input and output buffers have the same length - how would one guess that?
If you’re interested, I would look in the Rodio repository for how they approach this. Rather than lock on the audio thread, they iterate on a mixer, then that mixer has a controller that locks and adds samples, then uses an atomic bool to signal to the mixer that new audio is ready. This avoids any sort of locks on the playback thread.
@@lukeweston1234 Rodio doesn't exactly do realtime dsp, and good for them. Now how would one implement a realtime safe-ish threadpool that doesn't make the borrow checker catch on fire (the answer is loads of unsafe and lying that references are static even though they're not) I'm currently in the process of writing one - not the nicest code. Also as I mentioned there's this safety-performance tradeoff and going around it is a fun puzzle to solve at times but a puzzle non the less.
@@lukeweston1234 still talking firm-realtime so like can't do syscalls, preferably bounded execution time, should generate a single audio frame before the deadline (depending on buffer size set by the user from ~0.5ms to ~8ms). standard realtime dsp. I guess I'm trying to make a toy daw tho rn focusing on implementing those pesky lock-free algorithms and data structures in rust. I had a previous attempt and not having those handy was a mistake.
cześć! i was expecting some negative comments about MATLAB from the programming side (i have: parentheses and one-indexed arrays)... if you need to show a quick idea and are familiar with linear algebra is really efficient as a language. the GNU octave environment (which is almost MATLAB if you don't care about details) is free so... when you have to make an audio processing demo it works fine (i have used it for vocal separation and reverb impulse response extraction with enough success :-) ) dzięki!
Of course, there is Octave but I never got it to work as I did Matlab 😁 I should have mentioned it though so many thanks! Some DSP researchers I know use it. Still I prefer Python.
Not mentioning Faust, but listing Python or even mentioning Matlab but not SuperCollider indicates the author did not make a good research before the video and you should research further into more credible sources.
In fairness, he did say it was his personal list of 5. Also, I imagine the inclusion of Matlab and Python might be targeted to his audience of (likely) newer students who might be more familiar and comfortable with scripting languages to get started with learning concepts. Along with Faust and PD, JOS from CCRMA has a lot of MATLAB code out there 🙂
others: SuperCollider, Faust, CSound, SonicPi, Soul
Thanks for completing the list! I've used CSound but it seems to be a little forgotten these days... Not sure if I'll ever use it again 😉
Faust is so awesome, I find it strange that so few use it
I absolutely want more people to start working with cmajor. I feel like it’s a super natural environment. Being able to get up a working UI and even iterate on it with basic web code (or even your favorite web frameworks) is motivational and the DSP is super straightforward as far as I can tell. Although I don’t currently have enough understanding of DSP to make extensive comments on the DSP workflow I found it much easier to get going with it than JUCE. Would love to see an expert like you try it!
Disclaimer though if you want to build a VST with it you would be back in JUCE and C++ and CMake territory. However, the giant hurdle that can be ends up being remedied by what you’ve already made in cmajor leaving you with a build-able project in a few commands and setup.
Thanks for the input, I may try it out on the channel one day 😉 It's great that it’s being used.
Hi nice content there, can you show me a course on where to learn any specific type of c++ audio library like BASS, portaudio, synthesia tookit or any other rather than juce, because i wanted to make a music engraving software and ive been struggling to find the resources to learn what i want, and right now i dont know where to start.
Personally I've been really liking SuperCollider lately. It makes it really easy to create some pretty cool synth patches and patterns and what not
Thank you, sir. I was really wondering but I am now set and feel secure in choosing C++
Some other good options: SuperCollider, CSound, Faust
Thanks for mentioning these!
Max is great for prototyping things quickly
overall that is a great list, I would disagree about zig not being ready for audio programming and DSP programming. Its driving factor is you can cross compile zig, c, and c++ code. This allows you to inject zig code slowly into an existing c/c++ project. It has defaults similar to rust with safe and fast builds. It has comptime which is insanely amazing and is generics on steroids. It does have a package manager that works with zig, c, and c++ built into the compiler. Although it has breaking changes and not 1 yet. You can totally develop in the audio industry with it
Wow, thanks for the detailed description: I must check it out then 😉
I’m not sure why you say MATLAB is so expensive. A home license is $150. Maybe that’s more than free for a Python IDE?
Perhaps $150 isn't expensive for someone who uses Matlab to its fullest extent. However, in the context of this video, which briefly describes relevant programming languages in simple terms, it's entirely reasonable to assume the target audience member is less experienced. So, I don't think the people this video is intended for would get their money's worth if they bought Matlab.
If I may ask, do you use Matlab yourself? If so, personal bias towards Matlab might be a slight factor here. But to be fair, even though I haven't used Matlab myself, everything I hear about it very positive - with the exception of using it as a beginner for creating audio processing software.
Great Video.
Which language is best for programming VSTs for DAWs?
Is JUCE one of them?
Maybe actually watch the video. JUCE isn't a language
Honestly just happy you mentioned nim lol
i have a prototype of my vst,
its already being used in the chicano hiphop scene.
CAN I GET IT BUILT ON MY OWN ENGINE.
Have you looked into vult-dsp? What do you think of it?
Subscribed!
I think you were too dismissive of Max/MSP considering how you're supportive of Pure Data. The licensing is different but there's also a massive community of audio specialists working with Max. In fact, there are many developing products in Max. Additionally, you can now export Max projects for the web and Raspberry Pi.
Agree. I prefer max to faust for rapid prototyping. Gen~ feature is key. You cant do this in pure data. Now you can export to web and hardware too. Also good for prototyping with visuals/opengl/etc…
Świetny kanał.
Supercollider doesn’t have single sample feedback, but the pattern system is awesome
Speaking from experience - doing stuff on the audio thread is a dantean experience in rust. It's definitely not for beginners. So you know like in C/C++ you can prealloc an arena or maybe an object pool and just use it? In rust custom allocators are unstable and prepare yourself for wrapping every single one of your objects in MaybeUninit. Shared mutable state is kinda unavoidable in audio - hence you will end up using RefCell or UnsafeCell more than a healthy amount. Slice accesses are bound checked unless the compiler can prove that it's impossible to get out of bounds, So you either go with processing every sample in a foreach loop using maps and zips or have to agree to making a wrapper type around a raw pointer that overloads the [] operator which is a footgun waiting to fire (rust is way more strict about aliasing than c++). And the solution is to actually place asserts that will be present in your release build as well, which check if your input and output buffers have the same length - how would one guess that?
If you’re interested, I would look in the Rodio repository for how they approach this. Rather than lock on the audio thread, they iterate on a mixer, then that mixer has a controller that locks and adds samples, then uses an atomic bool to signal to the mixer that new audio is ready. This avoids any sort of locks on the playback thread.
@@lukeweston1234 Rodio doesn't exactly do realtime dsp, and good for them. Now how would one implement a realtime safe-ish threadpool that doesn't make the borrow checker catch on fire (the answer is loads of unsafe and lying that references are static even though they're not) I'm currently in the process of writing one - not the nicest code. Also as I mentioned there's this safety-performance tradeoff and going around it is a fun puzzle to solve at times but a puzzle non the less.
@@ovi1326 Ah I see you're more talking hard real-time. What type of hardware are you looking to run this on?
@@lukeweston1234 still talking firm-realtime so like can't do syscalls, preferably bounded execution time, should generate a single audio frame before the deadline (depending on buffer size set by the user from ~0.5ms to ~8ms). standard realtime dsp. I guess I'm trying to make a toy daw tho rn focusing on implementing those pesky lock-free algorithms and data structures in rust. I had a previous attempt and not having those handy was a mistake.
nim has been around since 2008, it's been a stable esolang for quite some time
cześć! i was expecting some negative comments about MATLAB from the programming side (i have: parentheses and one-indexed arrays)... if you need to show a quick idea and are familiar with linear algebra is really efficient as a language. the GNU octave environment (which is almost MATLAB if you don't care about details) is free so...
when you have to make an audio processing demo it works fine (i have used it for vocal separation and reverb impulse response extraction with enough success :-) )
dzięki!
Of course, there is Octave but I never got it to work as I did Matlab 😁 I should have mentioned it though so many thanks! Some DSP researchers I know use it. Still I prefer Python.
Great video! Thanks.
Glad you enjoyed it!
Not mentioning Faust, but listing Python or even mentioning Matlab but not SuperCollider indicates the author did not make a good research before the video and you should research further into more credible sources.
In fairness, he did say it was his personal list of 5. Also, I imagine the inclusion of Matlab and Python might be targeted to his audience of (likely) newer students who might be more familiar and comfortable with scripting languages to get started with learning concepts. Along with Faust and PD, JOS from CCRMA has a lot of MATLAB code out there 🙂
thanks
SuperCollider
🎉❤❤❤❤🎉