Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: USBMSD_BD SDFileSystem max32630fthr USBDevice
Revision 3:fcf745cd4f6d, committed 2019-07-17
- Comitter:
- Lugs
- Date:
- Wed Jul 17 06:11:33 2019 +0000
- Parent:
- 2:93da96b41127
- Child:
- 4:24086b80928e
- Commit message:
- working v1 before major update
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Jul 16 09:37:41 2019 +0000
+++ b/main.cpp Wed Jul 17 06:11:33 2019 +0000
@@ -7,6 +7,8 @@
//still needs BITS PER SAMPLE PARSING.
//do this like so: PWM.write(WavValue/2^BPS)
+//MAPPING IS WRONG. P = 440 PLZ. Y = MIDDLE D.
+
#define BUFFER_SIZE 128
#define HALF_BUFFER 64
@@ -49,7 +51,7 @@
WavFile Track;
Ticker SampleTime;
- daplink.printf("\f---DAPLINK SERIAL PORT---\r\n\r\nMINI PIANO ver 1 \r\nMAKE SURE YOUR PUTTY IS SET TO NOT WAIT FOR [ENTER] \r\nMIDDLE A (A4) (440Hz) IS Y, [WHITE] KEYS VALID FROM 1 to L. \r\nPRESS SHIFT FOR SHARP\r\n\r\n");
+ daplink.printf("\f---DAPLINK SERIAL PORT---\r\n\r\nMINI PIANO PLAYER ver 1 \r\n\r\n\r\n");
microUSB.printf("micro USB serial port\r\n");
rLED = LED_ON;
wait_ms(500);
@@ -59,6 +61,25 @@
bLED = LED_ON;
gLED = LED_OFF;
+ typedef enum {
+ C2,Cs2,D2,Ds2,E2,F2,Fs2,G2,Gs2,A2,As2,B2, //C2:0
+ C3,Cs3,D3,Ds3,E3,F3,Fs3,G3,Gs3,A3,As3,B3, //C3:12
+ C4,Cs4,D4,Ds4,E4,F4,Fs4,G4,Gs4,A4,As4,B4, //C4:24
+ C5,Cs5,D5,Ds5,E5,F5,Fs5,G5,Gs5,A5,As5,B5, //C5:36
+ C6,Cs6,D6,Ds6,E6,F6,Fs6,G6,Gs6, //C6:48
+ rest,
+ END
+ }pitchname;
+
+ typedef struct {
+ float length;
+ pitchname pitch;
+ } note;
+
+ //open file
+
+ //parse file into song in heap(remove sharps, put into enums.)
+
printf("Generating sine...\r\n");
int i;
for(i=0; i<128;i++)
@@ -66,198 +87,231 @@
audioDataBuffer[i] =((1.0 + sin((double(i)/16.0*6.28318530717959)))/2.0); //formula copied from mbed example
}
- printf("Playing tone...\r\n");
+ /* HERE'S WHERE THE MUSIC STARTS */
+ /* LITERALLY. */
- int PlayingFreq = 440, attached = 0;
+ //FORMAT: { NUM_BEATS, PITCH }
+ char c;
+ char bpminp[5];
+ int PlayingFreq;
- while(1)
- {
+ restart:
+
+ printf("Please enter desired BPM:\r\n");
- Track.sampleRate = PlayingFreq * 16; //TONE FREQ = SAMPLE RATE / SAMPLES PER CYCLE
-
- PWM.period_us(1); //1MHz
-
- float ticker_period = (float) 1/(Track.sampleRate);
-
- printf("\r\nTicker Period: %f\tTicker Freq: %f\r\nTarget Freq: %i\r\n\r\n",ticker_period, 1/ticker_period, PlayingFreq);
-
- if(attached)
+ for(i=0;i<5 && c!='\r';i++)
+ {
+ c = daplink.getc();
+ bpminp[i] = c;
+ }
+ int BPM = strtol(bpminp,NULL,0);
+ float SPB = 60/(float)BPM;
+ note song[] = {
+ //batch 1
+ {4,(pitchname)38},{4,E5},{4,Fs5},{4,D5},{4,Fs5},{4,G5},{4,A5},{4,Fs5},{4,D5},
+ {4,A5},{4,B5},{4,A5},{4,G5},{4,B5},{4,A5},
+ {4,rest},
+ //batch 2
+ {4,D5},{4,E5},{4,Fs5},{4,D5},{4,Fs5},{4,G5},{4,A5},{4,Fs5},{4,D5},
+ {4,A5},{4,G5},{4,D5},{4,Fs5},{4,D5},{4,E5},
+ {4,rest},
+ //batch 1
+ {4,D5},{4,E5},{4,Fs5},{4,D5},{4,Fs5},{4,G5},{4,A5},{4,Fs5},{4,D5},
+ {4,A5},{4,B5},{4,A5},{4,G5},{4,B5},{4,A5},
+ {4,rest},
+ //batch 3
+ {2,G5},{4,G5},{4,E5},{4,Fs5},{4,E5},{4,D5},{4,Cs5},{4,D5},
+ //END
+ {1,END}
+ };
+
+ for(i = 0;1;i++)
+ {
+ switch(song[i].pitch)
{
- SampleTime.attach(&placeNewSample,ticker_period);
- }
-
- bLED = LED_OFF;
-
- char c;
- c = daplink.getc();
-
- gLED = LED_ON;
-
- switch(c)
- {
- case '1':
+ case rest:
+ wait(song[i].length*SPB);
+ continue;
+ case D2:
+ PlayingFreq = 73;
+ break;
+ case Ds2:
+ PlayingFreq = 78;
+ break;
+ case E2:
+ PlayingFreq = 82;
+ break;
+ case F2:
+ PlayingFreq = 87;
+ break;
+ case Fs2:
+ PlayingFreq = 92;
+ break;
+ case G2:
PlayingFreq = 98;
break;
- case '!':
- PlayingFreq = 404;
+ case Gs2:
+ PlayingFreq = 104;
break;
- case '2':
+ case A2:
PlayingFreq = 110;
break;
- case '@':
+ case As2:
PlayingFreq = 117;
break;
- case '3':
+ case B2:
PlayingFreq = 123;
break;
- case '4':
+ case C3:
PlayingFreq = 131;
break;
- case '$':
+ case Cs3:
PlayingFreq = 139;
break;
- case '5':
+ case D3:
PlayingFreq = 147;
break;
- case '%':
+ case Ds3:
PlayingFreq = 156;
break;
- case '6':
+ case E3:
PlayingFreq = 165;
break;
- case '7':
+ case F3:
PlayingFreq = 175;
break;
- case '&':
+ case Fs3:
PlayingFreq = 185;
break;
- case '8':
+ case G3:
PlayingFreq = 196;
break;
- case '*':
+ case Gs3:
PlayingFreq = 208;
break;
- case '9':
+ case A3:
PlayingFreq = 220;
break;
- case '(':
+ case As3:
PlayingFreq = 233;
break;
- case '0':
+ case B3:
PlayingFreq = 247;
break;
- case 'q':
+ case C4:
PlayingFreq = 262;
break;
- case 'Q':
+ case Cs4:
PlayingFreq = 277;
break;
- case 'w':
+ case D4:
PlayingFreq = 294;
break;
- case 'W':
+ case Ds4:
PlayingFreq = 311;
break;
- case 'e':
+ case E4:
PlayingFreq = 330;
break;
- case 'r':
+ case F4:
PlayingFreq = 349;
break;
- case 'R':
+ case Fs4:
PlayingFreq = 370;
break;
- case 't':
+ case G4:
PlayingFreq = 392;
break;
- case 'T':
+ case Gs4:
PlayingFreq = 415;
break;
- case 'y':
+ case A4:
PlayingFreq = 440;
break;
- case 'Y':
+ case As4:
PlayingFreq = 466;
break;
- case 'u':
+ case B4:
PlayingFreq = 494;
break;
- case 'i':
+ case C5:
PlayingFreq = 523;
break;
- case 'I':
+ case Cs5:
PlayingFreq = 554;
break;
- case 'o':
+ case D5:
PlayingFreq = 587;
break;
- case 'O':
+ case Ds5:
PlayingFreq = 622;
break;
- case 'p':
+ case E5:
PlayingFreq = 659;
break;
- case 'a':
+ case F5:
PlayingFreq = 698;
break;
- case 'A':
+ case Fs5:
PlayingFreq = 740;
break;
- case 's':
+ case G5:
PlayingFreq = 784;
break;
- case 'S':
+ case Gs5:
PlayingFreq = 831;
break;
- case 'd':
+ case A5:
PlayingFreq = 880;
break;
- case 'D':
+ case As5:
PlayingFreq = 932;
break;
- case 'f':
+ case B5:
PlayingFreq = 988;
break;
- case 'g':
+ case C6:
PlayingFreq = 1047;
break;
- case 'G':
+ case Cs6:
PlayingFreq = 1109;
break;
- case 'h':
+ case D6:
PlayingFreq = 1175;
break;
- case 'H':
+ case Ds6:
PlayingFreq = 1245;
break;
- case 'j':
+ case E6:
PlayingFreq = 1319;
break;
- case 'k':
+ case F6:
PlayingFreq = 1397;
break;
- case 'K':
+ case Fs6:
PlayingFreq = 1480;
break;
- case 'l':
+ case G6:
PlayingFreq = 1568;
break;
- case 'L':
+ case Gs6:
PlayingFreq = 1661;
break;
- case '\r':
- attached = !attached;
- break;
+ case END:
+ i = 0;
+ goto restart;
}
+
+ Track.sampleRate = PlayingFreq * 16; //TONE FREQ = SAMPLE RATE / SAMPLES PER CYCLE
+ PWM.period_us(1); //1MHz
+ float ticker_period = (float) 1/(Track.sampleRate);
+ printf("\r\nTicker Period: %f\tTicker Freq: %f\r\nTarget Freq: %i \r\n\r\n",ticker_period, 1/ticker_period, PlayingFreq);
- gLED = LED_OFF;
- rLED = !rLED;
- if(attached)
- {
- SampleTime.detach();
- }
+ SampleTime.attach(&placeNewSample,ticker_period);
+ wait(song[i].length*SPB);
+ SampleTime.detach();
printf("\033[A\033[A\033[A\033[A");
}
-};
+}