ok connect pin 17 and 18 connect headphone to 18 joy up to record joy down to playback

Dependencies:   FatFileSystem MSCFileSystem SDHCFileSystem mbed wavfile

Fork of SimpleWaveRecorderPlayer by Shinichiro Nakamura

Committer:
shintamainjp
Date:
Sat Apr 14 02:25:17 2012 +0000
Revision:
0:1a515b688b8c
Child:
1:8604a6be9da1
Initial version.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 0:1a515b688b8c 1 /*
shintamainjp 0:1a515b688b8c 2 * ===============================================================
shintamainjp 0:1a515b688b8c 3 * A simple wave recorder & player on mbed
shintamainjp 0:1a515b688b8c 4 * ===============================================================
shintamainjp 0:1a515b688b8c 5 * Copyright (c) 2011-2012 Shinichiro Nakamura
shintamainjp 0:1a515b688b8c 6 *
shintamainjp 0:1a515b688b8c 7 * Permission is hereby granted, free of charge, to any person
shintamainjp 0:1a515b688b8c 8 * obtaining a copy of this software and associated documentation
shintamainjp 0:1a515b688b8c 9 * files (the "Software"), to deal in the Software without
shintamainjp 0:1a515b688b8c 10 * restriction, including without limitation the rights to use,
shintamainjp 0:1a515b688b8c 11 * copy, modify, merge, publish, distribute, sublicense, and/or
shintamainjp 0:1a515b688b8c 12 * sell copies of the Software, and to permit persons to whom the
shintamainjp 0:1a515b688b8c 13 * Software is furnished to do so, subject to the following
shintamainjp 0:1a515b688b8c 14 * conditions:
shintamainjp 0:1a515b688b8c 15 *
shintamainjp 0:1a515b688b8c 16 * The above copyright notice and this permission notice shall be
shintamainjp 0:1a515b688b8c 17 * included in all copies or substantial portions of the Software.
shintamainjp 0:1a515b688b8c 18 *
shintamainjp 0:1a515b688b8c 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
shintamainjp 0:1a515b688b8c 20 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
shintamainjp 0:1a515b688b8c 21 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
shintamainjp 0:1a515b688b8c 22 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
shintamainjp 0:1a515b688b8c 23 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
shintamainjp 0:1a515b688b8c 24 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
shintamainjp 0:1a515b688b8c 25 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
shintamainjp 0:1a515b688b8c 26 * OTHER DEALINGS IN THE SOFTWARE.
shintamainjp 0:1a515b688b8c 27 * ===============================================================
shintamainjp 0:1a515b688b8c 28 */
shintamainjp 0:1a515b688b8c 29
shintamainjp 0:1a515b688b8c 30 #include "mbed.h"
shintamainjp 0:1a515b688b8c 31 #include "SDHCFileSystem.h"
shintamainjp 0:1a515b688b8c 32 #include "wavfile.h"
shintamainjp 0:1a515b688b8c 33
shintamainjp 0:1a515b688b8c 34 #define RAM_TOTAL 0x1000
shintamainjp 0:1a515b688b8c 35
shintamainjp 0:1a515b688b8c 36 AnalogOut dacout(p18);
shintamainjp 0:1a515b688b8c 37 AnalogIn adcin(p20);
shintamainjp 0:1a515b688b8c 38 DigitalOut led_play_ok(LED1);
shintamainjp 0:1a515b688b8c 39 DigitalOut led_rec_ok(LED2);
shintamainjp 0:1a515b688b8c 40
shintamainjp 0:1a515b688b8c 41 Timer timer;
shintamainjp 0:1a515b688b8c 42 Timer iometer;
shintamainjp 0:1a515b688b8c 43 Ticker ticker;
shintamainjp 0:1a515b688b8c 44 SDFileSystem sdc(p5, p6, p7, p8, "sdc");
shintamainjp 0:1a515b688b8c 45
shintamainjp 0:1a515b688b8c 46 float buffer[RAM_TOTAL];
shintamainjp 0:1a515b688b8c 47 int rp = 0;
shintamainjp 0:1a515b688b8c 48 int wp = 0;
shintamainjp 0:1a515b688b8c 49 int dropout = 0;
shintamainjp 0:1a515b688b8c 50
shintamainjp 0:1a515b688b8c 51 #define WAVFILE_ERROR_PRINT(RESULT) \
shintamainjp 0:1a515b688b8c 52 do { \
shintamainjp 0:1a515b688b8c 53 WavFileResult R = RESULT; \
shintamainjp 0:1a515b688b8c 54 if (R != WavFileResultOK) { \
shintamainjp 0:1a515b688b8c 55 char wavfile_error_print_text[BUFSIZ]; \
shintamainjp 0:1a515b688b8c 56 wavfile_result_string(R, wavfile_error_print_text, sizeof(wavfile_error_print_text)); \
shintamainjp 0:1a515b688b8c 57 printf("%s (code=%d)\r\n", wavfile_error_print_text, R); \
shintamainjp 0:1a515b688b8c 58 return 1; \
shintamainjp 0:1a515b688b8c 59 } \
shintamainjp 0:1a515b688b8c 60 } while(0)
shintamainjp 0:1a515b688b8c 61
shintamainjp 0:1a515b688b8c 62 void tickdummy(void)
shintamainjp 0:1a515b688b8c 63 {
shintamainjp 0:1a515b688b8c 64 }
shintamainjp 0:1a515b688b8c 65
shintamainjp 0:1a515b688b8c 66 void tickplay(void)
shintamainjp 0:1a515b688b8c 67 {
shintamainjp 0:1a515b688b8c 68 /*
shintamainjp 0:1a515b688b8c 69 * Check the play underflow
shintamainjp 0:1a515b688b8c 70 */
shintamainjp 0:1a515b688b8c 71 if (rp != wp) {
shintamainjp 0:1a515b688b8c 72 dacout = buffer[rp];
shintamainjp 0:1a515b688b8c 73 rp = (rp + 1) & (RAM_TOTAL - 1);
shintamainjp 0:1a515b688b8c 74 } else {
shintamainjp 0:1a515b688b8c 75 dropout++;
shintamainjp 0:1a515b688b8c 76 }
shintamainjp 0:1a515b688b8c 77 led_play_ok = !led_play_ok;
shintamainjp 0:1a515b688b8c 78 }
shintamainjp 0:1a515b688b8c 79
shintamainjp 0:1a515b688b8c 80 void tickrec(void)
shintamainjp 0:1a515b688b8c 81 {
shintamainjp 0:1a515b688b8c 82 /*
shintamainjp 0:1a515b688b8c 83 * Check the rec overflow
shintamainjp 0:1a515b688b8c 84 */
shintamainjp 0:1a515b688b8c 85 int np = (wp + 1) & (RAM_TOTAL - 1);
shintamainjp 0:1a515b688b8c 86 if (np != rp) {
shintamainjp 0:1a515b688b8c 87 buffer[wp] = adcin;
shintamainjp 0:1a515b688b8c 88 wp = np;
shintamainjp 0:1a515b688b8c 89 } else {
shintamainjp 0:1a515b688b8c 90 dropout++;
shintamainjp 0:1a515b688b8c 91 }
shintamainjp 0:1a515b688b8c 92 led_rec_ok = !led_rec_ok;
shintamainjp 0:1a515b688b8c 93 }
shintamainjp 0:1a515b688b8c 94
shintamainjp 0:1a515b688b8c 95 int play(const char *filename)
shintamainjp 0:1a515b688b8c 96 {
shintamainjp 0:1a515b688b8c 97 WavFileResult result;
shintamainjp 0:1a515b688b8c 98 wavfile_info_t info;
shintamainjp 0:1a515b688b8c 99 wavfile_data_t data;
shintamainjp 0:1a515b688b8c 100
shintamainjp 0:1a515b688b8c 101 WAVFILE *wf = wavfile_open(filename, WavFileModeRead, &result);
shintamainjp 0:1a515b688b8c 102 WAVFILE_ERROR_PRINT(result);
shintamainjp 0:1a515b688b8c 103 WAVFILE_ERROR_PRINT(wavfile_read_info(wf, &info));
shintamainjp 0:1a515b688b8c 104
shintamainjp 0:1a515b688b8c 105 printf("[PLAY:%s]\r\n", filename);
shintamainjp 0:1a515b688b8c 106 printf("\tWAVFILE_INFO_AUDIO_FORMAT(&info) = %d\r\n", WAVFILE_INFO_AUDIO_FORMAT(&info));
shintamainjp 0:1a515b688b8c 107 printf("\tWAVFILE_INFO_NUM_CHANNELS(&info) = %d\r\n", WAVFILE_INFO_NUM_CHANNELS(&info));
shintamainjp 0:1a515b688b8c 108 printf("\tWAVFILE_INFO_SAMPLE_RATE(&info) = %d\r\n", WAVFILE_INFO_SAMPLE_RATE(&info));
shintamainjp 0:1a515b688b8c 109 printf("\tWAVFILE_INFO_BYTE_RATE(&info) = %d\r\n", WAVFILE_INFO_BYTE_RATE(&info));
shintamainjp 0:1a515b688b8c 110 printf("\tWAVFILE_INFO_BLOCK_ALIGN(&info) = %d\r\n", WAVFILE_INFO_BLOCK_ALIGN(&info));
shintamainjp 0:1a515b688b8c 111 printf("\tWAVFILE_INFO_BITS_PER_SAMPLE(&info) = %d\r\n", WAVFILE_INFO_BITS_PER_SAMPLE(&info));
shintamainjp 0:1a515b688b8c 112
shintamainjp 0:1a515b688b8c 113 const int interval_us = 1000000 / WAVFILE_INFO_SAMPLE_RATE(&info);
shintamainjp 0:1a515b688b8c 114
shintamainjp 0:1a515b688b8c 115 rp = 0;
shintamainjp 0:1a515b688b8c 116 wp = 0;
shintamainjp 0:1a515b688b8c 117 dropout = 0;
shintamainjp 0:1a515b688b8c 118 ticker.attach_us(tickplay, interval_us);
shintamainjp 0:1a515b688b8c 119 while (1) {
shintamainjp 0:1a515b688b8c 120 int np = (wp + 1) & (RAM_TOTAL - 1);
shintamainjp 0:1a515b688b8c 121 while (np == rp) {
shintamainjp 0:1a515b688b8c 122 wait_us(1);
shintamainjp 0:1a515b688b8c 123 }
shintamainjp 0:1a515b688b8c 124 WAVFILE_ERROR_PRINT(wavfile_read_data(wf, &data));
shintamainjp 0:1a515b688b8c 125 if (WAVFILE_DATA_IS_END_OF_DATA(&data)) {
shintamainjp 0:1a515b688b8c 126 break;
shintamainjp 0:1a515b688b8c 127 }
shintamainjp 0:1a515b688b8c 128 buffer[wp] = WAVFILE_DATA_CHANNEL_DATA(&data, 0);
shintamainjp 0:1a515b688b8c 129 wp = np;
shintamainjp 0:1a515b688b8c 130 }
shintamainjp 0:1a515b688b8c 131 ticker.detach();
shintamainjp 0:1a515b688b8c 132 dacout = 0.5;
shintamainjp 0:1a515b688b8c 133 led_play_ok = 0;
shintamainjp 0:1a515b688b8c 134 printf("\t-- Play done. (dropout=%d) --\r\n", dropout);
shintamainjp 0:1a515b688b8c 135
shintamainjp 0:1a515b688b8c 136 WAVFILE_ERROR_PRINT(wavfile_close(wf));
shintamainjp 0:1a515b688b8c 137 return 0;
shintamainjp 0:1a515b688b8c 138 }
shintamainjp 0:1a515b688b8c 139
shintamainjp 0:1a515b688b8c 140 int rec(const char *filename, const int nsec)
shintamainjp 0:1a515b688b8c 141 {
shintamainjp 0:1a515b688b8c 142 WavFileResult result;
shintamainjp 0:1a515b688b8c 143 wavfile_info_t info;
shintamainjp 0:1a515b688b8c 144 wavfile_data_t data;
shintamainjp 0:1a515b688b8c 145
shintamainjp 0:1a515b688b8c 146 WAVFILE_INFO_AUDIO_FORMAT(&info) = 1;
shintamainjp 0:1a515b688b8c 147 WAVFILE_INFO_NUM_CHANNELS(&info) = 1;
shintamainjp 0:1a515b688b8c 148 WAVFILE_INFO_SAMPLE_RATE(&info) = 11025;
shintamainjp 0:1a515b688b8c 149 WAVFILE_INFO_BYTE_RATE(&info) = 22050;
shintamainjp 0:1a515b688b8c 150 WAVFILE_INFO_BLOCK_ALIGN(&info) = 2;
shintamainjp 0:1a515b688b8c 151 WAVFILE_INFO_BITS_PER_SAMPLE(&info) = 16;
shintamainjp 0:1a515b688b8c 152
shintamainjp 0:1a515b688b8c 153 WAVFILE *wf = wavfile_open(filename, WavFileModeWrite, &result);
shintamainjp 0:1a515b688b8c 154 WAVFILE_ERROR_PRINT(result);
shintamainjp 0:1a515b688b8c 155 WAVFILE_ERROR_PRINT(wavfile_write_info(wf, &info));
shintamainjp 0:1a515b688b8c 156
shintamainjp 0:1a515b688b8c 157 printf("[REC:%s]\r\n", filename);
shintamainjp 0:1a515b688b8c 158 printf("\tWAVFILE_INFO_AUDIO_FORMAT(&info) = %d\r\n", WAVFILE_INFO_AUDIO_FORMAT(&info));
shintamainjp 0:1a515b688b8c 159 printf("\tWAVFILE_INFO_NUM_CHANNELS(&info) = %d\r\n", WAVFILE_INFO_NUM_CHANNELS(&info));
shintamainjp 0:1a515b688b8c 160 printf("\tWAVFILE_INFO_SAMPLE_RATE(&info) = %d\r\n", WAVFILE_INFO_SAMPLE_RATE(&info));
shintamainjp 0:1a515b688b8c 161 printf("\tWAVFILE_INFO_BYTE_RATE(&info) = %d\r\n", WAVFILE_INFO_BYTE_RATE(&info));
shintamainjp 0:1a515b688b8c 162 printf("\tWAVFILE_INFO_BLOCK_ALIGN(&info) = %d\r\n", WAVFILE_INFO_BLOCK_ALIGN(&info));
shintamainjp 0:1a515b688b8c 163 printf("\tWAVFILE_INFO_BITS_PER_SAMPLE(&info) = %d\r\n", WAVFILE_INFO_BITS_PER_SAMPLE(&info));
shintamainjp 0:1a515b688b8c 164
shintamainjp 0:1a515b688b8c 165 const int interval_us = 1000000 / WAVFILE_INFO_SAMPLE_RATE(&info);
shintamainjp 0:1a515b688b8c 166 const unsigned int samples_for_nsec = WAVFILE_INFO_SAMPLE_RATE(&info) * nsec;
shintamainjp 0:1a515b688b8c 167
shintamainjp 0:1a515b688b8c 168 rp = 0;
shintamainjp 0:1a515b688b8c 169 wp = 0;
shintamainjp 0:1a515b688b8c 170 dropout = 0;
shintamainjp 0:1a515b688b8c 171 unsigned int count = 0;
shintamainjp 0:1a515b688b8c 172 ticker.attach_us(tickrec, interval_us);
shintamainjp 0:1a515b688b8c 173 WAVFILE_DATA_NUM_CHANNELS(&data) = 1;
shintamainjp 0:1a515b688b8c 174 while (1) {
shintamainjp 0:1a515b688b8c 175 while (rp == wp) {
shintamainjp 0:1a515b688b8c 176 wait_us(1);
shintamainjp 0:1a515b688b8c 177 }
shintamainjp 0:1a515b688b8c 178
shintamainjp 0:1a515b688b8c 179 WAVFILE_DATA_CHANNEL_DATA(&data, 0) = buffer[rp];
shintamainjp 0:1a515b688b8c 180 rp = (rp + 1) & (RAM_TOTAL - 1);
shintamainjp 0:1a515b688b8c 181 WAVFILE_ERROR_PRINT(wavfile_write_data(wf, &data));
shintamainjp 0:1a515b688b8c 182
shintamainjp 0:1a515b688b8c 183 count++;
shintamainjp 0:1a515b688b8c 184 if (count > samples_for_nsec) {
shintamainjp 0:1a515b688b8c 185 break;
shintamainjp 0:1a515b688b8c 186 }
shintamainjp 0:1a515b688b8c 187 }
shintamainjp 0:1a515b688b8c 188 ticker.detach();
shintamainjp 0:1a515b688b8c 189 led_rec_ok = 0;
shintamainjp 0:1a515b688b8c 190 printf("\t-- Rec done. (dropout=%d) --\r\n", dropout);
shintamainjp 0:1a515b688b8c 191
shintamainjp 0:1a515b688b8c 192 WAVFILE_ERROR_PRINT(wavfile_close(wf));
shintamainjp 0:1a515b688b8c 193 return 0;
shintamainjp 0:1a515b688b8c 194 }
shintamainjp 0:1a515b688b8c 195
shintamainjp 0:1a515b688b8c 196 int perf_read(const char *filename, const int word_size, const int nsec)
shintamainjp 0:1a515b688b8c 197 {
shintamainjp 0:1a515b688b8c 198 FILE *fp = fopen(filename, "rb");
shintamainjp 0:1a515b688b8c 199 if (fp == NULL) {
shintamainjp 0:1a515b688b8c 200 printf("File open failed.\r\n");
shintamainjp 0:1a515b688b8c 201 return 1;
shintamainjp 0:1a515b688b8c 202 }
shintamainjp 0:1a515b688b8c 203
shintamainjp 0:1a515b688b8c 204 printf("[Read performance checking...]\r\n");
shintamainjp 0:1a515b688b8c 205
shintamainjp 0:1a515b688b8c 206 unsigned int total_byte_size = 0;
shintamainjp 0:1a515b688b8c 207 int min_us = 0;
shintamainjp 0:1a515b688b8c 208 int max_us = 0;
shintamainjp 0:1a515b688b8c 209 timer.reset();
shintamainjp 0:1a515b688b8c 210 timer.start();
shintamainjp 0:1a515b688b8c 211 while (timer.read() < nsec) {
shintamainjp 0:1a515b688b8c 212 for (int i = 0; i < word_size; i++) {
shintamainjp 0:1a515b688b8c 213 iometer.reset();
shintamainjp 0:1a515b688b8c 214 iometer.start();
shintamainjp 0:1a515b688b8c 215 volatile int c = fgetc(fp);
shintamainjp 0:1a515b688b8c 216 iometer.stop();
shintamainjp 0:1a515b688b8c 217 int iomv = iometer.read_us();
shintamainjp 0:1a515b688b8c 218 if (iomv < min_us) {
shintamainjp 0:1a515b688b8c 219 min_us = iomv;
shintamainjp 0:1a515b688b8c 220 }
shintamainjp 0:1a515b688b8c 221 if (max_us < iomv) {
shintamainjp 0:1a515b688b8c 222 max_us = iomv;
shintamainjp 0:1a515b688b8c 223 }
shintamainjp 0:1a515b688b8c 224 total_byte_size++;
shintamainjp 0:1a515b688b8c 225 }
shintamainjp 0:1a515b688b8c 226 }
shintamainjp 0:1a515b688b8c 227 timer.stop();
shintamainjp 0:1a515b688b8c 228
shintamainjp 0:1a515b688b8c 229 printf("\tfilename(%s), word_size(%d)\r\n", filename, word_size);
shintamainjp 0:1a515b688b8c 230 printf("\ttime(%d[ms]), total_byte_size(%d)\r\n", timer.read_ms(), total_byte_size);
shintamainjp 0:1a515b688b8c 231 printf("\tThroughput=%f[Bytes/Sec]\r\n", (double)total_byte_size / timer.read_ms() * 1000.0);
shintamainjp 0:1a515b688b8c 232 printf("\tmin_us(%d), max_us(%d), average_us(%d)\r\n", min_us, max_us, timer.read_us() / total_byte_size);
shintamainjp 0:1a515b688b8c 233
shintamainjp 0:1a515b688b8c 234 fclose(fp);
shintamainjp 0:1a515b688b8c 235 return 0;
shintamainjp 0:1a515b688b8c 236 }
shintamainjp 0:1a515b688b8c 237
shintamainjp 0:1a515b688b8c 238 int perf_write(const char *filename, const int word_size, const int nsec)
shintamainjp 0:1a515b688b8c 239 {
shintamainjp 0:1a515b688b8c 240 FILE *fp = fopen(filename, "wb");
shintamainjp 0:1a515b688b8c 241 if (fp == NULL) {
shintamainjp 0:1a515b688b8c 242 printf("File open failed.\r\n");
shintamainjp 0:1a515b688b8c 243 return 1;
shintamainjp 0:1a515b688b8c 244 }
shintamainjp 0:1a515b688b8c 245
shintamainjp 0:1a515b688b8c 246 printf("[Write performance checking...]\r\n");
shintamainjp 0:1a515b688b8c 247
shintamainjp 0:1a515b688b8c 248 unsigned int total_byte_size = 0;
shintamainjp 0:1a515b688b8c 249 int min_us = 0;
shintamainjp 0:1a515b688b8c 250 int max_us = 0;
shintamainjp 0:1a515b688b8c 251 timer.reset();
shintamainjp 0:1a515b688b8c 252 timer.start();
shintamainjp 0:1a515b688b8c 253 while (timer.read() < nsec) {
shintamainjp 0:1a515b688b8c 254 for (int i = 0; i < word_size; i++) {
shintamainjp 0:1a515b688b8c 255 volatile int c = 0x55;
shintamainjp 0:1a515b688b8c 256 iometer.reset();
shintamainjp 0:1a515b688b8c 257 iometer.start();
shintamainjp 0:1a515b688b8c 258 fputc(c, fp);
shintamainjp 0:1a515b688b8c 259 iometer.stop();
shintamainjp 0:1a515b688b8c 260 int iomv = iometer.read_us();
shintamainjp 0:1a515b688b8c 261 if (iomv < min_us) {
shintamainjp 0:1a515b688b8c 262 min_us = iomv;
shintamainjp 0:1a515b688b8c 263 }
shintamainjp 0:1a515b688b8c 264 if (max_us < iomv) {
shintamainjp 0:1a515b688b8c 265 max_us = iomv;
shintamainjp 0:1a515b688b8c 266 }
shintamainjp 0:1a515b688b8c 267 total_byte_size++;
shintamainjp 0:1a515b688b8c 268 }
shintamainjp 0:1a515b688b8c 269 }
shintamainjp 0:1a515b688b8c 270 timer.stop();
shintamainjp 0:1a515b688b8c 271
shintamainjp 0:1a515b688b8c 272 printf("\tfilename(%s), word_size(%d)\r\n", filename, word_size);
shintamainjp 0:1a515b688b8c 273 printf("\ttime(%d[ms]), total_byte_size(%d)\r\n", timer.read_ms(), total_byte_size);
shintamainjp 0:1a515b688b8c 274 printf("\tThroughput=%f[Bytes/Sec]\r\n", (double)total_byte_size / timer.read_ms() * 1000.0);
shintamainjp 0:1a515b688b8c 275 printf("\tmin_us(%d), max_us(%d), average_us(%d)\r\n", min_us, max_us, timer.read_us() / total_byte_size);
shintamainjp 0:1a515b688b8c 276
shintamainjp 0:1a515b688b8c 277 fclose(fp);
shintamainjp 0:1a515b688b8c 278 return 0;
shintamainjp 0:1a515b688b8c 279 }
shintamainjp 0:1a515b688b8c 280
shintamainjp 0:1a515b688b8c 281 int main(void)
shintamainjp 0:1a515b688b8c 282 {
shintamainjp 0:1a515b688b8c 283 printf("\r\n\r\n");
shintamainjp 0:1a515b688b8c 284 printf("=======================================================\r\n");
shintamainjp 0:1a515b688b8c 285 printf(" A simple wave recorder & player on mbed \r\n");
shintamainjp 0:1a515b688b8c 286 printf(" Copyright(C) 2012 Shinichiro Nakamura (CuBeatSystems) \r\n");
shintamainjp 0:1a515b688b8c 287 printf("=======================================================\r\n");
shintamainjp 0:1a515b688b8c 288
shintamainjp 0:1a515b688b8c 289 ticker.attach_us(tickdummy, 100);
shintamainjp 0:1a515b688b8c 290 wait(1);
shintamainjp 0:1a515b688b8c 291 ticker.detach();
shintamainjp 0:1a515b688b8c 292
shintamainjp 0:1a515b688b8c 293 {
shintamainjp 0:1a515b688b8c 294 const char *perf_filename = "/sdc/perf.bin";
shintamainjp 0:1a515b688b8c 295 const int word_size = 2;
shintamainjp 0:1a515b688b8c 296 const int nsec_write = 20;
shintamainjp 0:1a515b688b8c 297 const int nsec_read = 10;
shintamainjp 0:1a515b688b8c 298 perf_write(perf_filename, word_size, nsec_write);
shintamainjp 0:1a515b688b8c 299 perf_read(perf_filename, word_size, nsec_read);
shintamainjp 0:1a515b688b8c 300 }
shintamainjp 0:1a515b688b8c 301
shintamainjp 0:1a515b688b8c 302 {
shintamainjp 0:1a515b688b8c 303 static const char *target_filename = "/sdc/rec-test.wav";
shintamainjp 0:1a515b688b8c 304 while (1) {
shintamainjp 0:1a515b688b8c 305 /*
shintamainjp 0:1a515b688b8c 306 * 30 seconds recording.
shintamainjp 0:1a515b688b8c 307 */
shintamainjp 0:1a515b688b8c 308 if (rec(target_filename, 30) != 0) {
shintamainjp 0:1a515b688b8c 309 break;
shintamainjp 0:1a515b688b8c 310 }
shintamainjp 0:1a515b688b8c 311 /*
shintamainjp 0:1a515b688b8c 312 * Play it!
shintamainjp 0:1a515b688b8c 313 */
shintamainjp 0:1a515b688b8c 314 if (play(target_filename) != 0) {
shintamainjp 0:1a515b688b8c 315 break;
shintamainjp 0:1a515b688b8c 316 }
shintamainjp 0:1a515b688b8c 317 }
shintamainjp 0:1a515b688b8c 318 }
shintamainjp 0:1a515b688b8c 319
shintamainjp 0:1a515b688b8c 320 return 0;
shintamainjp 0:1a515b688b8c 321 }