wavファイルを単純なcdoubleまたはint配列に変換して、新しいwavファイルに戻すことはできますか?wavファイルでcフィルターを使用したい。私はラメでそれが可能であることを赤くします。しかし、私は方法がわかりません。誰かがドキュメントやコードスニペットをリンクできますか?どのように使用できますか?
wavファイル->配列->いくつかの操作->wavファイル
回答ありがとうございます。
これはラメとは何の関係もありません。Lameは、MP3ファイルをエンコードするためのツールです。
WAVファイルを読み書きするためのライブラリはたくさんあります。独自に作成することもできますが、WAVファイルには8ビット、16ビット、24ビット、浮動小数点、ADPCM、µlawなどのさまざまなサンプル形式があるため、これは不便です。
libsndfileを使用してWAVファイルを読み取ることができます。
これが太字で大きい理由は、多くの人がWAVファイルのデータは常に44バイトで始まると考えているためです。これは単に真実ではありません。WAVファイルはRIFFファイルであり、任意の数のデータチャンクを含めることができ、そのうちの1つ以上にサンプルデータが含まれます。難解なWAVファイルを処理できないことは許されますが、ファイル内のデータの場所を推測すると、ゴミになってしまう可能性があります。
はい、可能です。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);
}