質問: ### 前提・実現したいこと Unityを使ったゲームでWiiリモコンをコントローラーとして制作しています。 Wiiリモコンのスピーカーから音声を再生したいです。 符号付8bit,サンプリングレート2000hzのモノラル音声が必要になりました。 様々な音声編集ソフトを試してみましたが、サンプリングレートが8000hz未満に変更できません。 サンプリングレートを2000hzに変更できる音声編集ソフトや方法はありませんでしょうか? ### 発生している問題・エラーメッセージ サンプリングレートを2000hzの音声ファイルが作成できません。 ### 該当のソースコード ### 試したこと sox SoundEngineFree audacity ### 補足情報(言語/FW/ツール等のバージョンなど) より詳細な情報
回答: フォーマットをwavとすると内部が比較的単純なのでちょっと工夫すると自前のプログラムでも作ってしまえると思います。 フォーマットについてはネット上で「wav フォーマット」で探すとそれらしいページが出てきます。例えば 何もないところからファイルを生成するのは多少面倒ですが、もし何かのソフトを使い元データとして * サンプリングレート8000Hz * singed/8bit * モノラル(1チャンネル) のwavファイルが作ることができれば、(何か都合のよい言語を使って)そのファイルを読み込んみ、一部だけを書き換え、別のファイルへ出力することでサンプリングレート2000Hzのものができると思います。 wavファイルのフォーマットをみると書き換えなければならないのは以下です。 | 先頭からのオフセット | 書き換えるバイト数 | 内容 | | --- | --- | --- | | 0x04 | 4 | ファイル全体のサイズ(byte)-8 (A) | | 0x18 | 4 | サンプリング周波数=>2000にするなら0xD0 0x07 0x00 0x00 | | 0x1C | 4 | データ速度 (Byte/sec)=>2000 x 1bytes/sample x 1channel=0xD0 0x07 0x00 0x00 | | 0x28 | 4 | 波形データ部分の全サイズ(byte) (B) | | 0x2C | N | これ以降は2000Hzの波形データをこしらえて詰める(C) | 元のファイルがサンプリングレート8000Hzだとすると、とりあえずそれを単純に間引きして(C)のデータを作れます。つまり元の(C)の部分にあるデータを1バイトそのまま新ファイルへ出力し、3バイトをスキップして、・・・の繰り返しですね。(4バイトごとの平均を取ってもいいと思います) なお、(C)がNバイトだとすると(B)にはNが、(A)にはN+0x2C-8が入ります(リトルエンディアンで格納することに注意) もし望みのソフトが見つからない場合はこんな方法も可能ということでコメントしてみました。