Simple MIDI Monosynth

FPGASynth.SimpleMIDIMonosynth History

Hide minor edits - Show changes to markup

January 09, 2007, at 12:10 AM by 71.106.217.87 -
Changed lines 37-38 from:

Same structure as above, but with pitch noise modulation applied to the MIDI modulation wheel.

to:

Same structure as above, but with pitch noise modulation amount applied to the MIDI modulation wheel. I have a keyboard with a MIDI joystick, so that is hooked up to portamento time and PWM duty cycle.

January 09, 2007, at 12:04 AM by 71.106.217.87 -
Changed lines 35-45 from:
to:

MONOSYNTH_SG0003

Same structure as above, but with pitch noise modulation applied to the MIDI modulation wheel.

Here's a short sample that demonstrates noise modulation of pitch:


January 06, 2007, at 11:46 PM by 72.67.114.221 -
Added lines 32-33:

One MP3 (0003F_PWM.mp3) demonstrates portamento at 0003F (time) and the modulation wheel is connected to PWM.

Changed lines 36-40 from:

MIDI Interface Note: I used a 6N138 for my MIDI input interface. This IC does not require inverting the MIDI data stream. In the main project file, there is a place near the top to add inversion if it's required. Also note that you may be using an FPGA pin other than IO12, you can change this in the user constraints file. In the zip file, you will find a GIF schematic of the 6N138 MIDI receiver I used.

to:

MIDI Interface Note: I used a 6N138 for my MIDI input interface. This IC does not require inverting the MIDI data stream. In the main project file, there is a place near the top to add inversion if it's required. Also note that you may be using an FPGA pin other than IO12, you can change this in the user constraints file. In the zip file, you will find a GIF schematic of the 6N138 MIDI receiver I used.

January 06, 2007, at 10:46 PM by 72.67.114.221 -
January 06, 2007, at 10:29 PM by 72.67.114.221 -
Added lines 28-31:

Here for your listening pleasure (ahem):

January 06, 2007, at 09:08 PM by 72.67.114.221 -
January 06, 2007, at 09:06 PM by 72.67.114.221 -
Added line 24:
January 06, 2007, at 09:06 PM by 72.67.114.221 -
Changed line 23 from:
to:

MONOSYNTH_SG0002

January 06, 2007, at 09:05 PM by 72.67.114.221 -
Changed lines 5-6 from:

bigMONOSYNTH_SG0001

to:

MONOSYNTH_SG0001

January 06, 2007, at 09:04 PM by 72.67.114.221 -
Changed lines 5-6 from:

+big+MONOSYNTH_SG0001

to:

bigMONOSYNTH_SG0001

January 06, 2007, at 09:03 PM by 72.67.114.221 -
Added lines 5-6:

+big+MONOSYNTH_SG0001

January 06, 2007, at 08:40 PM by 72.67.114.221 -
Added lines 23-24:
January 06, 2007, at 08:39 PM by 72.67.114.221 -
Changed line 24 from:
to:
January 06, 2007, at 08:39 PM by 72.67.114.221 -
Added line 21:
Added line 24:
January 06, 2007, at 08:38 PM by 72.67.114.221 -
Changed lines 20-22 from:
to:

The project files below contain basically the same monosynth as above with the addition of portamento. Portamento is provided by an IIR filter that uses no multipliers (design idea provided by Eric Brombaugh). The portamento module is Eric's IIR filter with additional code to provide a clock divider that controls portamento time. In this project, the portamento time is set to a static value. You can change the value by locating the portamento module instantiation in the main project file and changing the clk_div value.


January 02, 2007, at 12:52 PM by 71.108.113.221 -
Changed lines 21-26 from:

MIDI Interface Note: A GIF file of the 6N138 schematic I used for this is contained within this project:

http://www.fpga.synth.net/pmwiki/pmwiki.php?n=FPGASynth.MIDIMonitor

FPGA pin information regarding the MIDI input is in the text of the MIDIMonitor project.

to:

MIDI Interface Note: I used a 6N138 for my MIDI input interface. This IC does not require inverting the MIDI data stream. In the main project file, there is a place near the top to add inversion if it's required. Also note that you may be using an FPGA pin other than IO12, you can change this in the user constraints file. In the zip file, you will find a GIF schematic of the 6N138 MIDI receiver I used.

January 02, 2007, at 12:42 PM by 71.108.113.221 -
Changed lines 21-22 from:

MIDI Interface Note: A GIF file of the schematic I used for this is contained within this project:

to:

MIDI Interface Note: A GIF file of the 6N138 schematic I used for this is contained within this project:

January 02, 2007, at 12:40 PM by 71.108.113.221 -
Added lines 20-26:

MIDI Interface Note: A GIF file of the schematic I used for this is contained within this project:

http://www.fpga.synth.net/pmwiki/pmwiki.php?n=FPGASynth.MIDIMonitor

FPGA pin information regarding the MIDI input is in the text of the MIDIMonitor project.

January 02, 2007, at 02:38 AM by 71.108.113.221 -
Changed lines 17-18 from:

Oh and please note that while I've tried to comment this stuff accurately, there may be errors and omissions, so please bear with that.

to:

Please note that while I've tried to comment this stuff accurately, there may be errors and omissions, so please bear with that.

January 02, 2007, at 01:48 AM by 71.108.113.221 -
Changed lines 5-6 from:

This is a simple MIDI controlled monosynth with one NCO, one NCF (single stage IIR) one NCA and 2 ADSRs, one ADSR controls the NCA, the other ADSR controls the NCF. The NCO's PWM output is connected to the NCF input and PWM duty cycle is controlled by the MIDI Modulation Wheel. FPGA Implementation is brute force.

to:

This is a simple MIDI controlled monosynth with one NCO, one NCF (single stage IIR) one NCA and 2 ADSRs, one ADSR controls the NCA, the other ADSR controls the NCF. The NCO's PWM output is connected to the NCF input and PWM duty cycle is controlled by the MIDI Modulation Wheel. FPGA implementation is brute force.

January 02, 2007, at 01:47 AM by 71.108.113.221 -
Changed lines 3-4 from:

Designed for Spartan-3E SK, certainly adaptable for others.

to:

Verilog, designed for Spartan-3E SK, certainly adaptable for others.

Changed lines 7-8 from:

The file package MONOSYNTH_SG0001.zip contains all of the files necessary to create and compile this project using WebPack ISE 8.2i. The package includes the PicoBlaze source code for the MIDI MonoSynth controller.

to:

The file package MONOSYNTH_SG0001.zip contains all of the files necessary to create and compile this project using WebPack ISE 8.2i. The package includes the PicoBlaze source code for the MIDI MonoSynth controller as well as the compiled .v file.

January 02, 2007, at 01:39 AM by 71.108.113.221 -
Changed lines 17-21 from:

Have fun!

Oh and please note that while I've tried to comment this stuff accurately, there may be errors, and inaccuracies, so please bear with that.

to:

Oh and please note that while I've tried to comment this stuff accurately, there may be errors and omissions, so please bear with that.

January 02, 2007, at 01:32 AM by 71.108.113.221 -
Added lines 21-22:
January 02, 2007, at 01:30 AM by 71.108.113.221 -
Changed lines 5-20 from:

This is a simple MIDI controlled monosynth with one NCO, one NCF (single stage IIR) one NCA and 2 ADSRs, one ADSR controls the NCA, the other ADSR controls the NCF. The NCO's PWM output is connected to the NCF input and PWM duty cycle is controlled by the MIDI Modulation Wheel.

to:

This is a simple MIDI controlled monosynth with one NCO, one NCF (single stage IIR) one NCA and 2 ADSRs, one ADSR controls the NCA, the other ADSR controls the NCF. The NCO's PWM output is connected to the NCF input and PWM duty cycle is controlled by the MIDI Modulation Wheel. FPGA Implementation is brute force.

The file package MONOSYNTH_SG0001.zip contains all of the files necessary to create and compile this project using WebPack ISE 8.2i. The package includes the PicoBlaze source code for the MIDI MonoSynth controller.

You can play with the ADSR numbers to change the sound made, you can also change the NCO output waveform from PWM to TRI or SAW with simple edits, however with SAW or TRI, the mod wheel does nothing.

This is really a proof of concept project, but it does work and it's fun to mess with.

MIDI channel is configured in the 4 slide switches, 0000 is channel 1, 0001 is channel 2 etc.

The LEDs display the number of keys currently held down.

Have fun!

Oh and please note that while I've tried to comment this stuff accurately, there may be errors, and inaccuracies, so please bear with that.

January 02, 2007, at 01:20 AM by 71.108.113.221 -
Added line 5:

This is a simple MIDI controlled monosynth with one NCO, one NCF (single stage IIR) one NCA and 2 ADSRs, one ADSR controls the NCA, the other ADSR controls the NCF. The NCO's PWM output is connected to the NCF input and PWM duty cycle is controlled by the MIDI Modulation Wheel.

January 02, 2007, at 01:17 AM by 71.108.113.221 -
Added lines 1-4:

Author: Scott Gravenhorst

Designed for Spartan-3E SK, certainly adaptable for others.