パラメータを適応変化させる事により圧縮率を向上させた動的ライス・ゴロム符号を利用した可逆圧縮方式。圧縮ソフト、圧縮率のMATLABシミュレーションは詳細はInterface誌2011年8月号に掲載されるRX62Nマイコン連動特集にて掲載予定。

Dependencies:   mbed

Committer:
lynxeyed_atsu
Date:
Wed Mar 30 06:05:24 2011 +0000
Revision:
0:d920d64db582
alpha

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lynxeyed_atsu 0:d920d64db582 1 #include "mbed.h"
lynxeyed_atsu 0:d920d64db582 2 #include "MSCFileSystem.h"
lynxeyed_atsu 0:d920d64db582 3 #include "SDHCFileSystem.h"
lynxeyed_atsu 0:d920d64db582 4 #include "TextLCD.h"
lynxeyed_atsu 0:d920d64db582 5 #include "i2s_irq_test.h"
lynxeyed_atsu 0:d920d64db582 6 #include "lpc17xx_i2s.h"
lynxeyed_atsu 0:d920d64db582 7 #include "lpc17xx_clkpwr.h"
lynxeyed_atsu 0:d920d64db582 8 #include "aic23b_comm.h"
lynxeyed_atsu 0:d920d64db582 9 #include "string"
lynxeyed_atsu 0:d920d64db582 10 #include "_bitio.h"
lynxeyed_atsu 0:d920d64db582 11
lynxeyed_atsu 0:d920d64db582 12 #define _RGM_ADAPTIVE 1 /* 1:Adaptive 0:Constant */
lynxeyed_atsu 0:d920d64db582 13
lynxeyed_atsu 0:d920d64db582 14 #define k_bits 0x07 // k_bits:0x09 to 0x0b?
lynxeyed_atsu 0:d920d64db582 15 #define min_of_k 0x07
lynxeyed_atsu 0:d920d64db582 16 #define max_of_k 0x0b /*for dynamic Rice-Golomb codings */
lynxeyed_atsu 0:d920d64db582 17
lynxeyed_atsu 0:d920d64db582 18 DigitalOut led1(LED1);
lynxeyed_atsu 0:d920d64db582 19 DigitalOut led2(LED2);
lynxeyed_atsu 0:d920d64db582 20 DigitalOut led3(LED3);
lynxeyed_atsu 0:d920d64db582 21 DigitalOut led4(LED4);
lynxeyed_atsu 0:d920d64db582 22 Serial pc(USBTX, USBRX); // tx, rx
lynxeyed_atsu 0:d920d64db582 23 I2C AIC23B(p9,p10); //sda,scl
lynxeyed_atsu 0:d920d64db582 24
lynxeyed_atsu 0:d920d64db582 25 TextLCD lcd(p24, p26, p27, p28, p29, p30);
lynxeyed_atsu 0:d920d64db582 26 SDFileSystem sd(p11, p12, p13, p14, "sd");//p5,6,7,8
lynxeyed_atsu 0:d920d64db582 27 //MSCFileSystem msc("msc"); // Mount flash drive under the name "msc"
lynxeyed_atsu 0:d920d64db582 28 FILE *infp,*outfp,*playlist;
lynxeyed_atsu 0:d920d64db582 29
lynxeyed_atsu 0:d920d64db582 30 Ticker tick;
lynxeyed_atsu 0:d920d64db582 31 Ticker fl_leds;
lynxeyed_atsu 0:d920d64db582 32
lynxeyed_atsu 0:d920d64db582 33 #define AudioBufRow 256 /* length of proc_r */
lynxeyed_atsu 0:d920d64db582 34 volatile short int AudioBuf[2][AudioBufRow]; /* Audio Data Buffer:AudioBuf[empty_c][proc_r] */
lynxeyed_atsu 0:d920d64db582 35 volatile BYTE empty_c=0; /* Column of AudioBuf */
lynxeyed_atsu 0:d920d64db582 36 volatile BYTE proc_r=0; /* Row of AudioBuf */
lynxeyed_atsu 0:d920d64db582 37 bool dac_semp; /* Write AudioBuf Complete? true:Yes, false:No */
lynxeyed_atsu 0:d920d64db582 38
lynxeyed_atsu 0:d920d64db582 39
lynxeyed_atsu 0:d920d64db582 40 int aic23b_send(int addr,char ctrl_address,char ctrl_data){
lynxeyed_atsu 0:d920d64db582 41 int flag;
lynxeyed_atsu 0:d920d64db582 42 char cmd[2];
lynxeyed_atsu 0:d920d64db582 43 cmd[0]=ctrl_address;
lynxeyed_atsu 0:d920d64db582 44 cmd[1]=ctrl_data;
lynxeyed_atsu 0:d920d64db582 45 flag = AIC23B.write(addr, cmd, 2);
lynxeyed_atsu 0:d920d64db582 46 pc.printf("ADDR=0x%x, CTRL_ADD=0x%x, CTRL_DATA=0x%x, RESP=0x%x\r\n",(addr&0x7f),cmd[0],cmd[1],flag);
lynxeyed_atsu 0:d920d64db582 47 return (flag);
lynxeyed_atsu 0:d920d64db582 48 }
lynxeyed_atsu 0:d920d64db582 49
lynxeyed_atsu 0:d920d64db582 50 int aic23b_init(void){
lynxeyed_atsu 0:d920d64db582 51 int flag=0;
lynxeyed_atsu 0:d920d64db582 52 printf("*************************\r\nReset TLV320AIC23B\r\n*************************\r\n");
lynxeyed_atsu 0:d920d64db582 53 AIC23B.frequency(150000);
lynxeyed_atsu 0:d920d64db582 54 flag = aic23b_send(AIC23B_ADDRESS,RESET_REFGISTER,RESET);
lynxeyed_atsu 0:d920d64db582 55 wait(0.1);
lynxeyed_atsu 0:d920d64db582 56 flag += aic23b_send(AIC23B_ADDRESS,POWER_DOWN_CONTROL,0);
lynxeyed_atsu 0:d920d64db582 57 wait(0.1);
lynxeyed_atsu 0:d920d64db582 58 flag += aic23b_send(AIC23B_ADDRESS,POWER_DOWN_CONTROL,1);
lynxeyed_atsu 0:d920d64db582 59 wait(0.1);
lynxeyed_atsu 0:d920d64db582 60 flag += aic23b_send(AIC23B_ADDRESS,DIGITAL_AUDIO_INTERFACE_FORMAT,(MASTER_MODE|INPUT_DATA_16_BIT_LENGTH|I2S_FORMAT));
lynxeyed_atsu 0:d920d64db582 61 wait(0.1);
lynxeyed_atsu 0:d920d64db582 62 flag += aic23b_send(AIC23B_ADDRESS,SAMPLE_RATE_CONTROL,(SR_USB_44_1_KHZ_MODE| BOSR_USB_44_1_KHZ_MODE| USE_USB_CLOCK_44_1_KHZ_MODE));
lynxeyed_atsu 0:d920d64db582 63 wait(0.1);
lynxeyed_atsu 0:d920d64db582 64 flag += aic23b_send(AIC23B_ADDRESS,ANALOG_AUDIO_PATH_CONTROL,0x10);
lynxeyed_atsu 0:d920d64db582 65 wait(0.1);
lynxeyed_atsu 0:d920d64db582 66 flag += aic23b_send(AIC23B_ADDRESS,DIGITAL_AUDIO_PATH_CONTROL,0);
lynxeyed_atsu 0:d920d64db582 67 wait(0.1);
lynxeyed_atsu 0:d920d64db582 68 flag += aic23b_send(AIC23B_ADDRESS,DIGITAL_INTERFACE_ACTIVATION,DIGITAL_INTERFACE_ACTIVE);
lynxeyed_atsu 0:d920d64db582 69 wait(0.1);
lynxeyed_atsu 0:d920d64db582 70 flag += aic23b_send(AIC23B_ADDRESS,LEFT_CHANNEL_HEADPHONE_VOLUME_CONTROL,LHV_VOLUME_DEFAULT);
lynxeyed_atsu 0:d920d64db582 71 wait(0.1);
lynxeyed_atsu 0:d920d64db582 72 flag += aic23b_send(AIC23B_ADDRESS,RIGHT_CHANNEL_HEADPHONE_VOLUME_CONTROL,RHV_VOLUME_DEFAULT);
lynxeyed_atsu 0:d920d64db582 73
lynxeyed_atsu 0:d920d64db582 74 if(!flag) {
lynxeyed_atsu 0:d920d64db582 75 printf("*************************\r\nReset OK\r\n*************************\r\n");
lynxeyed_atsu 0:d920d64db582 76 return 0;
lynxeyed_atsu 0:d920d64db582 77 }
lynxeyed_atsu 0:d920d64db582 78 else{
lynxeyed_atsu 0:d920d64db582 79 printf("*************************\r\nReset FAILED\r\n*************************\r\n");
lynxeyed_atsu 0:d920d64db582 80 return -1;
lynxeyed_atsu 0:d920d64db582 81 }
lynxeyed_atsu 0:d920d64db582 82 }
lynxeyed_atsu 0:d920d64db582 83
lynxeyed_atsu 0:d920d64db582 84 void pl_led_flash(void)
lynxeyed_atsu 0:d920d64db582 85 {
lynxeyed_atsu 0:d920d64db582 86 if(led1){
lynxeyed_atsu 0:d920d64db582 87 led1 = 0;
lynxeyed_atsu 0:d920d64db582 88 led2 = 1;
lynxeyed_atsu 0:d920d64db582 89 return;
lynxeyed_atsu 0:d920d64db582 90 }
lynxeyed_atsu 0:d920d64db582 91
lynxeyed_atsu 0:d920d64db582 92 if(led2){
lynxeyed_atsu 0:d920d64db582 93 led2 = 0;
lynxeyed_atsu 0:d920d64db582 94 led3 = 1;
lynxeyed_atsu 0:d920d64db582 95 return;
lynxeyed_atsu 0:d920d64db582 96 }
lynxeyed_atsu 0:d920d64db582 97
lynxeyed_atsu 0:d920d64db582 98 if(led3){
lynxeyed_atsu 0:d920d64db582 99 led3 = 0;
lynxeyed_atsu 0:d920d64db582 100 led4 = 1;
lynxeyed_atsu 0:d920d64db582 101 return;
lynxeyed_atsu 0:d920d64db582 102 }
lynxeyed_atsu 0:d920d64db582 103
lynxeyed_atsu 0:d920d64db582 104 if(led4){
lynxeyed_atsu 0:d920d64db582 105 led4 = 0;
lynxeyed_atsu 0:d920d64db582 106 led1 = 1;
lynxeyed_atsu 0:d920d64db582 107 return;
lynxeyed_atsu 0:d920d64db582 108 }
lynxeyed_atsu 0:d920d64db582 109
lynxeyed_atsu 0:d920d64db582 110
lynxeyed_atsu 0:d920d64db582 111 }
lynxeyed_atsu 0:d920d64db582 112
lynxeyed_atsu 0:d920d64db582 113 void dac_out(void)
lynxeyed_atsu 0:d920d64db582 114 {
lynxeyed_atsu 0:d920d64db582 115 volatile static short i,j; // AudioBuf[j][i]
lynxeyed_atsu 0:d920d64db582 116 volatile uint32_t DBufLR; // Buffer Data to send I2S_TX
lynxeyed_atsu 0:d920d64db582 117 uint16_t BufLPCnt;
lynxeyed_atsu 0:d920d64db582 118 for(BufLPCnt=0 ; BufLPCnt < 9 ; BufLPCnt++ )
lynxeyed_atsu 0:d920d64db582 119 {
lynxeyed_atsu 0:d920d64db582 120 if(i >= AudioBufRow-1)
lynxeyed_atsu 0:d920d64db582 121 {
lynxeyed_atsu 0:d920d64db582 122 if(dac_semp) /* colunm (empty_c) is full? true:Yes */
lynxeyed_atsu 0:d920d64db582 123 {
lynxeyed_atsu 0:d920d64db582 124 i=0;
lynxeyed_atsu 0:d920d64db582 125 empty_c =(empty_c==1)?0:1; /* empty_c:empty column of buffer AudioBuf, Because I2S_TX used these data */
lynxeyed_atsu 0:d920d64db582 126 j=(empty_c==1)?0:1; /* Change column which buffer is filled with data by function decode() */
lynxeyed_atsu 0:d920d64db582 127 dac_semp = false; /* false: empty_c is ready to get data from function decode() */
lynxeyed_atsu 0:d920d64db582 128
lynxeyed_atsu 0:d920d64db582 129 }else{ /* Buffer is NOT ready to read? */
lynxeyed_atsu 0:d920d64db582 130 return; /* NO:return */
lynxeyed_atsu 0:d920d64db582 131 }
lynxeyed_atsu 0:d920d64db582 132 }
lynxeyed_atsu 0:d920d64db582 133 //Send I2S_TX
lynxeyed_atsu 0:d920d64db582 134 if(I2S_GetLevel(LPC_I2S, I2S_TX_MODE)==TXFIFO_FULL)break;
lynxeyed_atsu 0:d920d64db582 135 DBufLR = (0xffff0000 & (AudioBuf[j][i++]<<16))|(0x0000ffff & AudioBuf[j][i++]);
lynxeyed_atsu 0:d920d64db582 136 I2S_Send(LPC_I2S,DBufLR);
lynxeyed_atsu 0:d920d64db582 137 }
lynxeyed_atsu 0:d920d64db582 138 }
lynxeyed_atsu 0:d920d64db582 139
lynxeyed_atsu 0:d920d64db582 140 void encode(long int n){
lynxeyed_atsu 0:d920d64db582 141 int zero_shift = 0;
lynxeyed_atsu 0:d920d64db582 142
lynxeyed_atsu 0:d920d64db582 143 if(n < 0){
lynxeyed_atsu 0:d920d64db582 144 putbit(0); // sign (put 0:if n as negative)
lynxeyed_atsu 0:d920d64db582 145 n = -n; // n = abs(n)
lynxeyed_atsu 0:d920d64db582 146 //printf("\t 0");
lynxeyed_atsu 0:d920d64db582 147 }
lynxeyed_atsu 0:d920d64db582 148 else{
lynxeyed_atsu 0:d920d64db582 149 putbit(1); // sign (put 1:if n as positive)
lynxeyed_atsu 0:d920d64db582 150 //printf("\t 1");
lynxeyed_atsu 0:d920d64db582 151 }
lynxeyed_atsu 0:d920d64db582 152 zero_shift = (n >> (_lsb_k));
lynxeyed_atsu 0:d920d64db582 153 //printf("\t shift= %d",zero_shift);
lynxeyed_atsu 0:d920d64db582 154 while(zero_shift > 0){
lynxeyed_atsu 0:d920d64db582 155
lynxeyed_atsu 0:d920d64db582 156 zero_shift--;
lynxeyed_atsu 0:d920d64db582 157 putbit(0);
lynxeyed_atsu 0:d920d64db582 158 } // put n/(2^_lsb_k) 0's
lynxeyed_atsu 0:d920d64db582 159
lynxeyed_atsu 0:d920d64db582 160 putbit(1); // terminating "1"
lynxeyed_atsu 0:d920d64db582 161 putbits(_lsb_k,rightbits(_lsb_k,n));
lynxeyed_atsu 0:d920d64db582 162 //printf("\t finish= %d \r\n",(n & ((1U<<_lsb_k)-1)));
lynxeyed_atsu 0:d920d64db582 163 }
lynxeyed_atsu 0:d920d64db582 164
lynxeyed_atsu 0:d920d64db582 165
lynxeyed_atsu 0:d920d64db582 166
lynxeyed_atsu 0:d920d64db582 167 void decode(void)
lynxeyed_atsu 0:d920d64db582 168 {
lynxeyed_atsu 0:d920d64db582 169 volatile short i=0,j=0;
lynxeyed_atsu 0:d920d64db582 170
lynxeyed_atsu 0:d920d64db582 171 volatile long int diff=0,diff2=0; /* differential of previous data buffer */
lynxeyed_atsu 0:d920d64db582 172 volatile unsigned int buff_sign,zero_shift; /* sign buffer,register for unary codings */
lynxeyed_atsu 0:d920d64db582 173 volatile long int decode_buff;
lynxeyed_atsu 0:d920d64db582 174
lynxeyed_atsu 0:d920d64db582 175 volatile unsigned char k1= k_bits; /* Coding Parameter (init:k_bits) */
lynxeyed_atsu 0:d920d64db582 176 volatile unsigned char k2= k_bits;
lynxeyed_atsu 0:d920d64db582 177
lynxeyed_atsu 0:d920d64db582 178 init_bit_o();
lynxeyed_atsu 0:d920d64db582 179 init_bit_i(); /* init bit control function */
lynxeyed_atsu 0:d920d64db582 180 while(1){
lynxeyed_atsu 0:d920d64db582 181
lynxeyed_atsu 0:d920d64db582 182 if(i!=empty_c)
lynxeyed_atsu 0:d920d64db582 183 {
lynxeyed_atsu 0:d920d64db582 184 if(j>=AudioBufRow-1)
lynxeyed_atsu 0:d920d64db582 185 {
lynxeyed_atsu 0:d920d64db582 186 i=empty_c; /* Choose empty buffer*/
lynxeyed_atsu 0:d920d64db582 187 j=0;
lynxeyed_atsu 0:d920d64db582 188 }
lynxeyed_atsu 0:d920d64db582 189 }
lynxeyed_atsu 0:d920d64db582 190
lynxeyed_atsu 0:d920d64db582 191 if (j<AudioBufRow-1)
lynxeyed_atsu 0:d920d64db582 192 {
lynxeyed_atsu 0:d920d64db582 193 /* decode */
lynxeyed_atsu 0:d920d64db582 194 if((buff_sign = getbit()) == OVERRUN)break; /*get sign*/
lynxeyed_atsu 0:d920d64db582 195
lynxeyed_atsu 0:d920d64db582 196 zero_shift = 0;
lynxeyed_atsu 0:d920d64db582 197 while(getbit()==0)
lynxeyed_atsu 0:d920d64db582 198 zero_shift++; /* decode unary code */
lynxeyed_atsu 0:d920d64db582 199
lynxeyed_atsu 0:d920d64db582 200 decode_buff = (signed int)(zero_shift*(1U<<k1)); /*decode Rice-Golomb code*/
lynxeyed_atsu 0:d920d64db582 201 decode_buff += getbits(k1);
lynxeyed_atsu 0:d920d64db582 202
lynxeyed_atsu 0:d920d64db582 203 if(!buff_sign)decode_buff =- decode_buff; /*add sign */
lynxeyed_atsu 0:d920d64db582 204 diff =(diff + decode_buff); /* get audio data */
lynxeyed_atsu 0:d920d64db582 205
lynxeyed_atsu 0:d920d64db582 206 AudioBuf[i][j]=(short int)(diff); /* write AudioBuf */
lynxeyed_atsu 0:d920d64db582 207 j++;
lynxeyed_atsu 0:d920d64db582 208
lynxeyed_atsu 0:d920d64db582 209
lynxeyed_atsu 0:d920d64db582 210 #if _RGM_ADAPTIVE
lynxeyed_atsu 0:d920d64db582 211 /* calc k */
lynxeyed_atsu 0:d920d64db582 212 if(zero_shift > 2)k1=k1+1;
lynxeyed_atsu 0:d920d64db582 213 if(zero_shift == 0)k1=k1-1;
lynxeyed_atsu 0:d920d64db582 214 if(k1 < min_of_k)k1 = min_of_k;
lynxeyed_atsu 0:d920d64db582 215 if(k1 > max_of_k)k1 = max_of_k;
lynxeyed_atsu 0:d920d64db582 216 #endif
lynxeyed_atsu 0:d920d64db582 217
lynxeyed_atsu 0:d920d64db582 218 if((buff_sign = getbit()) == OVERRUN)break; /* get sign */
lynxeyed_atsu 0:d920d64db582 219
lynxeyed_atsu 0:d920d64db582 220 zero_shift = 0;
lynxeyed_atsu 0:d920d64db582 221 while(getbit()==0)
lynxeyed_atsu 0:d920d64db582 222 zero_shift++; /* decode unary code */
lynxeyed_atsu 0:d920d64db582 223
lynxeyed_atsu 0:d920d64db582 224 decode_buff = (signed int)(zero_shift*(1U<<k2)); /* decode Rice-Golomb code */
lynxeyed_atsu 0:d920d64db582 225 decode_buff += getbits(k2);
lynxeyed_atsu 0:d920d64db582 226
lynxeyed_atsu 0:d920d64db582 227 if(!buff_sign)decode_buff =- decode_buff; /* add sign */
lynxeyed_atsu 0:d920d64db582 228 diff2 =(diff2 + decode_buff); /* get Audio data */
lynxeyed_atsu 0:d920d64db582 229
lynxeyed_atsu 0:d920d64db582 230 AudioBuf[i][j]=(short int)(diff2); /* Write Buffer */
lynxeyed_atsu 0:d920d64db582 231 j++;
lynxeyed_atsu 0:d920d64db582 232
lynxeyed_atsu 0:d920d64db582 233 #if _RGM_ADAPTIVE
lynxeyed_atsu 0:d920d64db582 234 /* calc k */
lynxeyed_atsu 0:d920d64db582 235 if(zero_shift > 2)k2=k2+1;
lynxeyed_atsu 0:d920d64db582 236 if(zero_shift == 0)k2=k2-1;
lynxeyed_atsu 0:d920d64db582 237 if(k2 < min_of_k)k2 = min_of_k;
lynxeyed_atsu 0:d920d64db582 238 if(k2 > max_of_k)k2 = max_of_k;
lynxeyed_atsu 0:d920d64db582 239 #endif
lynxeyed_atsu 0:d920d64db582 240
lynxeyed_atsu 0:d920d64db582 241 }
lynxeyed_atsu 0:d920d64db582 242 if(j>=AudioBufRow-1){ /* AudioBuf is filled with data? */
lynxeyed_atsu 0:d920d64db582 243 dac_semp = true;
lynxeyed_atsu 0:d920d64db582 244 }
lynxeyed_atsu 0:d920d64db582 245 }
lynxeyed_atsu 0:d920d64db582 246 }
lynxeyed_atsu 0:d920d64db582 247
lynxeyed_atsu 0:d920d64db582 248
lynxeyed_atsu 0:d920d64db582 249 int main() {
lynxeyed_atsu 0:d920d64db582 250
lynxeyed_atsu 0:d920d64db582 251 char s[256];
lynxeyed_atsu 0:d920d64db582 252 char* p;
lynxeyed_atsu 0:d920d64db582 253
lynxeyed_atsu 0:d920d64db582 254 lcd.cls();
lynxeyed_atsu 0:d920d64db582 255 lcd.locate(0,0);
lynxeyed_atsu 0:d920d64db582 256 lcd.printf("I2S Codec:");
lynxeyed_atsu 0:d920d64db582 257 mbed_i2s_init(); //DAC:44100Hz sampling ,16bit ,Stereo ,MCLK Disable, TLV320AIC23B=Master
lynxeyed_atsu 0:d920d64db582 258 if(aic23b_init()==0){
lynxeyed_atsu 0:d920d64db582 259 lcd.locate(12,0);
lynxeyed_atsu 0:d920d64db582 260 lcd.printf("OK");
lynxeyed_atsu 0:d920d64db582 261 }else{
lynxeyed_atsu 0:d920d64db582 262 lcd.locate(12,0);
lynxeyed_atsu 0:d920d64db582 263 lcd.printf("NG");
lynxeyed_atsu 0:d920d64db582 264 }
lynxeyed_atsu 0:d920d64db582 265 Buffer_Init();
lynxeyed_atsu 0:d920d64db582 266 pc.printf("CCLKCFG= %d \r\n",LPC_SC->CCLKCFG);
lynxeyed_atsu 0:d920d64db582 267 pc.printf("I2S Send start.\r\n");
lynxeyed_atsu 0:d920d64db582 268 led1=1;
lynxeyed_atsu 0:d920d64db582 269 lcd.locate(0,1);
lynxeyed_atsu 0:d920d64db582 270 lcd.printf("> Please Wait...");
lynxeyed_atsu 0:d920d64db582 271
lynxeyed_atsu 0:d920d64db582 272 if ( NULL == (playlist = fopen( "/sd/play.txt", "r" )) ) {
lynxeyed_atsu 0:d920d64db582 273 printf( "\r\nError: The Playlist file cannot be accessed\r\n" );
lynxeyed_atsu 0:d920d64db582 274 return -1;
lynxeyed_atsu 0:d920d64db582 275 }
lynxeyed_atsu 0:d920d64db582 276
lynxeyed_atsu 0:d920d64db582 277
lynxeyed_atsu 0:d920d64db582 278 while(1){
lynxeyed_atsu 0:d920d64db582 279 if((fgets( s, 256, playlist ))==NULL){
lynxeyed_atsu 0:d920d64db582 280 fseek(playlist, 0L, SEEK_SET);
lynxeyed_atsu 0:d920d64db582 281 fgets( s, 256, playlist );
lynxeyed_atsu 0:d920d64db582 282 }
lynxeyed_atsu 0:d920d64db582 283 p=strchr(s,'\n');
lynxeyed_atsu 0:d920d64db582 284 if(p!=NULL){
lynxeyed_atsu 0:d920d64db582 285 *p='\0';
lynxeyed_atsu 0:d920d64db582 286
lynxeyed_atsu 0:d920d64db582 287 } //remove CR code for Macintosh text-file
lynxeyed_atsu 0:d920d64db582 288 p=strchr(s,'\r');
lynxeyed_atsu 0:d920d64db582 289 if(p!=NULL){
lynxeyed_atsu 0:d920d64db582 290 *p='\0';
lynxeyed_atsu 0:d920d64db582 291
lynxeyed_atsu 0:d920d64db582 292 } //remove LF code for Linux & Windows text-file
lynxeyed_atsu 0:d920d64db582 293 printf("\r\n open file:%s \r\n",s); // cut '\n' symbol
lynxeyed_atsu 0:d920d64db582 294 lcd.locate(0,1);
lynxeyed_atsu 0:d920d64db582 295 lcd.printf("> ");
lynxeyed_atsu 0:d920d64db582 296 s[15]='\0';
lynxeyed_atsu 0:d920d64db582 297 lcd.locate(1,1);
lynxeyed_atsu 0:d920d64db582 298 lcd.printf("%s",s);
lynxeyed_atsu 0:d920d64db582 299 if ( NULL == (infp = fopen( s, "r" )) ) {
lynxeyed_atsu 0:d920d64db582 300 printf( "\r\nError: The message file cannot be accessed\r\n" );
lynxeyed_atsu 0:d920d64db582 301 return -1;
lynxeyed_atsu 0:d920d64db582 302 }
lynxeyed_atsu 0:d920d64db582 303
lynxeyed_atsu 0:d920d64db582 304 fseek(infp, 0L, SEEK_SET);
lynxeyed_atsu 0:d920d64db582 305 tick.attach_us(&dac_out, 181); //set 44.1kHz/8(word FIFO) sampling data
lynxeyed_atsu 0:d920d64db582 306 fl_leds.attach(&pl_led_flash,1);
lynxeyed_atsu 0:d920d64db582 307
lynxeyed_atsu 0:d920d64db582 308
lynxeyed_atsu 0:d920d64db582 309 decode();
lynxeyed_atsu 0:d920d64db582 310
lynxeyed_atsu 0:d920d64db582 311 fclose( infp );
lynxeyed_atsu 0:d920d64db582 312 infp = NULL;
lynxeyed_atsu 0:d920d64db582 313 tick.detach();
lynxeyed_atsu 0:d920d64db582 314 fl_leds.detach();
lynxeyed_atsu 0:d920d64db582 315 lcd.locate(0,1);
lynxeyed_atsu 0:d920d64db582 316 lcd.printf("> Please Wait...");
lynxeyed_atsu 0:d920d64db582 317 }
lynxeyed_atsu 0:d920d64db582 318 }
lynxeyed_atsu 0:d920d64db582 319
lynxeyed_atsu 0:d920d64db582 320