2016-05-18 24 views
2

Cでは、Libsndfileライブラリを使用してwavファイルの値を読み込んで、後で計算を行うことができます。ファイルの出力を取得したときに、これらの数値の意味がわかりません。なぜ数百万の数字がありますか?最初はHzだと思っていましたが、それは私の心には意味がありませんでした。 wavファイルに関する情報を以下に示します。その下では、関数sf_read_int()を使って値をメモリに書き出しています。wavファイルの値

sf_read_int()は何をしますか?これはLibsndfileがのAPIドキュメントから得た:

  • ファイル書き込み項目関数は、アレイ内のデータがファイルにPTRによって指さ書き込みます。 itemsパラメータはチャネル数の整数積でなければなりません。そうしないと、エラーが発生します。

    Suspected values of the wav file

enter image description hereは私がグラフ上にこれらの巨大な値の一部をプロットすることを決定し、そしてそれはwavファイルがどのように見えるかと非常によく似ています(私は大胆にインポートした場合とズーム特定の場所で、私はこれを見るだろう)。示された値はグラフ上の同じ値ではないことに注意してください。ランダムな時点で値をサンプリングしました。 本当の質問は、なぜこれらの値が(何百万という)非常に大きいのでしょうか?そして彼らは何を表していますか? limits.hで(?彼らはバイト)

enter image description here

+0

ファイルにはどのようなサンプル形式が含まれていますか?彼らは浮きかもしれない? – cleblanc

+0

私はあなたに正直になるだろう、私はそれを確認する方法がわからない。私は単純なmp3をwavファイルにオンラインで変換し、それをファイルとして使用しました。私がsf_read_float()を試しても、私の出力はすべて0です。 – VedhaR

+0

http://soundfile.sapp.org/doc/WaveFormat/ – KevinDTimm

答えて

3

あなたはおそらく(他のものの間で)2つのこのような定義を見つけることができます:-2147483648と2147483647の間小数範囲に対応

#define INT_MAX 0x7FFFFFFF 
#define INT_MIN 0x80000000 

を。マニュアル Libsndfileが

は言う:

sf_count_t sf_read_int(SNDFILE *sndfile, int *ptr, sf_count_t items); 

つまり、サウンドファイルの内容をの整数の値がint *ptrになるように読み込みます。どちらの値がINT_MININT_MAXの間にあるかは、正当な値です。 libsndfile APIでは、呼び出し元プログラムで使用されるデータ型とファイルのデータ形式が同じである必要はありません。

また、サウンドファイルには「周波数」というものはありません。リニアPCMファイルは、生のサンプルデータの前にヘッダーが付いていますが、 "frequency"は数学的抽象または解析結果です。

これは、あなたの興味があるかもしれない:

(例えば16ビットのPCMエンコードされたWAVファイルを読むためにsf_read_int()を使用して)異なるサイズの整数PCMフォーマット間の変換Libsndfileが一つの単純なルールに従うとき:

整数データをあるサイズのコンテナから別のサイズのコンテナに移動するときはいつでも、ソースコンテナの最上位ビットがデスティネーションコンテナの最上位ビットになります。

特に、明確に書かれている場合は、マニュアルをよくお読みください。