web-dev-qa-db-ja.com

生の(ヘッダーのない)オーディオファイルのエンコーディングは何ですか?

私はこれを行いました:

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

「エンコーディング」の情報を調べたところ、プロセッサアーキテクチャと関係があると感じましたが、私は間違っているかもしれません。とにかく、生のオーディオファイルのデータエンコーディングが何であるかをコンピューターに「尋ねる」方法に関するドキュメントは見つかりません。自分で設定しているため、サンプルレートもわかりますが、それは可能な範囲です。

8
ixtmixilix

異なる場合がありますが、少なくとも私にとって、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がビッグエンディアンのマシンで実行された場合、ビッグエンディアンまたはリトルエンディアンのどちらのデータを書き込むかはわかりません。

8
derobert

おそらく、独自の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ヘッダーでうまくいきます。

2
Peter.O

aplayの代わりにplayを使用してrawファイルを再生します。これにより、-tスイッチでrawオーディオであることを指定できます。

aplay -q -c 2 -t raw -f s16 test.raw
2
neuron34