Simple monophonic synthesizer. - USB MIDI function PWM出力を使用した簡単なモノフォニックシンセです。 USB MIDI Functionとして動作します。 {{http://www.youtube.com/watch?v=UWonXdsNGkE}} {{https://lh4.googleusercontent.com/-LHPkdbs5pdw/TxA07cSVUmI/AAAAAAAACVY/2Bia4nz1ptI/s476/mbedDeMonoSynth.png}}

Dependencies:   USBMIDI mbed

Files at this revision

API Documentation at this revision

Comitter:
alaif
Date:
Thu Dec 29 12:44:19 2011 +0000
Commit message:

Changed in this revision

USBMIDI.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 9c32c9c8ead4 USBMIDI.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/USBMIDI.lib	Thu Dec 29 12:44:19 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/simon/code/USBMIDI/#10d694d6ccdc
diff -r 000000000000 -r 9c32c9c8ead4 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Dec 29 12:44:19 2011 +0000
@@ -0,0 +1,59 @@
+/*
+ * Simple monophonic synthesizer
+ * auther: alaif.
+ */
+#include "mbed.h"
+#include "USBMIDI.h"
+
+/* MIDI note no -> FREQ */
+#include "math.h"
+#define NOTE2FREQ(note) (440 * pow(2, ((note - 69) / 12.0f)))
+
+/* HARDWARE Config */
+PwmOut sp1(p21);
+DigitalOut led_ready(LED1);
+DigitalOut led_noteon(LED2);
+
+//NOTE ON event
+void note_on(int note, int vel)
+{
+    if (vel != 0) {
+        sp1.period(1.0f / NOTE2FREQ(note));         //Set freq
+        sp1.write(0.5f);                            //SQUARE WAVE ON
+        led_noteon = 1;
+    } else {
+        sp1.write(0.0f);                            //SQUARE WAVE OFF
+        led_noteon = 0;
+    }
+}
+
+//NOTE OFF event
+void note_off()
+{
+    sp1.write(0.0f);
+    led_noteon = 0;
+}
+
+//Recv midi message handler.
+void do_message(MIDIMessage msg)
+{
+    int key = msg.key();
+    switch (msg.type()) {
+        case MIDIMessage::NoteOnType:
+            note_on(key, msg.velocity());
+            break;
+        case MIDIMessage::NoteOffType:
+            note_off();
+            break;
+    }
+}
+
+/* Main */
+USBMIDI midi;
+int main() {
+    led_ready = 0;          
+    midi.attach(do_message);    // call back for messages received    
+    led_ready = 1;
+    
+    while (1) {}
+}
diff -r 000000000000 -r 9c32c9c8ead4 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Dec 29 12:44:19 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e