戻る

サウンド再生

サウンドを再生するだけのプログラムです。どうしても長くなってしまう・・・。
本当はすべてinoファイルに書こうと思たんだけどどうしても

void TC5_Handler(void) __attribute__ ((weak, alias("SoundStreamCallback")));~

の行でエラーになってしまったのでcppファイルに分割しました。TC5_Handlerはinoファイル内では書けないのかな?
とにかくわかる範囲で説明。
TCは多分タイムカウンタの事。このカウンタ使って周期的に割り込み処理を起こしてその中で10bitDACにデータを書き込み音を再生している。
このプログラムでは1秒間に11025回の割り込み処理を起こしその度にstream_buffer内の1バイトを10bitDACに送っている。
10bitDACに送るデータ形式は符号なし10bitデータなので符号なし8bitデータを用意して割り込み処理内でデータを<<2して送っている。
stream_bufferはリングバッファになっていて800バイト確保して前半400バイトを再生している場合は後半400バイトをデータ更新、後半400バイトを再生している場合は前半400バイトをデータ更新している。
UpdateSoundStream()はloopで毎回呼び出す必要があり、GetSoundStreamWritableSize()でサウンドバッファに書き込みするバイト数を取得して0以外ならWriteSoundStream()でwaveデータを書き込む。
このプログラムはwaveの終端になったらwaveの先頭に戻ってループ再生している。
またTinyArcadeは1チャンネル分しかサウンドを再生することができないためBGM,SEなどたくさん同時に再生したい場合は自前でwaveを合成する必要がある。

サンプルプログラム

実行結果

SoundSample1.jpg

TwinkleBeep01_waveがループ再生されます。

サンプルプログラムのダウンロード

fileSoundSample1.zip

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS