46

データを.wavファイルのバイト配列に格納する場合、これらの値はどういう意味ですか?それらが2バイト表現であると読みましたが、これらの2バイト値には正確に何が含まれていますか?

4

6 に答える 6

70

オーディオ信号はある種の波で表されると聞いたことがあるでしょう。線が上下するこの波形図を見たことがあるなら、それは基本的にそれらのファイルの中にあるものです。http://en.wikipedia.org/wiki/Sampling_rateからこのファイルの写真を見てください。

サンプリング

音声波形 (灰色の線) が表示されます。その波の電流値を繰り返し測定し、数値として与えます。それはそれらのバイトの数字です。これで調整できることが 2 つあります。もう1つの調整は、測定の正確さです。2 バイトの場合、1 回の測定で 2 バイトを使用します (通常は -32768 から 32767 の値です)。そこに与えられた数値を使用して、元のウェーブを再作成できます (もちろん、制限された品質までですが、デジタルにデータを保存する場合は常にそうなります)。元の波形を再現することは、スピーカーが再生時にやろうとしていることです。

さらに知っておくべきことがいくつかあります。まず、これは 2 バイトであるため、数値を正しく再作成するには、バイト順 (ビッグ エンディアン、リトル エンディアン) を知る必要があります。次に、チャンネルの数と、それらがどのように保存されているかを知る必要があります。通常、モノラル (1 チャンネル) またはステレオ (2 チャンネル) を使用しますが、それ以上も可能です。複数のチャンネルがある場合は、それらがどのように保存されているかを知る必要があります。多くの場合、それらをインターリーブします。つまり、すべての時点でチャネルごとに 1 つの値を取得し、その後、次の時点ですべての値を取得します。

説明するために: 2 つのチャネルと 16 ビットの数値に対して 8 バイトのデータがある場合:

abcdefgh

ここでabは、チャネル 1 の最初の値である最初の 16 ビット数値を構成し、チャネル 2 の最初の数値になります。とcは、チャネル 1 の 2 番目の値であり、チャネル 2 の 2 番目の値です。あまり聞こえません。それは1秒のデータに近づかないためです...defgh

持っているすべての情報をまとめると、持っているビット レートを計算できます。これは、1 秒あたりにレコーダーによって生成される情報のビット数です。この例では、すべてのサンプルでチャネルごとに 2 バイトを生成します。2 チャネルの場合、4 バイトになります。人間が通常聞くことができる音を表すには、毎秒約 44000 サンプルが必要です。したがって、1 秒あたり 176000 バイト、つまり 1 秒あたり 1408000 ビットになります。

もちろん、これは 2 ビット値ではなく、2 バイト値が 2 つある場合、品質が非常に悪くなります。

于 2012-10-24T16:41:52.013 に答える
19

ここで説明されているように、最初の 44 バイトは通常、標準の RIFF ヘッダー です。 .html

Apple/OSX/macOS/iOS で作成された .wav ファイルは、ヘッダーに「FLLR」パディング チャンクを追加し、最初のヘッダー RIFF のサイズを 44 バイトから 4k バイトに増やす可能性があります (おそらく、raw ファイルのディスクまたはストレージ ブロックの配置を改善するため)。サンプルデータ)。

残りは非常に多くの場合、符号付き 2 の補数リトルエンディアン形式の 16 ビット リニア PCM であり、44100 Hz のレートで任意にスケーリングされたサンプルを表します。

Wave ファイル形式

于 2012-10-24T22:54:38.283 に答える
14

WAVE (.wav) ファイルには、オーディオ ファイルのデータのフォーマット情報を示すヘッダーが含まれています。ヘッダーの後には、実際のオーディオ生データが続きます。以下で正確な意味を確認できます。

Positions  Typical Value Description

1 - 4      "RIFF"        Marks the file as a RIFF multimedia file.
                         Characters are each 1 byte long.

5 - 8      (integer)     The overall file size in bytes (32-bit integer)
                         minus 8 bytes. Typically, you'd fill this in after
                         file creation is complete.

9 - 12     "WAVE"        RIFF file format header. For our purposes, it
                         always equals "WAVE".

13-16      "fmt "        Format sub-chunk marker. Includes trailing null.

17-20      16            Length of the rest of the format sub-chunk below.

21-22      1             Audio format code, a 2 byte (16 bit) integer. 
                         1 = PCM (pulse code modulation).

23-24      2             Number of channels as a 2 byte (16 bit) integer.
                         1 = mono, 2 = stereo, etc.

25-28      44100         Sample rate as a 4 byte (32 bit) integer. Common
                         values are 44100 (CD), 48000 (DAT). Sample rate =
                         number of samples per second, or Hertz.

29-32      176400        (SampleRate * BitsPerSample * Channels) / 8
                         This is the Byte rate.

33-34      4             (BitsPerSample * Channels) / 8
                         1 = 8 bit mono, 2 = 8 bit stereo or 16 bit mono, 4
                         = 16 bit stereo.

35-36      16            Bits per sample. 

37-40      "data"        Data sub-chunk header. Marks the beginning of the
                         raw data section.

41-44      (integer)     The number of bytes of the data section below this
                         point. Also equal to (#ofSamples * #ofChannels *
                         BitsPerSample) / 8

45+                      The raw audio data.            

http://www.topherlee.com/software/pcm-tut-wavformat.htmlからこれらすべてをコピーしました

于 2012-10-24T00:31:05.633 に答える
5

あなたの質問は、「.wav ファイルのデータ ブロックのバイトは何を表しているのですか?」だと思います。体系的にすべてをお知らせください。
プレリュード: あるデバイスを使用して 5KHz の正弦波を再生し、それを 'sine.wav' というファイルに記録するとします。記録は 1 つのチャネル (モノラル) で行われます。これで、そのファイルのヘッダーが何を表しているかがわかります。いくつかの重要な定義を見てみましょう。

  • サンプル: 任意の信号のサンプルとは、サンプルが取得された時点でのその信号の振幅を意味します。t=1.23 でのサンプルは、振幅が 0.94 の場合に取得されます。 したがって、サンプル値は 0.94 です。
  • サンプリング レート: このようなサンプルの多くは、一定の時間内に取得できます。1 秒以内に正弦波のサンプルを 10 個取得するとします。各サンプルの間隔は 0.1 秒です。したがって、1 秒あたり 10 個のサンプルがあるため、サンプリング レートは 10Hz です。ヘッダーの 25 番目から 28 番目のバイトは、サンプリング レートを示します。


あなたの質問の答えになります
。正弦波には無限の点があるため、正弦波全体をファイルに書き込むことは実際には不可能です。代わりに、サンプリング レートを固定し、それらの間隔で波のサンプリングを開始し、振幅を記録します。(サンプリング レートは、取得するサンプルを使用して、最小の歪みで信号を再構成できるように選択されます。不十分な数のサンプルによる再構成された信号の歪みは、「エイリアシング」と呼ばれます。)
エイリアシングを回避するには、サンプリング レートは、正弦波の周波数 (5kHz) の 2 倍以上になるように選択されています (これは「サンプリング定理」と呼ばれます)。周波数の 2 倍のレートは「ナイキスト レート」と呼ばれます)。したがって、12kHz のサンプリング レートを使用することにします。これは、1 秒間に 12000 回、正弦波をサンプリングすることを意味します。
録音を開始したら、周波数 5kHz の正弦波である信号を録音すると、12000*5 サンプル (値) になります。これらの 60000 個の値を取得して、配列に入れます。次に、メタデータを反映する適切なヘッダーを作成し、10 進数で記録したこれらのサンプルを 16 進数に変換します。これらの値は、.wav ファイルのデータ バイトに書き込まれます。

にプロットされたプロット: http://fooplot.com

于 2019-06-10T19:38:02.267 に答える
3

2 ビット オーディオはあまり良い音にはなりません :) 最も一般的には、44.1kHz などの周波数でサンプリングされたオーディオ波形を表す 16 ビットの符号付き数値としてサンプル値を表します。

于 2012-10-23T21:52:07.090 に答える