音がダメダメになった原因がわかった
結局、ARM9からARM7に渡しているところに原因がありました。freq(周波数)の設定を渡すところが下記。
//ARM9側 void soundSetFreq2(int soundId, u16 freq){ fifoSendValue32(FIFO_USER_05, SOUND_SET_FREQ | (soundId << 16) | freq); } //ARM7側 //--------------------------------------------------------------------------------- void soundCommandHandler2(u32 command, void* userdata) { //--------------------------------------------------------------------------------- int cmd = (command ) & 0x00F00000; int data = command & 0xFFFF; int channel = (command >> 16) & 0xF; switch(cmd) { case SOUND_SET_FREQ: SCHANNEL_TIMER(channel) = SOUND_FREQ( (u16)data ); break; 以下略
int data = command & 0xFFFF; のところで、何ビットで渡しても、16ビットにされてしまう・・・。
ここを修正しました。
//ARM9側 void soundSetFreq2(int soundId, u32 freq){ //Only this case increases volume of data to 20 bits. And, sound ID shifts to the left of 28 bits. freq &= 0xFFFFF; fifoSendValue32(FIFO_USER_05, SOUND_SET_FREQ | (soundId << 28) | freq); } //ARM7側 //--------------------------------------------------------------------------------- void soundCommandHandler2(u32 command, void* userdata) { //--------------------------------------------------------------------------------- int cmd = (command ) & 0x00F00000; int data = command & 0xFFFF; int channel = (command >> 16) & 0xF; switch(cmd) { case SOUND_SET_FREQ: //Only this case increases volume of data to 20 bits. And, sound ID shifts to the left of 28 bits. data = command & 0xFFFFF; channel = (command >> 28) & 0xF; SCHANNEL_TIMER(channel) = SOUND_FREQ( (s32)data ); break; 以下略
ちょっと強引ですが、こんな感じで。これでサンプリング周波数の正常な設定ができることは確認しました。
今日は疲れたので、これくらいに。
本当にやりたいことリスト
(ブログの終わりにやりたいことを書いておきたいと思います)
- 求職活動・・・このブログで興味を持った人一声かけてください。m(_ _)m
- Androidプログラム
- Web系のプログラム