1

wavファイルを単純なcdoubleまたはint配列に変換して、新しいwavファイルに戻すことはできますか?wavファイルでcフィルターを使用したい。私はラメでそれが可能であることを赤くします。しかし、私は方法がわかりません。誰かがドキュメントやコードスニペットをリンクできますか?どのように使用できますか?

wavファイル->配列->いくつかの操作->wavファイル

回答ありがとうございます。

4

2 に答える 2

3

これはラメとは何の関係もありません。Lameは、MP3ファイルをエンコードするためのツールです。

WAVファイルを読み書きするためのライブラリはたくさんあります。独自に作成することもできますが、WAVファイルには8ビット、16ビット、24ビット、浮動小数点、ADPCM、µlawなどのさまざまなサンプル形式があるため、これは不便です。

libsndfileを使用してWAVファイルを読み取ることができます。

WAVファイルのフィールドには固定オフセットがありません

これが太字で大きい理由は、多くの人がWAVファイルのデータは常に44バイトで始まると考えているためです。これは単に真実ではありません。WAVファイルはRIFFファイルであり、任意の数のデータチャンクを含めることができ、そのうちの1つ以上にサンプルデータが含まれます。難解なWAVファイルを処理できないことは許されますが、ファイル内のデータの場所を推測すると、ゴミになってしまう可能性があります。

于 2012-12-01T11:59:42.717 に答える
0

はい、可能です。Wav形式は非常によく指定されており、通常は16ビットサンプルの2チャンネルを使用します。これらは、整数、浮動小数点数、倍精度浮動小数点数の両方として正確に表すことができます。

コメントでsimoncが言っているように、典型的な形式は非常に単純なので、ライブラリを使用して学ぶのに実際にはお金がかかりません。WAVの長さが変わらない場合、変換/フィルタリングは次の方法で簡単に実行できます。

fread(header,1,44,in_file); fwrite(header,1,44,out_file);
short int block[1024];  // left and right channel will be interleaved.
while (c=fread(block, 2, 1024, fp))
{  
    filter_in_place(block,c); 
    fwrite(block, 2,c, out_file);
}
于 2012-12-01T12:05:14.497 に答える