But how the midi music are made? only in bits or with a music instrument?
@jovetj5 сағат бұрын
Sound fonts don't invent sound just as typographic fonts don't write letters to your mother. You glossed over the synthesizer and relegated it to a piece of hardware. But synthesizers don't have to be hardware-good software synthesizers exist today. Both kinds of synthesizers can utilize sound fonts.
@jovetj5 сағат бұрын
I always pronounce is mee-dee. Not mih-dee.
@AJMansfield17 сағат бұрын
5:30 The framerate value is stored negative because that lets you ignore the whole '7 bit' thing -- the full byte with the leading 1 has the exact same negative value, already sign-extended to 8 bits. This saves some of the bit-fiddling you'd otherwise need in order to mask or apply that leading bit when encoding or decoding this value.
@MasKARJ010 сағат бұрын
next, .mod/xm tracker files explained
@mtirado15 сағат бұрын
Very good explanation. I worked on my own MIDI parser a few months ago, so this would've been very useful; specially the explanation about the Running Status, as I was confused why I wasn't able to parse events correctly. Another catch is that some MIDI files treat a note ON event with a velocity of zero as an OFF event.
@nurmr21 сағат бұрын
1:06 Easy Driver from Transport Tycoon. Originally composed by John Broomhall.
@thegermantomoeserКүн бұрын
Nice
@RayBellisКүн бұрын
This is timely, as I've just been writing an SMF parser so that I could extract the sysex data from a preset dump that had been stored in SMF format. Something you've apparently missed is that the spec *requires* that the final event in every track be an "end of track" meta-event, encoded as FF 2F 00. Also, running status is only allowed for *channel* messages (0x8* - 0xE*) and not for system messages or meta events (0xF*).
@STA-3Күн бұрын
As a musical artist, I always wondered how computers actually manage to read those files and how DAWs read them too. This video explains it insanely well. You got my sub. ❤
@RollingHeatКүн бұрын
I previously made a MIDI decoder and synthesizer, but I am interested in the sound-fonts and if there are standardized formats and publicly available files for these.
@LukeVader77Күн бұрын
I appreciate the monkey island soundtrack in the background
@HeresonКүн бұрын
An excellent explanation 🎉
@jcf_1760Күн бұрын
I think the quantity of 32nd notes in a quarter note thing is primarily used to aid in tuple subdivisions, like playing 3 notes evenly across a half-note. I think it also aids in allowing nested tuples to be played. It might also be used by music notation software to help with time signatures. But that's just my theory.
@kono152Күн бұрын
omg this came in at the perfect time ive been trying to wrap my head around the midi file format to make my own midi player as well
@CoolJosh3kКүн бұрын
My guess for the negative frame rate, is due to the MSB being 1. If not masked out, then the sign bit would mean the integer byte represented is ranging from -128 to -1.
@yannickperret1586Күн бұрын
Yes, I'm pretty sure this is that.
@NicholasAndre1Күн бұрын
Very cool! I’ve wanted to do more with MIDI it’s quite a nifty protocol.
@ZullfixКүн бұрын
You've nerd sniped me and now I want to write a MIDI parser for fun
@squidmaster964Күн бұрын
Insanely good video, keep up the great work!
@lohphatКүн бұрын
SMPTE colloquially pronounced SIM-tee Society of Motion Picture and Television Engineers Like the IEEE, SMPTE sets the technical standards for all things video and audio over all media. e. g. The new ST2110 SMPTE standard defines how to handle realtime video and audio and timing data over IP networks vs using baseband SDI cabling.
@jmvr2 күн бұрын
7:40 that's not pronounced "[eɪ] (like in lane)", it's supposed to be pronounced closer to "[ɒ] (like in lot)", jsyk
@PickentCode2 күн бұрын
This is great! About four years ago, I was working on a MIDI visualizer similar to Synthesia and I remember there weren't many videos explaining MIDI files. Thank you for making this!
@gameslp75832 күн бұрын
when you said that python didn't have do while loops and you'll just make a while loop with an if statement at the end... you can just replace the "True" in "while True" with the condition......
@jmvr2 күн бұрын
A do-while loop is a loop that will always run at least once. If you replace the True with the conditional, there's the chance that the condition will be False, resulting in the loop never being run at all. Using an if-statement at the end of the loop achieves the goal of a do-while loop. ``` while 1 > 5: print("This will never run") while True: print("This is guaranteed to run at least once, but due to the end if-statement, it will not continue") if 1 <= 5: break ``` (the above code will likely break due to YT comments being inconsistent in formatting)
@JamsODonnell100Күн бұрын
Very impressive! As a non programmer but keen amateur musician this is the first explanation I have ever seen. Certainly the first that makes any sense to me. Cheers. I’ll need to re watch to properly grasp most of it! Could the irregular number of 32nd notes in a quarter note be down to making playback more human? - I can remember when drum machines were almost instantly recognisable because their timing was ‘too perfect’, and mechanical sounding…Humans can rarely play anything exactly in time
@Wutheheooooo23 сағат бұрын
That's not how do while loop works.
@jogloran2 күн бұрын
Excellent choice of sample MIDIs.
@jmvr2 күн бұрын
5:26 My guess is that you can just easily read the whole byte, since negative integers have that first bit set to 1. But I don't know for sure
@jasmijnwellner62262 күн бұрын
Yep, I'm pretty sure that's it. I'm guessing that someone thought that it would be more efficient to do an unary minus operation rather than toggling a bit. I don't know if and to what extent it actually mattered at the time.
@bryankadzban1159Күн бұрын
Yeah, that's my guess as well: so that you can read that first byte as a signed char (in C) and if the whole byte is less than zero, the frame rate is just the byte value times -1.
@frasermipsКүн бұрын
I believe that the minus comes from the first bit being set. Depending on the CPU's assembly instructions there is often a compare to zero, which avoids loading the comparison value into a register. The CPU can compare -30 to zero within a single instruction. This is generally faster than an & or | bit extraction followed by a compare.
@sokzpieprzu2 күн бұрын
Great and informative video. Makes me wanna create my own MIDI editor/parser
@theashbot40973 күн бұрын
Love how you challenge me to code it myself! I know that is the best way for me to learn, but I really appreciate you helping those how might now know that!
@textnumbers223 күн бұрын
So if I remember correctly the number of 32nd notes per quater note is a backwards compatibility feature.
@ebin22223 күн бұрын
14:23 You can tell this standard was made by americans for dedicating instruments to helicopter, applause and gunshots.
@hyoenmadan3 күн бұрын
I truly hate when specification documents don't store their snippets and samples with a monospaced font. Is like saving formulas in a math document as anything but the formal notation.
@tl880linux3 күн бұрын
Dude this is great! I went on a similar journey with MIDI even down to hex editing test files. My focus is more on realtime MIDI, so if/when I ever get that video out, I will point people here for the technical details of MIDI files. Looking forward to the Soundfont video!
@tivonlitster25473 күн бұрын
Under appreciated video. You do an incredible job putting so much information into a linear stream of thought.
@rcnhsuailsnyfiue24 күн бұрын
Brilliant explanation, excellent graphics, keep up the great work!!! 🎹
@1337purpose17 күн бұрын
fantastic and very informative video thank you!
@vijaishankar3942Ай бұрын
Why is the for loop having range dx+1 and not dx? 5:29
@treint6751Ай бұрын
This is actually the best explanation I've seen. I have always found the explanations on various websites rather confusing
@itooh-gamedevАй бұрын
After browsing countless articles about midpoint algorithm and still struggling to understanding it, this was the exact explanation and visualisations I needed. Thank you for this excellent work!
@NickNGCАй бұрын
I’m too stupid to understand this but cool nonetheless 😅
@ДанилаСтариковАй бұрын
This is the only adequate explanation i found on this algorithm, other sources just give the code without explaining why
@inxomnyaaАй бұрын
Sorry, but the center of coords vs the edge makes a big difference. It's a problem i tried to solve for years in my world edit
@martin77778Ай бұрын
why do we need pNext value ?
@kamartonАй бұрын
Xc=sum(x positiona) / count Yc=sum(y positiona) / count This formula is simplier than anything...
@elmonkehАй бұрын
Can you do an image rotation algorithm? Not those rotate by 90° but rotate fluently?
@grobo503Ай бұрын
This is very old-fashioned, slow and won't result in a smooth circle. Just use a distance function (and a GPU).
@ajinkyaxАй бұрын
Thanks
@Roxas99YamiАй бұрын
6:15 squaring a number is more efficient than multiplication by 2, especially for positive numbers (uint) like the radius, because it is done by bitshifting once to the left. the compiler is already optimized to do squaring in single-cycle cpu time
@poghuman8676Ай бұрын
9:54
@thoughted6069Ай бұрын
Would be cool to see it made for running in parallel for the GPU, or even using more threads in the CPU