データを.wavファイルのバイト配列に格納する場合、これらの値はどういう意味ですか?それらが2バイト表現であると読みましたが、これらの2バイト値には正確に何が含まれていますか?
6 に答える
オーディオ信号はある種の波で表されると聞いたことがあるでしょう。線が上下するこの波形図を見たことがあるなら、それは基本的にそれらのファイルの中にあるものです。http://en.wikipedia.org/wiki/Sampling_rateからこのファイルの写真を見てください。
音声波形 (灰色の線) が表示されます。その波の電流値を繰り返し測定し、数値として与えます。それはそれらのバイトの数字です。これで調整できることが 2 つあります。もう1つの調整は、測定の正確さです。2 バイトの場合、1 回の測定で 2 バイトを使用します (通常は -32768 から 32767 の値です)。そこに与えられた数値を使用して、元のウェーブを再作成できます (もちろん、制限された品質までですが、デジタルにデータを保存する場合は常にそうなります)。元の波形を再現することは、スピーカーが再生時にやろうとしていることです。
さらに知っておくべきことがいくつかあります。まず、これは 2 バイトであるため、数値を正しく再作成するには、バイト順 (ビッグ エンディアン、リトル エンディアン) を知る必要があります。次に、チャンネルの数と、それらがどのように保存されているかを知る必要があります。通常、モノラル (1 チャンネル) またはステレオ (2 チャンネル) を使用しますが、それ以上も可能です。複数のチャンネルがある場合は、それらがどのように保存されているかを知る必要があります。多くの場合、それらをインターリーブします。つまり、すべての時点でチャネルごとに 1 つの値を取得し、その後、次の時点ですべての値を取得します。
説明するために: 2 つのチャネルと 16 ビットの数値に対して 8 バイトのデータがある場合:
abcdefgh
ここでa
とb
は、チャネル 1 の最初の値である最初の 16 ビット数値を構成し、チャネル 2 の最初の数値になります。とc
は、チャネル 1 の 2 番目の値であり、チャネル 2 の 2 番目の値です。あまり聞こえません。それは1秒のデータに近づかないためです...d
e
f
g
h
持っているすべての情報をまとめると、持っているビット レートを計算できます。これは、1 秒あたりにレコーダーによって生成される情報のビット数です。この例では、すべてのサンプルでチャネルごとに 2 バイトを生成します。2 チャネルの場合、4 バイトになります。人間が通常聞くことができる音を表すには、毎秒約 44000 サンプルが必要です。したがって、1 秒あたり 176000 バイト、つまり 1 秒あたり 1408000 ビットになります。
もちろん、これは 2 ビット値ではなく、2 バイト値が 2 つある場合、品質が非常に悪くなります。
ここで説明されているように、最初の 44 バイトは通常、標準の RIFF ヘッダー です。 .html
Apple/OSX/macOS/iOS で作成された .wav ファイルは、ヘッダーに「FLLR」パディング チャンクを追加し、最初のヘッダー RIFF のサイズを 44 バイトから 4k バイトに増やす可能性があります (おそらく、raw ファイルのディスクまたはストレージ ブロックの配置を改善するため)。サンプルデータ)。
残りは非常に多くの場合、符号付き 2 の補数リトルエンディアン形式の 16 ビット リニア PCM であり、44100 Hz のレートで任意にスケーリングされたサンプルを表します。
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からこれらすべてをコピーしました
あなたの質問は、「.wav ファイルのデータ ブロックのバイトは何を表しているのですか?」だと思います。体系的にすべてをお知らせください。
プレリュード: あるデバイスを使用して 5KHz の正弦波を再生し、それを 'sine.wav' というファイルに記録するとします。記録は 1 つのチャネル (モノラル) で行われます。これで、そのファイルのヘッダーが何を表しているかがわかります。いくつかの重要な定義を見てみましょう。
- サンプル: 任意の信号のサンプルとは、サンプルが取得された時点でのその信号の振幅を意味します。
- サンプリング レート: このようなサンプルの多くは、一定の時間内に取得できます。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
2 ビット オーディオはあまり良い音にはなりません :) 最も一般的には、44.1kHz などの周波数でサンプリングされたオーディオ波形を表す 16 ビットの符号付き数値としてサンプル値を表します。