USBAudio play by PWM.

Dependencies:   USBDevice mbed

Fork of USBAudio_HelloWorld by Samuel Mokrani

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?

UserRevisionLine numberNew 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 }