After quitting my old job, and spending 4 months studying audio programming and applying to job offers, I finally got a job as a Junior Audio Developer. The tutorials on this channel have helped me to reach my goal. Thank you Josh and everyone in the videos!
This is an amazing resource! I was able to cobble a reverb together in Pure Data following this, but I haven't quite wrapped my head around how to implement the matrices. I'm sure it will work even better after I figure that out. This demonstration really demystified reverbs quite a bit. I had an "Aha!" moment when the diffusion step was explained. I'm just handwaving the allpass filters until I need to understand it more deeply.
You could combine the Hadamard and the shuffling/inversion together. But the idea was to have the mixing slightly different for each diffusion. (Apologies for the late reply)
In the diffusion step, how does one prevent the buildup of feedback without decay? In testing my own implementation of the diffusion step, I've found that inserting the Hadamard matrix in the feed-forward path results in the quick buildup of feedback. Is it a matter of spreading out the delay times? What max delay times should be segmented at the first diffusion step? Thanks for any info.
There shouldn't be any feedback in the diffuser - but if you don't scale the Hadamard results properly, the output can be a lot bigger than the input, which sounds similar. Hadamard matrices aren't actually full of ±1, they have a scaling factor of 1/sqrt(N). I could have been clearer about that!
Hi ! First of all thanks for this EXCELLENT presentation. I'm trying to implement this algorithm into Max/MSP's gen~ but output of channels 2, 3 and 4 of my Hadamard Matrix attempt become mute when there is audio playing through 4th input. Any idea of what could go wrong ? Here is the genexpr codebox : out1 = (in1 * 1 + in2 * 1 + in3 * 1 + in4 * 1) * 0.99; out2 = (in1 * 1 + in2 * -1 + in3 * 1 + in4 * -1) * 0.99; out3 = (in1 * 1 + in2 * 1 + in3 * -1 + in4 * -1) * 0.99; out4 = (in1 * 1 + in2 * -1 + in3 * -1 + in4 * 1) * 0.99; 0.99 is just to prevent clipping. Thank you guys !
Now I realise why reverbs are complex! But still what’s bad about just convolving the signal with an impulse response? Clearly this is expensive since tails must be gone by length of impulse response, say a 88K length filter for 2 secs is 88K ops per sample. Why not use a GPU?. Is the issue really about saving computation compared to a full convolution?
Exactly, it's about saving CPU cycles (especially multiplications). 88k operations per sample is quite a lot at 44khz. There is a clever method called partitioned convolution that only does time domain convolution for the early reflection and does the rest with FFTs. Generally working in the frequency domain is a lot easier on the CPU. As for GPU I have no idea. Generally latency is the hardest part. Is there an RTOS that allows you to drive a GPU and get low latency IO?
I want to learn coding because I want to make a DAW as I like to produce music...... so can u tell the roadmap to make a DAW ...so that I can make a free DAW and make music....l am ready to give more 10 years for learning and follow your guidance..... love you from "India"
Start small. DAWs are huge complex beasts. I would recommend starting with simple plugins to learn and fully understand how sound is handled. I can also recommend having a look at game development as a place to learn C++. Game development has a similar focus on real-time performance aka there NEEDs to be a frame rendered for DAWs the audio buffer NEEDs to be full. If you learn how to make basic games from scratch without using a game engine or existing framework then you will be infinitely more comfortable making an interactive interface and workflow for a DAW there are truly a lot of overlapping subjects. If you want and are ready to learn the in-depths of a DAW I suggest you look at making extensions (not audio plugins but actual features) for DAWs. some DAWs allow you to do so but might not use C++ so they might require you to learn another language. Another good source for learning is looking at and helping the development of open-source DAWs. Ardour is a good example of this. Look up their code on Github and look at the issues to see if you can pick up and fix some of the bugs. Again keep it small. A phrase used at my work/university is "Simple Stupid" which refers to the focus on getting things done without using a lot of complexity. Good luck on your path! Sincerely Graduate Game Dev and Game technology researcher, Open-source audio plugin dev, hobbyist ambient music creator
This is easily THE best presentation i've seen on reverb design.
After quitting my old job, and spending 4 months studying audio programming and applying to job offers, I finally got a job as a Junior Audio Developer. The tutorials on this channel have helped me to reach my goal. Thank you Josh and everyone in the videos!
Brilliant, this makes infinitely more sense than any book I’ve read on the subject.
This was great. I implemented it in SuperCollider in about half an hour and ended up with a reverb I can actually use. Amazing.
Thank you!
Really good presentation. Usually the easier the presentation looks, the harder it is to put together. Wonderful job.
This is an amazing resource! I was able to cobble a reverb together in Pure Data following this, but I haven't quite wrapped my head around how to implement the matrices. I'm sure it will work even better after I figure that out. This demonstration really demystified reverbs quite a bit. I had an "Aha!" moment when the diffusion step was explained. I'm just handwaving the allpass filters until I need to understand it more deeply.
Great information! Thanks so much!
❤️
finally understood reverbs!
absolutely fantastic! thank you so much for that. Very clear and in language that we can all understand. Very good teacher. cheers for this.
Amazing - this is a great talk and addresses exactly at the same point where I was struggling with my design. Thank you very much!
Awesome, thanks so much for this explanation
This is a great video. I finally (a year after I first saw it) understand the math on how to implement it. Ye gods DSP is hard.
that was fun. looking forward to try it myself
Amazing presentation, thanks
Really cool, thanks. He mentions a blogpost with some code snippets. Do we have a link for that? Thanks again.
In the diffusion step is the shuffle and invert what the hadamard matrix is used for? I’m just a hair confused.
You could combine the Hadamard and the shuffling/inversion together. But the idea was to have the mixing slightly different for each diffusion.
(Apologies for the late reply)
Wonderful!
this is amazing
Nice one!!
Did I understand this correctly, even though the Schroeder Allpass has been mentioned, it has NOT been used in the diffusor? This is amazing.
Im confused too
Excellent presentation. I think the Juce DSP module documentation page is about to get DDOS attacked!
In the diffusion step, how does one prevent the buildup of feedback without decay? In testing my own implementation of the diffusion step, I've found that inserting the Hadamard matrix in the feed-forward path results in the quick buildup of feedback. Is it a matter of spreading out the delay times? What max delay times should be segmented at the first diffusion step? Thanks for any info.
There shouldn't be any feedback in the diffuser - but if you don't scale the Hadamard results properly, the output can be a lot bigger than the input, which sounds similar.
Hadamard matrices aren't actually full of ±1, they have a scaling factor of 1/sqrt(N). I could have been clearer about that!
@@geraintluff Thanks for the reply!
Sir , Plz Contribute to LMMS development.
LMMS An open source Daw lacking audio recording feature
Hi ! First of all thanks for this EXCELLENT presentation. I'm trying to implement this algorithm into Max/MSP's gen~ but output of channels 2, 3 and 4 of my Hadamard Matrix attempt become mute when there is audio playing through 4th input. Any idea of what could go wrong ? Here is the genexpr codebox :
out1 = (in1 * 1 + in2 * 1 + in3 * 1 + in4 * 1) * 0.99;
out2 = (in1 * 1 + in2 * -1 + in3 * 1 + in4 * -1) * 0.99;
out3 = (in1 * 1 + in2 * 1 + in3 * -1 + in4 * -1) * 0.99;
out4 = (in1 * 1 + in2 * -1 + in3 * -1 + in4 * 1) * 0.99;
0.99 is just to prevent clipping.
Thank you guys !
Can you show us how to create a piano roll / Daw on android studio , please
Now I realise why reverbs are complex! But still what’s bad about just convolving the signal with an impulse response? Clearly this is expensive since tails must be gone by length of impulse response, say a 88K length filter for 2 secs is 88K ops per sample. Why not use a GPU?. Is the issue really about saving computation compared to a full convolution?
Exactly, it's about saving CPU cycles (especially multiplications). 88k operations per sample is quite a lot at 44khz.
There is a clever method called partitioned convolution that only does time domain convolution for the early reflection and does the rest with FFTs. Generally working in the frequency domain is a lot easier on the CPU.
As for GPU I have no idea. Generally latency is the hardest part. Is there an RTOS that allows you to drive a GPU and get low latency IO?
🔥🔥🔥🔥🔥
I want to learn coding because I want to make a DAW as I like to produce music...... so can u tell the roadmap to make a DAW ...so that I can make a free DAW and make music....l am ready to give more 10 years for learning and follow your guidance..... love you from "India"
Start small. DAWs are huge complex beasts. I would recommend starting with simple plugins to learn and fully understand how sound is handled. I can also recommend having a look at game development as a place to learn C++. Game development has a similar focus on real-time performance aka there NEEDs to be a frame rendered for DAWs the audio buffer NEEDs to be full. If you learn how to make basic games from scratch without using a game engine or existing framework then you will be infinitely more comfortable making an interactive interface and workflow for a DAW there are truly a lot of overlapping subjects. If you want and are ready to learn the in-depths of a DAW I suggest you look at making extensions (not audio plugins but actual features) for DAWs. some DAWs allow you to do so but might not use C++ so they might require you to learn another language. Another good source for learning is looking at and helping the development of open-source DAWs. Ardour is a good example of this. Look up their code on Github and look at the issues to see if you can pick up and fix some of the bugs.
Again keep it small. A phrase used at my work/university is "Simple Stupid" which refers to the focus on getting things done without using a lot of complexity.
Good luck on your path!
Sincerely Graduate Game Dev and Game technology researcher, Open-source audio plugin dev, hobbyist ambient music creator
@@sainsay thank you so much for your guidance sir....🙏🙏
17:43 "noice"