USBAudio example using a microphone

Dependencies:   USBDevice mbed

main.cpp

Committer:
samux
Date:
2011-12-20
Revision:
6:be128039be16
Parent:
5:b49b6a8ca111
Child:
7:6b0012b8fd01

File content as of revision 6:be128039be16:

#include "mbed.h"
#include "USBAudio.h"

extern "C" void HardFault_Handler() {
    error("Hard Fault!\n");
}

// frequency: 8 kHz
#define FREQ 8000

// 1 channel: mono
#define NB_CHA 1

// 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
#define AUDIO_LENGTH_PACKET (FREQ/500) * NB_CHA

USBAudio audio(FREQ, NB_CHA, 0x1111, 0x78ab);

AnalogIn mic(p20);
DigitalOut p(p19);

int16_t buf[AUDIO_LENGTH_PACKET/2];

int main() {

    double mic_mean = 0.0;
    double mic_value;

    // compute average value of the microphone. We can then center the audio signal sent to the computer
    for (int j = 0; j < 1000; j++) {
        mic_value = (mic.read_u16() >> 3);
        mic_mean = (mic_mean*j + mic_value)/(j+1);
    }

    while (1) {
        p = 1;
        for (int i = 0; i < AUDIO_LENGTH_PACKET/2; i++) {
            buf[i] = (mic.read_u16() >> 3) - mic_mean;
            if (i != AUDIO_LENGTH_PACKET/2) {
                wait_us(80);
            }
        }
        p = 0;
        audio.write((uint8_t *)buf);
    }
}