More Episodes: • Music Visualizer References: - Music: / @nu11_ft - Raylib: www.raylib.com/ - Veritasium Video on FFT • The Remarkable Story B... - Euler's Formula: en.wikipedia.org/wiki/Euler%2...
Пікірлер: 133
@michalbotor10 ай бұрын
protect this man at all cost. he is a gift to humanity.
@TheBarretNL9 ай бұрын
Exaggeration is also an art I see ;)
@pokefreak211210 ай бұрын
28:46 maaan I feel you there. I remember having an assignment to make a game in Java, they recommended people to use Swing but other libraries were also allowed. I ended up writing my own software renderer and built a game on top of that with smooth 60fps animations, the teacher ended up deducting half a point from my otherwise perfect grade because "my approach was unusual"
@TsodingDaily10 ай бұрын
🫂
@ablobofgarbage10 ай бұрын
Getting points deducted by thinking outside the box is fucking stupid, what do they expect you to learn if they punish you for figuring out your own solutions to problems? Programming isn't just about knowing the magic words to make the computer do the thing.
@abhishek.rathore10 ай бұрын
Happened with me too but on a smaller scale. We had to make an Bezier Curve renderer in OpenGL which rendered a curve. I am made it fucking interactive where you can move the points and it would render the curve in realtime. I got an 8 when my other classmates got a 9 or a 10 for their generic implementation which just read it the points off of stdin and then put up the curve.
@kaksisve401210 ай бұрын
I remembered, that I was giving a talk on a local conference at my university about monads. I was preparing it for several weeks and was questioning people how to make it more comprehendable. And guess what? Nobody of those boomers from jury f*cking understood what I was talking about. Such a waste of time... Generally speaking professors in our (Belarusian) education system are brain-locked in what they know and don't even try to go further. "I teach people logic!" "Oh, what that weird lollipop operator from linear logic is? I can't understand it"
@ablobofgarbage10 ай бұрын
@@abhishek.rathore I am struggling to imagine how any rational person could deduct points because of that
@gelding10 ай бұрын
Please keep adding those videos, they are gold
@chomik387310 ай бұрын
12:36: second result about QOA 13:03: result disappeared Pepehba
@delofon4 ай бұрын
elite trolling from ddg
@furti10 ай бұрын
Tsoding is absolutely terrified of floats after this one. (if you know, you know)
@monsieuralexandergulbu367810 ай бұрын
Endianness 💀
@mrorigo10 ай бұрын
F floats.
@aciddev_10 ай бұрын
alt stream title: zozin flashbanging us with vlc and listening chiptune
@rsa599110 ай бұрын
Tsoding, there is a video that helped me to understand FFT: it is by Reducible - "FFT: the most ingenious algorithm ever?" What made me "click" is that DFT is essentially a polynomial evaluation with x=exp(-2pi*i*f/N), and samples as coefficients. But if it's a polynomial p(x) - we can split it into even and odd powers: then we get p(-x) for "free": p(x)=even(x)+odd(x) p(-x)=even(x)-odd(x) Now, even(x) is a polynomial with only even powers, but you can also think about it as a polynomial with *all* powers, but with x^2 as a variable! So we can split it again, and get a value for (-x^2) for "free". The odd(x) can also be split, but we need to factor out (x) first - so it would have only even powers = be a polynomial of x^2. So we'll get: p(x)=even(x)+x*odd(x) p(-x)=even(x)-x*odd(x) Now, repeat the same for even and odd, to get x^2 and (-x^2) - and use the second to calculate p(ix) and p(-ix), etc.
@vmannn42596 ай бұрын
These vids are amazing, even tho i usually just program in rust, your intricate detail into talking about your implementations of the code is good to the point of me wanting to go along with you so i can get some taste of C.
@slugpet30003 ай бұрын
The literal amount of knowledge per second I gain from watching your videos is insane
@muhammadmustafa31586 ай бұрын
Amazing explanation and a treat to watch the goat zozin
@elJohnnySilva10 ай бұрын
Dude, I love your videos
@DeveloVooshGWeb7 ай бұрын
This is really helpful online learning material lmao thank you for this
@mmmmm143810 ай бұрын
please put all videos on KZfaq ❤
@mr.daniish10 ай бұрын
The legend does it again!
@danv871810 ай бұрын
"Cooley-Tuckey are turning in their grave"....I'm pissing myself here! Loved the video Tsoding. You're making me fall in love again with C and programming.
@MetinCloup10 ай бұрын
İ just searching this. youre the man who always teach me something in need
@varshneydevansh10 ай бұрын
I was just watching your old video today about the music generation 😮.
@simonl193810 ай бұрын
Please make a spatial mix panel, setting sound sources in 3D space relative to the user, that'd be absolutely insane.
@cheebadigga40928 ай бұрын
Love the beer mug for drinking tea! :D
@lolapplesauce10 ай бұрын
2:29:05 Tsoding always making 3 hour long programming streams worth the watch
@stephaneduhamel770610 ай бұрын
To get pi, I usually use acosf(-1) instead of atan2. I don't know if it's actually faster to compute, but it's faster to type.
@benjaminschmidties998910 ай бұрын
amazing video thanks
@leongarcia328110 ай бұрын
I had a dream a few days ago, where I saw you building an audio editor on stream. Then this came out.
@sparshpriyadarshi3 ай бұрын
this stream brought out the humble side of our guy, charming stuff
@chillydill470310 ай бұрын
The visuals and explanations from @1:38:00 was superb! Great job!
@mrorigo10 ай бұрын
Go Tsoding. I would not have any way to learn without you.
@no_cola10 ай бұрын
Thanks a lot, great explanation! But you stopped on exactly that point where FastFt started - removing extra calculations of W, thats why we use recursion (those 3 lines of code 😀). You can get explanation in Veritasium video that you suggested (from 17:00 to 19:00). Some time you can encountered with bit reversing operation - for me it was the most confusing. Indeed it just for emulating recursive calls.
@Asdafgaser5 ай бұрын
Thank you for the cool video and stream! I used this video as a reference for some c practice and i found out through testing and debugging that the "amp" function will access out[i] out of bounds for some bigger "frames" variable's values - happened to me and i had to increase, temporarily, the array's length. Also, the cell_width would be 0 if N was bigger and the rectangles would not be drawn. so i had to use floorf to approximate to an int value and to set it to a value bigger than 1. It's some months later but maybe has similar fun like me. Very curious to look in the next videos if he fixes these things too.
@hetias10 ай бұрын
I remember trying to do this a couple of moths ago, using c++ and sfml. It didn't work that well and i kinda felt like it was beyond me so i just move on to other projects. Now gonna try again now with c and sdl2 'cause i'm more used to these, so i can have help by watching this but i would still have to figure out some things by myself. Thanks again tsoding (:
@meatlover69164 ай бұрын
2:10:34 you're essentially getting Fourier coefficients but negating back their rotations by some clockwise value by using the negative sign; so if you manage to rotate it back by a clockwise value equal to the counterclockwise value it was already rotated by you will get the magnitude with respect to one of the fundamental frequencies that make up the original wave that it contributes to the original amplitude.
@10tronic7 ай бұрын
Genial encontrar este valioso contenido. Contigo estoy aprendiendo C e inglés . Gracias
@gurgalof10 ай бұрын
you can do cabsf(out[i]) to get the magnitude of the complex number
@kawaikaede226910 ай бұрын
epic vod
@benjagamen29642 күн бұрын
So i figured out that learning fourier transforms in college was worth just to understand this video :D
@alvarobyrne10 ай бұрын
there is a fft course from standford around youtube , a season range
@ruiuniver410 ай бұрын
wonder are tsoding using HHKB? the keyboard sound is so nice
@versace1010 ай бұрын
You should do a stream where you try to solve as many problems from the euler project
@Mons4295 ай бұрын
28:17 this reminds me of a program I wrote few years ago that decompose audio into a spectrum of frequencies with fourier transform, it also allows you to edit the spectrum and inverse transform it into a new audio, when I show it to my math teacher.... he was unimpressed
@vanish340810 ай бұрын
I need that giant glass cup that you have for watching your sessions
@thacuber2a0310 ай бұрын
holy shit you used nu11's songs!!!!!!
@kennethmanheim26510 ай бұрын
how do I can make Keywords like complex from the complex.h headerfile? It seems for me like a swooped template in C, which shouldn't be that possible. PS: And am I right by 1.0i means it's complex number or?
@poopybutt-jb5fv9 ай бұрын
Have you ever considered making like music production plugins? I feel like that could be cool
@byterbrodTV10 ай бұрын
Thank you for another education and interesting video. I'm sad that i can't like it twice. I notice, that it all was within one stream :o. As a person who streamed before i know that 5 hours of streaming is hard. And I'm not saying about the quality of content. I don't know how you can think about Fourier transformations at night. My brain refuses to work at that time. P.S. 2:28:34 - The point 👏👏👏 i'm laughing as fk :D
@user-nq5es4co3d10 ай бұрын
2:28:30 АХАХАХАХАХ!!1
@blastygamez10 ай бұрын
Nice
@VictorMasnikov9 ай бұрын
Синус и косинус блин 😂😂
@vuongbinhan2 ай бұрын
Just a note for anyone who is curious in the FFT: - FFT uses butterfly method to recursively divide and swap to compute the discrete frequency contribution of each sample. It works because exp(-jf) is a point on the unit circle on the complex plane, for DFT, these points will repeat. - The minus sign is not really important, it's just a (widely used) convention for the forward Fourier transform, if there's no minus sign for the forward transform, then the reverse transform must have the minus sign. The region where the integral converges might be different but I think all the properties remain the same.
@wagsman99994 ай бұрын
This is a great video on how to process raw buffered data. If anyone is coding this... recommend adding a negative to the h after the else statement - otherwise, all the rectangles are rendered above the "zero" axis. This is because the samples (the t's) are negative. See below: if (t >= 0) { DrawRectangle(i * cell_width, h / 2 - (h / 2) * t, 1, (h / 2) * t, RED); } else { DrawRectangle(i * cell_width, h / 2, 1, (-h / 2) * t, RED);
@wermair10 ай бұрын
Demoscene awaits you 👾
@caienmusharraf722210 ай бұрын
nice
@syedahkam716410 ай бұрын
Hey, where can I find an invite link to your discord server?
@elitracy178410 ай бұрын
Need a flash bang warning when you switch over to vlc
@NicolaGuerrera10 ай бұрын
Damn, I was just making a music visualizer with webgpu and this popped up!
@peterheijstek528810 ай бұрын
You have the same IKEA chair as me lmao
@sempiternal_futility10 ай бұрын
how are you so good at writing code?
@defini710 ай бұрын
Next video: using audio files to generate terrain a.k.a. 1d perlin noise or vice-versa
@vanshaggarwal13587 ай бұрын
i don't know why but the audio doesn't seem to work on my mac ?? any solutions ??
@davidsewell49992 ай бұрын
Noob question. How did he pull up the raylib docs so fast (@7:55) ? Looked like searched using telescope or something within vim for the include folder that contained the doc. Is that right?
@SebastianSipos10 ай бұрын
flac is just specialized (lossless) compression for wav.
@rogo733010 ай бұрын
wav is just a container for PCM. and PCM is just how samples (literally amplitude sample of sound wave at this moment) are stored and readed by sound cards. flac trying to compress that PCM without loosing any data.
@ShotgunLlama10 ай бұрын
That's odd that FLAC was excluded. I didn't think it was too hard, I wrote a FLAC encoder in C++ as part of an MJPEG AVI writer
@thegremlin987610 ай бұрын
the weirdest thing is hat as far as i could tell from the commits, it was excluded arbitrarily from the default configuration for no apparent reason. There haven't been any issues specifically about the format and the commit itself doesn't reference anything either, very weird
@abzrg10 ай бұрын
won't you continue fortran stuff?
@ooze98089 ай бұрын
my compiler won't let me set a struct { float left; float right; } Frames equal to a void pointer like you're doing??
@accountprincipale22937 ай бұрын
what operating system do you use?
@andrewzuy601210 ай бұрын
2:28:30 Sinus i Cosinus BLYAD! 😁😆🤣
@tianned10 ай бұрын
не выдержал и жостко перешел на нейтив ленгвиж
@ilovepeaceandplaying89179 ай бұрын
pog
@xhivo9710 ай бұрын
Help this recreational programmer keeps making cool awesome content how can I keep up lol
@kodukoders8 ай бұрын
Why I can't understand how sounds work
@hoteny6 ай бұрын
45:19 what kind of black magic did i witness here? Especially at the end…
@ryanshea52215 ай бұрын
I identify with your seething frustration and confusion with inconsistent terminology on a spiritual level
@mthia10 ай бұрын
1:35:25 yeah, it is. i remember 50 digits of pi 😅
@thisisrealmaybe343010 ай бұрын
Make audio plugin like reverb after this 😂
@vitaliyotdihaet10 ай бұрын
1:40:25 actually you can measure precisely n/2 frequencies, because of periodic nature of sins (that's why 48000 Hz sample rate is so common, because normal humans can hear up to 20 kHz)
@josephlagrange953110 ай бұрын
I think you wrong, the number 48kHz was not chosen besause of that
@fkeyzuwu10 ай бұрын
@@josephlagrange9531 the number 44.1khz was chosen because of that, look into nyquist theorm. basically we can hear up to 20khz~, so we need twice as much samples + a bit more to be able to detect frequencies up until our hearing range with no major information loss. 48khz is basically just a better number for video + audio since videos are a lot of time made in 24fps.
@Bobbias9 ай бұрын
@@josephlagrange9531no, 48khz wasn't, but 44.1khz was chosen in part because it's slightly over double 20khz.
@blackhorse842710 ай бұрын
And at nights you helping fsb to fight "The west" using your hacking skills?
@lilultime655510 ай бұрын
Where did that raylib.env come from? How is that set up?
@TsodingDaily10 ай бұрын
It contains just 2 lines export PKG_CONFIG_PATH="$HOME/opt/raylib/lib/pkgconfig/:$PKG_CONFIG_PATH" export LD_LIBRARY_PATH="$HOME/opt/raylib/lib/:$LD_LIBRARY_PATH"
@lilultime655510 ай бұрын
@@TsodingDaily thank you!
@markpi235010 ай бұрын
Great!
@try-restart6 ай бұрын
✍
@Rubyd77710 ай бұрын
What editor is he using?
@alexandersanchez913810 ай бұрын
emacs
@luxluth10 ай бұрын
emacs
@yuriicherniak10 ай бұрын
2:28:24
@grenadier470210 ай бұрын
Where are you from?
@Bobbias9 ай бұрын
He's from Russia, living in Novosibirsk.
@grenadier47029 ай бұрын
@@Bobbias As I expected looking at the accent
@rogo733010 ай бұрын
One thing that pissing me off is that when you google "what is samples", Adobe says on their site that "more samples = better result", which is total BS if you just listening sound. It can be true when you apply different transformations on sound, but they don't mention that. Basically, you need at least two points ("samples") to reproduce original frequency of wave, which is making sence if you think about it as "we hearing how volume changed and our brain doing FFT on that change". So, human ear theoretically can sense freqs up to 22kHz. Double that and add some room to avoid aliasing, and here you get 44.1kHz and 48kHz. DON'T DOWNLOAD 96kHz MUSIC, IT'S POINTLESS.
@semenkuzovchikov815010 ай бұрын
no mpd lol
@stewartzayat752610 ай бұрын
1:26:57 the answer I need to question lmao
@user-wd7qu7vu4k10 ай бұрын
2:28:35 lulz
@konstantinrebrov6758 ай бұрын
Is this C programming language?
@levveliki888810 ай бұрын
fft these nuts 🤣🤣🤣🤣
@mohmoh-sj5hp10 ай бұрын
Please. Do mp3. Player in c
@dandreani10 ай бұрын
It's the same thing. Raylib will load mp3 like the ogg file
@adarsh319610 ай бұрын
fft implemention is wrong its was giving different output compare to first dft implementation
@ooze98089 ай бұрын
wtf is a cliteral?
@TsodingDaily9 ай бұрын
It's a hidden Raylib feature. Only Senior Developers can find it.
@mightbearobot8 ай бұрын
@@TsodingDailybro
@kibaofficial63325 ай бұрын
Bin ich der einzige der nicht wusste das Tsoding Deutsch kann? English: Am i the only one who dosn't know that he speaks german?
@srivarshan792510 ай бұрын
Did anyone notice that "Porn Folder : 7.4GB" in i3 bars😂😂 Is that a troll or Is that real?? I noticed that When I was watching this in full screen
@chomik387310 ай бұрын
it is not troll frfr
@ineverknowdoyou10 ай бұрын
its been in every stream i belive.
@rian0xFFF10 ай бұрын
What is it suppose to mean?
@ruslangareev328010 ай бұрын
Swap file i guess
@aspectreishauntingeurope10 ай бұрын
it's been shrinking, i remember it being 7.5
@TheMoQingbird10 ай бұрын
ugh, that music is giving me a headache
@paklenizmaj10 ай бұрын
Write macro ARRAY_LEN with parentheses to protect the code in the future. ARRAY_LEN (xs) = ( sizeof (xs) / sizeof (xs [ 0 ] ) ) This is one way of hidden error: float errorValue = someNum / ARRAY(X); => float errorValue = someNum / sizeof (xs) / sizeof (xs [ 0 ] ); => float errorValue = ( someNum / sizeof (xs) ) / sizeof (xs [ 0 ] ) ; and this is not correct value
@josephlagrange953110 ай бұрын
Why write macro instead of a plain func for this?
@paklenizmaj10 ай бұрын
@@josephlagrange9531In runtime you lose informatiotion about array size, so we must calculate this in compile time, and if we could do that in runtime becouse we do not have templates, we must write function separatly for each type.
@paklenizmaj10 ай бұрын
I forgot to mention, this way the size of the array can only be calculated if the array is created statically. For dynamic arrays, this macro does not work, but the programmer must take care of how much memory is needed and the size of the array.