>>92

http://mdxonlinemirror.dyndns.org/sndtest.zip

A/B/X/Yボタンでそれぞれ違うフォーマットのサウンドファイルを再生するサンプルをでっち上げました。
変換にはSOXを使用しました。変換オプションはsndtest/arm9/data/convert/conv.batを参照してください。
DevKitProのcombinedサンプルをベースにしましたが、ARM7とARM9で8bit/16bitの設定方法が食い違っていたので、ARM7のtemplate.cを修正しました。
devkitPror20/nds-examples-20070327/templates/combined/arm7/source/template.cの10行目を、
SCHANNEL_CR(channel) = SCHANNEL_ENABLE | SOUND_ONE_SHOT | SOUND_VOL(vol) | SOUND_PAN(pan) | (format==1?SOUND_8BIT:SOUND_16BIT);
から、
SCHANNEL_CR(channel) = SCHANNEL_ENABLE | SOUND_ONE_SHOT | SOUND_VOL(vol) | SOUND_PAN(pan) | (format==0?SOUND_8BIT:SOUND_16BIT);
に変更してあります。
あと、ダミーの割り込みを有効にしないと、swiWaitForVBlankは使えないので、InitInterruptsで空の割り込みを有効にしてます。combinedサンプルはそのままじゃ動かない…ですよね?

ここから下は補足です。
NDSのサウンドチップは32768Hzをベースにしているので、これ以外の周波数を鳴らそうとすると量子化ノイズが入ります。
A/Bボタンの22kHz再生でチリチリ言うのがわかると思います。容量の問題ならもっと下げて16384Hzで二倍オーバーサンプリングするのが良いと思います。
ADPCMは未だになんだかよくわかりません。二種類のADPCMを使えるみたいですが。
ステレオデータを再生するときは、左右分離してデータを二つ用意して、パンを両端に振って同時に再生すればOKですが、libndsの標準関数を使うと1vsync(16ミリ秒)ずれるので、自分でステレオ再生用関数を作った方が良いと思います。
8bit/16bitは、平滑化フィルタを入れれば8bitでも充分かなと私は思っています。容量などを考えながらケースバイケースで使い分ける感じで。
ちなみに、DSMPlayは8bitデータで平滑化フィルタを使っています。sin波ボタンでON/OFFできるので、聴いてみたいだけなら試してみてください。