私はこれを行いました:
me@riverbrain:~/sgf$ echo "test" | text2wave -otype raw -F 16000 >> test.raw
これにより、ヘッダーのないオーディオファイルが生成されました。このファイルの素晴らしい点は、別の生のオーディオファイルと(テキストのようにcat
を使用して)連結できることです。
もちろん、私には問題があります。問題は、まだプレイできないことです。
me@riverbrain:~/sgf$ play test.raw
play FAIL formats: bad input format for file `test.raw': sampling rate was not specified
また、サンプルレートを指定する場合
me@riverbrain:~/sgf$ play -r 16000 test.raw
play FAIL formats: bad input format for file `test.raw': data encoding was not specified
「エンコーディング」の情報を調べたところ、プロセッサアーキテクチャと関係があると感じましたが、私は間違っているかもしれません。とにかく、生のオーディオファイルのデータエンコーディングが何であるかをコンピューターに「尋ねる」方法に関するドキュメントは見つかりません。自分で設定しているため、サンプルレートもわかりますが、それは可能な範囲です。
異なる場合がありますが、少なくとも私にとって、text2waveは1チャネル、16ビット、符号付き整数PCMを生成します。これらはかなり正常であり、正しい場合は非常に明確になります(たとえば、誤って符号なし整数に署名すると、非常に歪んだサウンドが得られます)。
Playでは、次のようになります。
play -r 16000 -b 16 -c 1 -e signed-integer /tmp/foo.raw
play -r 16000 -2 -s -c 1 /tmp/foo.raw # obsolete way for older versions of Sox
これらのパラメータは、フェスティバルのどこかで設定されていると思います。それらの一部もハードコードされている場合があります。
アーキテクチャに依存する可能性があるのは、ビッグエンディアンとリトルエンディアンだけです。私のリトルエンディアンマシンでは、フェスティバルはリトルエンディアンを書いています。そのファイルをビッグエンディアンのマシンに移動した場合、-L
を追加する必要があるでしょう。 text2wav
がビッグエンディアンのマシンで実行された場合、ビッグエンディアンまたはリトルエンディアンのどちらのデータを書き込むかはわかりません。
おそらく、独自のRIFFヘッダーを作成できます。少しバッシングするとそれができるはずです..そして他の部分にヘッダーをキャットするだけです...
このリンクはヘッダーのレイアウトを示しています: Canonical WAVEファイル形式
SOにも関連リンクがあります: スクリプトを使用してRAWオーディオデータをWAVに変換します が、mplayer/mencoderの回答のマークアップ数はゼロです。ただし、 SoX が機能することを意味します。
SoX は上記の両方のリンクで言及されており、Ubuntuのリポジトリで利用できます。他にもあると思います。
PS ...私はplay
を使ってみました(それが存在することを知りませんでした)、それがSoXであることがわかりました! ... SOリンクは例を示します。ここにコピーします:sox -r 44100 -e unsigned -b 8 -c 1 <RAW_FILE> <TARGET_FILE>
soxで動作しない場合は、mplayer/mencoderまたはRIFFヘッダーでうまくいきます。
aplay
の代わりにplay
を使用してrawファイルを再生します。これにより、-tスイッチでrawオーディオであることを指定できます。
aplay -q -c 2 -t raw -f s16 test.raw