kouchikosen kairohan
/
USBAudio_PWM
USBAudio play by PWM.
Fork of USBAudio_HelloWorld by
main.cpp@5:81717d606213, 2015-06-02 (annotated)
- Committer:
- kairohan
- Date:
- Tue Jun 02 07:36:15 2015 +0000
- Revision:
- 5:81717d606213
- Parent:
- 3:c16e446c439a
v1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
samux | 0:3a00949fdb07 | 1 | // Hello World example for the USBAudio library |
samux | 3:c16e446c439a | 2 | |
samux | 0:3a00949fdb07 | 3 | #include "mbed.h" |
samux | 0:3a00949fdb07 | 4 | #include "USBAudio.h" |
kairohan | 5:81717d606213 | 5 | PwmOut led(p22); |
samux | 0:3a00949fdb07 | 6 | Serial pc(USBTX, USBRX); |
samux | 3:c16e446c439a | 7 | |
samux | 0:3a00949fdb07 | 8 | // frequency: 48 kHz |
samux | 0:3a00949fdb07 | 9 | #define FREQ 48000 |
samux | 3:c16e446c439a | 10 | |
samux | 0:3a00949fdb07 | 11 | // 1 channel: mono |
samux | 0:3a00949fdb07 | 12 | #define NB_CHA 1 |
samux | 3:c16e446c439a | 13 | |
samux | 0:3a00949fdb07 | 14 | // length of an audio packet: each ms, we receive 48 * 16bits ->48 * 2 bytes. as there is one channel, the length will be 48 * 2 * 1 |
kairohan | 5:81717d606213 | 15 | #define AUDIO_LENGTH_PACKET FREQ/1000 * 2 * 1 |
samux | 3:c16e446c439a | 16 | |
samux | 0:3a00949fdb07 | 17 | // USBAudio |
samux | 0:3a00949fdb07 | 18 | USBAudio audio(FREQ, NB_CHA); |
kairohan | 5:81717d606213 | 19 | int16_t buf[AUDIO_LENGTH_PACKET/2]; |
kairohan | 5:81717d606213 | 20 | float bufo[2][AUDIO_LENGTH_PACKET/2]; |
kairohan | 5:81717d606213 | 21 | bool swb=false,swb2=false; |
kairohan | 5:81717d606213 | 22 | int pli=0; |
kairohan | 5:81717d606213 | 23 | void Sample_timer_interrupt(void) |
kairohan | 5:81717d606213 | 24 | { |
kairohan | 5:81717d606213 | 25 | //static unsigned int i=0; |
kairohan | 5:81717d606213 | 26 | |
kairohan | 5:81717d606213 | 27 | // send next analog sample out to D to A |
kairohan | 5:81717d606213 | 28 | led = bufo[swb][pli]; |
kairohan | 5:81717d606213 | 29 | // increment pointer and wrap around back to 0 at 128 |
kairohan | 5:81717d606213 | 30 | pli++; |
kairohan | 5:81717d606213 | 31 | if(pli==(AUDIO_LENGTH_PACKET>>1))pli=0,swb=!swb; |
kairohan | 5:81717d606213 | 32 | //if(i==0)audio.read((uint8_t *)buf); |
kairohan | 5:81717d606213 | 33 | } |
samux | 3:c16e446c439a | 34 | |
samux | 0:3a00949fdb07 | 35 | int main() { |
kairohan | 5:81717d606213 | 36 | //int16_t buf[AUDIO_LENGTH_PACKET/2]; |
kairohan | 5:81717d606213 | 37 | //led.pulsewidth(0.000000001); |
kairohan | 5:81717d606213 | 38 | led.period(1.0/(96000.0*2));//1.0/(48000.0*16)); |
kairohan | 5:81717d606213 | 39 | // set up a timer to be used for sample rate interrupts |
kairohan | 5:81717d606213 | 40 | Ticker Sample_Period; |
kairohan | 5:81717d606213 | 41 | Sample_Period.attach(&Sample_timer_interrupt, 1.0/(FREQ)); |
kairohan | 5:81717d606213 | 42 | // audio.read((uint8_t *)buf); |
samux | 0:3a00949fdb07 | 43 | while (1) { |
samux | 0:3a00949fdb07 | 44 | // read an audio packet |
samux | 1:d712dff4f9ca | 45 | audio.read((uint8_t *)buf); |
kairohan | 5:81717d606213 | 46 | float vol=audio.getVolume(); |
samux | 0:3a00949fdb07 | 47 | // print packet received |
kairohan | 5:81717d606213 | 48 | //pc.printf("recv: "); |
kairohan | 5:81717d606213 | 49 | //swb2=false; |
kairohan | 5:81717d606213 | 50 | for(int i = 0; i < (AUDIO_LENGTH_PACKET>>1); i++) { |
kairohan | 5:81717d606213 | 51 | bufo[!swb][i]=((float)buf[i]*vol/510.0)+0.5;} |
kairohan | 5:81717d606213 | 52 | pli=0; |
kairohan | 5:81717d606213 | 53 | //swb2=true; |
kairohan | 5:81717d606213 | 54 | // led = (float)buf[i]/128.0; |
kairohan | 5:81717d606213 | 55 | //pc.printf("%d ", buf[i]); |
kairohan | 5:81717d606213 | 56 | // led=(float)buf[i]/128.0; |
kairohan | 5:81717d606213 | 57 | // } |
kairohan | 5:81717d606213 | 58 | // pc.printf("\r\n"); |
samux | 0:3a00949fdb07 | 59 | } |
kairohan | 5:81717d606213 | 60 | |
samux | 3:c16e446c439a | 61 | } |