9:24 There is no need for debouncing midi signals. Midi is a serial communication protocol transporting the key note value so the debouncing of the actual key press have been done in the keyboard before sending it.
7:29 As long as we're not talking about MPE the MIDI channel has nothing to do with polyphony. You configure different sound modules to listen to different channels. It doesn't matter if they are monophonic or polyphonic. So the channels make the sound modules addressable.
You're right! I hadn't thought of that. Just having two Note On messages without a corresponding Note Off is enough for polyphony. Sorry, I'm new to MIDI. :)
Hey, that's a nice FPGA board you have there. It'd be a real shame if someone loaded it with an integer based FFT to listen to a music stream and convert it to MIDI. Pretty much exactly the same thing you did here, only completely different.
I just wanted to suggest something - when you solder heat up the pad and the pins before you apply the tin wire. This will the "ball" formation that can be seen on the pins at 2:34. Of course don't overheat cuz you may damage the components or the pads :D. Otherwise - nice project!
I see what you mean. 0x09 (or 0x9) refers to the message type (first four bits), but the way I wrote it makes it look like that's the entire byte value. I think people can figure it out, though.
@@andywest5773 This is not obvious at all. You wrote Status Byte 0x09 10010000, which doesn't make sense. If you write it this way, the nibbles are reversed.
"Is it still 'eighty' if its not in decimal". I'd say, it is, but "hex" needs to be stated to differentiate which base the number is in (unless its a decimal number). Eg. 80 hex / 0x80 / hex 80 / (80, hex)
I usually write it as 80₁₆ (on paper or blackboard) or as $80 (assembly programming), I often read it as 80H in reference tables. When I speak hex, I say the digits separately, so "eight zero". Otherwise we get things like "efty-nine" for F9, which is fun the first time but impractical when you have to distinguish between AH, 8A and H8.
wow this is dope. Imagine if he reverce engineers the yamaha dx7 next and clones it onto some fpga device that would be so cool or like the roland d50.
Hello! Do an FPGA board has enough IOs to maintain a 8 note MIDI-CV device with Note on, gate, velocity and modulation parameters (at least). 25 is a minimum here (or i can be wrong). Does it have enough DACs or I'll need DAC ICs?
Bits are written to the DAC most significant bit first, which is what I2S requires. But Audacity can only save RAW 16-bit PCM data least significant byte first. So the byte swap is necessary.
Field Programmable Gate Array. It is a tool used for prototyping and small scale runs of architectures that aren't cost effective to run as an ASIC, ie a fabricated chip. The HDL hardware descriptive languages used describe the layout of the logic circuit. HDL is very dissimilar to programming languages in many ways and is harder for the newbie to understand because you not only allocate the memory you describe how it works as well. Neat stuff though.
this is super sweet! Now i can use my DE-10 nano for more than just playing video games. :D next time will you show us how to build an analog synthesizer with an FPAA?
9:24 There is no need for debouncing midi signals. Midi is a serial communication protocol transporting the key note value so the debouncing of the actual key press have been done in the keyboard before sending it.
You know it's gonna be a good one when Andy is involved. You rock, dude
Thank you!
7:29 As long as we're not talking about MPE the MIDI channel has nothing to do with polyphony. You configure different sound modules to listen to different channels. It doesn't matter if they are monophonic or polyphonic. So the channels make the sound modules addressable.
You're right! I hadn't thought of that. Just having two Note On messages without a corresponding Note Off is enough for polyphony. Sorry, I'm new to MIDI. :)
"That's all for today" :D
Pretty nifty little project.
you slowly evolve into FPGAndy
hahahaha - I thought "man, good to have an FPGA guy in the group" - but this tops it :D
Nice, ha ha! I didn't plan it that way. There's just so many things you can do with FPGAs.
We have got a very detailed explanation. Thanks! I will definitely revisit this video some days.
Hey, that's a nice FPGA board you have there. It'd be a real shame if someone loaded it with an integer based FFT to listen to a music stream and convert it to MIDI. Pretty much exactly the same thing you did here, only completely different.
I just wanted to suggest something - when you solder heat up the pad and the pins before you apply the tin wire. This will the "ball" formation that can be seen on the pins at 2:34. Of course don't overheat cuz you may damage the components or the pads :D. Otherwise - nice project!
Very cool project. I would really love to see how you implement ADSR, velocity and so on
Why do you need a separate level shifter? It should be possible to do that just with the optoisolator by feeding it 3.3 rather than 5V.
@7:33 Diagram has 0x09 but binary is 0x90 . 0x90 is MIDI note on for channel 1
Is the verilog code available for download?
Nevermind - followed the link to element14 page - there is a ZIP file with the verilog code.
Great amount of info. I'm going to have to research the de0 nano. Awesome. :) :)
8:21 The problem with pronouncing %x80 like %d80 is that it sounds just like %xA0
Uhh... Bit rusty with my binary and hex, but... At 7:10 I think you got the first code backwards. b10010000 would be 0x90
I see what you mean. 0x09 (or 0x9) refers to the message type (first four bits), but the way I wrote it makes it look like that's the entire byte value. I think people can figure it out, though.
@@andywest5773 This is not obvious at all. You wrote Status Byte 0x09 10010000, which doesn't make sense. If you write it this way, the nibbles are reversed.
@@andywest5773 Fair enough. Sorry, OCD kicked in. Still a good video :)
Hi, what should we do if we have a multi-wave sample and how do we cycle and read through them??
Does this code run with artix-7 dev board. Or do I need to look up and tweak register value related to artix-7 board using this same piece of code?
Wow this is really badass! I might have to take a break from arduinos and figure out some of this FPGA stuff!
"Is it still 'eighty' if its not in decimal".
I'd say, it is, but "hex" needs to be stated to differentiate which base the number is in (unless its a decimal number).
Eg. 80 hex / 0x80 / hex 80 / (80, hex)
I usually write it as 80₁₆ (on paper or blackboard) or as $80 (assembly programming), I often read it as 80H in reference tables.
When I speak hex, I say the digits separately, so "eight zero". Otherwise we get things like "efty-nine" for F9, which is fun the first time but impractical when you have to distinguish between AH, 8A and H8.
nice project, what about a Hammond organ on the fpga ?
Lots of inspiration!
what would you have to do to make it a polyphonic synth?
MIDI signal is one of the "harder" protocol i think, it is annoying as the message length can vary and is not notified at the start of the message
“Hi, I’m Troy McClure and today we’re going to take a look at FPGA and MIDI”
Nice! I'm currently working on a similar project, but using the Zybo from Digilent.
Everyone in this comment section is a legend... y'all like synthesizers and FPGAs! My people.
wow this is dope.
Imagine if he reverce engineers the yamaha dx7 next and clones it onto some fpga device that would be so cool or like the roland d50.
great tutorial captain, awesome!
Which software did you use?
cool project, I think we can create some FM synthesis with this
my guy just remixed yung lean at the end like we wasn't gonna notice hahah
Now lets recreate the OP-1!!
I've done FM on an fpga board, hit deadline before I got the UART for MIDI reinvented. Seriously what IS up with I2S timing?
I wonder, assuming some familiarity with fpga and Verilog, what is time budget to develop such project from scratch?
I'd say 2-3 days with testing and debuging
Nice. Thanks!
Nice, I use that language. Which cross compiler is that?
looks like he's using altera so prob that, quartus prime?
Hello!
Do an FPGA board has enough IOs to maintain a 8 note MIDI-CV device with Note on, gate, velocity and modulation parameters (at least). 25 is a minimum here (or i can be wrong). Does it have enough DACs or I'll need DAC ICs?
i2s is a bus and can have multiple devices on it iirc. For CV you could probably use much slower DACs though.
How about an FPGA MIDI module that I can use with old computer games that use the MT-32, SC-55, etc. ?
You could definitely use this as the starting point for that type of project. The code is freely available for anyone who wants to try.
Gran proyecto midi para todos weeee
Perfect, very good, thanks 😘
ADSR, FM, hmmm let's go waveform :), nice work. FPGA sampler/looper?
ah yes now you need to write the RAM controller, super fun that, lemme tell you
I think an fpga approach would be great for a wavetable based synth ala serum provided you had ample flash and ram
pretty useful video
You wrote your bits out least to most significant? That's pretty confusing.
Bits are written to the DAC most significant bit first, which is what I2S requires. But Audacity can only save RAW 16-bit PCM data least significant byte first. So the byte swap is necessary.
Very nice
I got here because I was wondering if fm snyth chips were analog inside such as the opl2. My guess is yes. Modern analog synths may be truly digital.
very cool
love it
Cool project :) "no for me" to the 80 question. eighty is only for decimal :)
👍👍👍👍👍👍
fpga is cool im buzzed to buy dev board.
Haber usado el Icestudio.
this is cool!!!! =)
Ahhhh, fresshh.
good idea.really))
thats cool and all but i think ill just keep buying them
Andy - that voice requires a beard. Make it so... #Riker
At the beginning, you’d get better results on a midi controller if you actually plug into the midi port
Not sure what you mean. The midiplus AK490 has two MIDI out ports. I used the correct one.
I miss the old format.
You take a niche subject and address the people watching like beginners.
I think you are missing the boat as we say herr
ok... WTF does FPGA even mean?
Field Programmable Gate Array. It is a tool used for prototyping and small scale runs of architectures that aren't cost effective to run as an ASIC, ie a fabricated chip. The HDL hardware descriptive languages used describe the layout of the logic circuit. HDL is very dissimilar to programming languages in many ways and is harder for the newbie to understand because you not only allocate the memory you describe how it works as well. Neat stuff though.
this is super sweet! Now i can use my DE-10 nano for more than just playing video games. :D
next time will you show us how to build an analog synthesizer with an FPAA?