Nuvoton
/
NuMaker-mbed-AudioPlayback-example
NuMaker audio playback
main.cpp
- Committer:
- Chuck Young
- Date:
- 2017-03-03
- Revision:
- 4:0b5c342628ff
- Parent:
- 1:c3f10403b3db
- Child:
- 5:492ea7d38e59
File content as of revision 4:0b5c342628ff:
#include "mbed.h" #include "NAU8822L.h" #if defined(TARGET_NUMAKER_PFM_NUC472) #include "NuSDFileSystem.h" NAU8822L audio(PC_9, PA_15, 0x1A, PG_7, PG_8, PG_9, PI_11, PI_12); // NAU8822L object DigitalOut hp_enable(PH_2); NuSDFileSystem Nu_SD(PF_6, PF_7, PF_8, PF_5 ,PF_4, PF_3, PF_2, "sd"); #elif defined(TARGET_NUMAKER_PFM_M453) NAU8822L audio(PD_4, PD_5, 0x1A, PA_5, PA_6, PA_7, PD_0, PA_4); // NAU8822L object DigitalOut hp_enable(PE_1); #endif InterruptIn button(SW2); // button SW2 DigitalOut led(LED1); // flashing LED1(rgbled1) int readPtr = 0; #if defined(TARGET_NUMAKER_PFM_NUC472) FILE *fp; int audioBuf[4096]; int writePtr = 0; int theta = 0; #elif defined(TARGET_NUMAKER_PFM_M453) // 1k sine wave@sampling rate 16kHz stereo 16-bit const char sine1k[] = { 0x00, 0x00, 0x00, 0x00, 0x1F, 0x06, 0x1F, 0x06, 0x50, 0x0B, 0x50, 0x0B, 0xC7, 0x0E, 0xC7, 0x0E, 0xFF, 0x0F, 0xFF, 0x0F, 0xC7, 0x0E, 0xC7, 0x0E, 0x50, 0x0B, 0x50, 0x0B, 0x1F, 0x06, 0x1F, 0x06, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xF9, 0xE1, 0xF9, 0xB0, 0xF4, 0xB0, 0xF4, 0x39, 0xF1, 0x39, 0xF1, 0x01, 0xF0, 0x01, 0xF0, 0x39, 0xF1, 0x39, 0xF1, 0xB0, 0xF4, 0xB0, 0xF4, 0xE1, 0xF9, 0xE1, 0xF9 }; #endif void flip(void) { led = !led; } void playback(void) { #if defined(TARGET_NUMAKER_PFM_NUC472) audio.write(audioBuf, readPtr, 4); readPtr += 4; readPtr &= 0xFFF; theta -= 4; #elif defined(TARGET_NUMAKER_PFM_M453) audio.write((int *)sine1k, readPtr, 2); readPtr += 2; readPtr &= 0xF; #endif } void fillAudioBuf(void) { #if defined(TARGET_NUMAKER_PFM_NUC472) while (!feof(fp)) { if (theta < 4096) { // read 2 integers fread(&audioBuf[writePtr], 4, 2, fp); NVIC_DisableIRQ(I2S1_IRQn); // FIXME theta += 2; NVIC_EnableIRQ(I2S1_IRQn); // FIXME writePtr += 2; writePtr &= 0xFFF; } } #elif defined(TARGET_NUMAKER_PFM_M453) while (1); #endif } int main(void) { led = 1; // disable headphone hp_enable = 1; button.rise(&flip); #if defined(TARGET_NUMAKER_PFM_NUC472) fp = fopen("/sd/test.pcm", "r"); if (fp == NULL) { perror("Error opening file!\n"); return -1; } for (int i = 0; i < 4096; i++) { audioBuf[i] = 0; } #endif audio.attach(&playback); printf("Start playing...\n"); audio.start(); // enable headphone hp_enable = 0; fillAudioBuf(); printf("Stop playing.\n"); audio.stop(); led = 0; }