|
ブツっっという音はWAVファイルの出力値の繋ぎ部分で、0x00(WAVファイルの出力値1Byte目と最後のbyte)と0x80(WAVファイルの無音時の値)の切り替わる時に出る音だと思うので、以下の2つの対処をすれば消えると思います。 ①WAVファイルの最初と最後の出力値を切り捨てる (連続再生時にWAVファイルが無音で始まり、無音で終わっていれば、スムーズに音が繋がる) ②初期化時にDAC出力を許可して、0x80を出力しておいて、以降DAC出力を許可のまま固定する (一番初めのWAVファイル再生時にもブツッと音を再生させなくする) ①について [coron_sdwav.c]のSD_play_wav()関数内を以下のように変更してください。 //============================= // SDカードWAVファイル再生(セクタ番号) //============================= void SD_play_wav(u8 wav_num){ u32 size; u32 sct,sec_num,n,i; size =wav_size[wav_num]; sct =wav_sector_num[wav_num]; /* TIM5 enable counter */ TIM_Cmd(TIM5, ENABLE); sec_num=(size/512)+1; //最初のセクタだけヘッダ分を飛ばす SD_read(sct*512); for(i=0;i<0x3a;i++){sound_buf[0][i]=0x80;} for(i=0x3a;i<512;i++){sound_buf[0][i]=buf512[i];} sound_flag=1; for(n=1;n<(sec_num-1);n++){ SD_read(512*(n + sct)); if(sound_flag==2){ for(i=0;i<512;i++){sound_buf[0][i]=buf512[i];} while(sound_flag==2){read_flag=1;} read_flag=0; } else if(sound_flag==1){ for(i=0;i<512;i++){sound_buf[1][i]=buf512[i];} while(sound_flag==1){read_flag=1;} read_flag=0; } } sound_flag=0; /* TIM5 disable counter */ TIM_Cmd(TIM5, DISABLE); } //ここまで ②について [coron_sound.c]のSPK_init()関数内、最後の部分を以下のように変更してください。 <Before> /* Dissable DAC Channel1 */ DAC_Cmd(DAC_Channel_1, DISABLE); <After> /* Ensable DAC Channel1 */ DAC_Cmd(DAC_Channel_1, ENABLE); DAC_SetChannel1Data(DAC_Align_8b_R,0x80); DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE); //ここまで ①に関しては最後のByteの切り捨て方が少し強引なので(最後のセクタごと切り捨て)、最大で約50分の1秒(20msec分)ほど最後音声再生が切り捨てられる可能性がありますので注意してください。 これらの対処をしてもブツッっと出てしまう場合は、お手数ですが再度ご報告お願い致します。 |