Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DokuFFTPACK DokuUSBDevice DokuUSBHost DokuUSBHostWithIso mbed
Fork of Peach_AudioChannelDividerAndCompensator by
main.cpp@1:82fe51d45902, 2015-06-26 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |
