doku newon / Mbed 2 deprecated Peach_AudioChannelDividerAndCompensator

Dependencies:   DokuFFTPACK DokuUSBDevice DokuUSBHost DokuUSBHostWithIso mbed

Fork of Peach_AudioChannelDividerAndCompensator by doku newon

Committer:
dkato
Date:
Fri Jun 26 07:40:06 2015 +0000
Revision:
1:82fe51d45902
Parent:
0:39320363f99f
Child:
2:4611f39d677b
update wav decoder

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkato 0:39320363f99f 1 #include "mbed.h"
dkato 0:39320363f99f 2 #include "USBHostDac.h"
dkato 0:39320363f99f 3 #include "USBHostMSD.h"
dkato 1:82fe51d45902 4 #include "dec_wav.h"
dkato 0:39320363f99f 5
dkato 1:82fe51d45902 6 #if defined(TARGET_RZ_A1H)
dkato 1:82fe51d45902 7 #include "usb_host_setting.h"
dkato 1:82fe51d45902 8 #else
dkato 1:82fe51d45902 9 #define USB_HOST_CH 0
dkato 1:82fe51d45902 10 #endif
dkato 1:82fe51d45902 11
dkato 1:82fe51d45902 12 #if (USB_HOST_CH == 1) //Audio Shield USB1
dkato 1:82fe51d45902 13 DigitalOut usb1en(P3_8);
dkato 1:82fe51d45902 14 #endif
dkato 0:39320363f99f 15 DigitalIn button(USER_BUTTON0);
dkato 0:39320363f99f 16
dkato 1:82fe51d45902 17 #define AUDIO_WRITE_BUFF_SIZE (4096)
dkato 1:82fe51d45902 18 #define AUDIO_WRITE_BUFF_NUM (9)
dkato 0:39320363f99f 19 #define FILE_NAME_LEN (64)
dkato 1:82fe51d45902 20 #define TEXT_SIZE (64 + 1) //null-terminated
dkato 1:82fe51d45902 21 #define FLD_PATH "/usb/"
dkato 0:39320363f99f 22
dkato 1:82fe51d45902 23 static uint8_t audio_write_buff[AUDIO_WRITE_BUFF_NUM][AUDIO_WRITE_BUFF_SIZE];
dkato 1:82fe51d45902 24 //Tag buffer
dkato 1:82fe51d45902 25 static uint8_t title_buf[TEXT_SIZE];
dkato 1:82fe51d45902 26 static uint8_t artist_buf[TEXT_SIZE];
dkato 1:82fe51d45902 27 static uint8_t album_buf[TEXT_SIZE];
dkato 0:39320363f99f 28
dkato 1:82fe51d45902 29 int main() {
dkato 0:39320363f99f 30 FILE * fp = NULL;
dkato 0:39320363f99f 31 DIR * d = NULL;
dkato 1:82fe51d45902 32 char file_path[sizeof(FLD_PATH) + FILE_NAME_LEN];
dkato 1:82fe51d45902 33 int buff_index = 0;
dkato 1:82fe51d45902 34 size_t audio_data_size;
dkato 1:82fe51d45902 35 dec_wav wav_file;
dkato 1:82fe51d45902 36
dkato 1:82fe51d45902 37 #if (USB_HOST_CH == 1) //Audio Shield USB1
dkato 1:82fe51d45902 38 //Audio Shield USB1 enable
dkato 1:82fe51d45902 39 usb1en = 1; //Outputs high level
dkato 1:82fe51d45902 40 Thread::wait(5);
dkato 1:82fe51d45902 41 usb1en = 0; //Outputs low level
dkato 1:82fe51d45902 42 #endif
dkato 0:39320363f99f 43
dkato 0:39320363f99f 44 USBHostMSD msd("usb");
dkato 1:82fe51d45902 45 USBHostDac usbdac;
dkato 0:39320363f99f 46
dkato 0:39320363f99f 47 while(1) {
dkato 0:39320363f99f 48 // try to connect a MSD device
dkato 0:39320363f99f 49 while(!msd.connect()) {
dkato 0:39320363f99f 50 Thread::wait(500);
dkato 0:39320363f99f 51 }
dkato 0:39320363f99f 52
dkato 0:39320363f99f 53 // in a loop, append a file
dkato 0:39320363f99f 54 // if the device is disconnected, we try to connect it again
dkato 0:39320363f99f 55 while(1) {
dkato 0:39320363f99f 56 // if device disconnected, try to connect again
dkato 0:39320363f99f 57 if (!msd.connected()) {
dkato 0:39320363f99f 58 break;
dkato 0:39320363f99f 59 }
dkato 0:39320363f99f 60 if (fp == NULL) {
dkato 0:39320363f99f 61 // file search
dkato 0:39320363f99f 62 if (d == NULL) {
dkato 1:82fe51d45902 63 d = opendir(FLD_PATH);
dkato 0:39320363f99f 64 }
dkato 0:39320363f99f 65 struct dirent * p;
dkato 0:39320363f99f 66 while ((p = readdir(d)) != NULL) {
dkato 0:39320363f99f 67 size_t len = strlen(p->d_name);
dkato 1:82fe51d45902 68 if ((len > 4) && (len < FILE_NAME_LEN)
dkato 1:82fe51d45902 69 && (memcmp(&p->d_name[len - 4], ".wav", 4) == 0)) {
dkato 1:82fe51d45902 70 strcpy(file_path, FLD_PATH);
dkato 0:39320363f99f 71 strcat(file_path, p->d_name);
dkato 0:39320363f99f 72 fp = fopen(file_path, "r");
dkato 1:82fe51d45902 73 if (wav_file.AnalyzeHeder(title_buf, artist_buf, album_buf,
dkato 1:82fe51d45902 74 TEXT_SIZE, fp) == false) {
dkato 1:82fe51d45902 75 fclose(fp);
dkato 1:82fe51d45902 76 fp = NULL;
dkato 1:82fe51d45902 77 } else if ((wav_file.GetChannel() != 2)
dkato 1:82fe51d45902 78 || (wav_file.GetBlockSize() != 16)
dkato 1:82fe51d45902 79 || (wav_file.GetSamplingRate() != 48000)) {
dkato 0:39320363f99f 80 fclose(fp);
dkato 0:39320363f99f 81 fp = NULL;
dkato 0:39320363f99f 82 } else {
dkato 1:82fe51d45902 83 printf("File :%s\n", p->d_name);
dkato 1:82fe51d45902 84 printf("Title :%s\n", title_buf);
dkato 1:82fe51d45902 85 printf("Artist:%s\n", artist_buf);
dkato 1:82fe51d45902 86 printf("Album :%s\n", album_buf);
dkato 1:82fe51d45902 87 printf("\n");
dkato 0:39320363f99f 88 break;
dkato 0:39320363f99f 89 }
dkato 0:39320363f99f 90 }
dkato 0:39320363f99f 91 }
dkato 0:39320363f99f 92 if (p == NULL) {
dkato 0:39320363f99f 93 closedir(d);
dkato 0:39320363f99f 94 d = NULL;
dkato 0:39320363f99f 95 }
dkato 0:39320363f99f 96 } else {
dkato 0:39320363f99f 97 // file read
dkato 1:82fe51d45902 98 uint8_t * p_buf = audio_write_buff[buff_index];
dkato 1:82fe51d45902 99
dkato 1:82fe51d45902 100 audio_data_size = wav_file.GetNextData(p_buf, AUDIO_WRITE_BUFF_SIZE);
dkato 1:82fe51d45902 101 if (audio_data_size > 0) {
dkato 1:82fe51d45902 102 bool flush = false;
dkato 1:82fe51d45902 103
dkato 1:82fe51d45902 104 // try to connect a usbdac device
dkato 1:82fe51d45902 105 while(!usbdac.connect()) {
dkato 1:82fe51d45902 106 Thread::wait(500);
dkato 1:82fe51d45902 107 }
dkato 1:82fe51d45902 108 if (audio_data_size < AUDIO_WRITE_BUFF_SIZE) {
dkato 1:82fe51d45902 109 flush = true;
dkato 1:82fe51d45902 110 }
dkato 1:82fe51d45902 111 usbdac.send(p_buf, audio_data_size, flush);
dkato 1:82fe51d45902 112 buff_index++;
dkato 1:82fe51d45902 113 if (buff_index >= AUDIO_WRITE_BUFF_NUM) {
dkato 1:82fe51d45902 114 buff_index = 0;
dkato 0:39320363f99f 115 }
dkato 0:39320363f99f 116 }
dkato 0:39320363f99f 117
dkato 0:39320363f99f 118 // file close
dkato 1:82fe51d45902 119 if ((audio_data_size < AUDIO_WRITE_BUFF_SIZE) || (button == 0)) {
dkato 0:39320363f99f 120 fclose(fp);
dkato 0:39320363f99f 121 fp = NULL;
dkato 0:39320363f99f 122 Thread::wait(500);
dkato 0:39320363f99f 123 }
dkato 0:39320363f99f 124 }
dkato 0:39320363f99f 125 }
dkato 0:39320363f99f 126
dkato 0:39320363f99f 127 // close check
dkato 0:39320363f99f 128 if (fp != NULL) {
dkato 0:39320363f99f 129 fclose(fp);
dkato 0:39320363f99f 130 fp = NULL;
dkato 0:39320363f99f 131 }
dkato 0:39320363f99f 132 if (d != NULL) {
dkato 0:39320363f99f 133 closedir(d);
dkato 0:39320363f99f 134 d = NULL;
dkato 0:39320363f99f 135 }
dkato 0:39320363f99f 136 }
dkato 0:39320363f99f 137 }