「PCMにWAVヘッダを付ける」では、WAVヘッダを紹介しました。
WAVフォーマット(*.wav)は、 ファイルコンテナの一種で音源データを格納するファイル形式ですが、手っ取り早く リニアPCMにWAVヘッダを付けるだけでもWAVファイルとして扱うことが出来ます。
WAVファイルはファイルコンテナ
ファイルコンテナの例としては、WAVフォーマットの他にAIFFがあります(オーディオファイルについてはこちら)。
形式 | ファイルコンテナ | 備考 |
---|---|---|
WAV | Wave File Format (RIFF waveform Audio Format) | Windows |
AIFF | Audio Interchange File Format | Mac OS |
「PCMにWAVヘッダを付ける」では16kHzモノラルでした。 サンプリング周波数16kHzは音声を目的としたものでしたが、音楽では 44.1kHzや48kHzのステレオが一般的で、PCMの波形を見る時いちいちサンプリング周波数や、ビット数、チャネル数を指定するのはめんどくさいので、 リニアPCM16ビット、サンプリング周波数48kHzステレオのWAVヘッダを用意してみました。
サンプルコード【C言語】(リニアPCM16ビット、サンプリング周波数48kHz、ステレオ)
#define WAV_HEADER_SIZE 44
// リニアPCM16ビット、サンプリング周波数48kHz(ステレオ) char wav_header_template[WAV_HEADER_SIZE] = { 0x52, 0x49, 0x46, 0x46, // 'RIFF' 0x00, 0x00, 0x00, 0x00, // RIFFチャンクのサイズ(size + 12 + 16 + 8) 0x57, 0x41, 0x56, 0x45, // 'WAVE' 0x66, 0x6D, 0x74, 0x20, // 'fmt' 0x10, 0x00, 0x00, 0x00, // fmtチャンクのバイト数 = 16(リニアPCM) 0x01, 0x00, // フォーマット = 1(非圧縮PCM) 0x02, 0x00, // チャネル数 = 2 (ステレオ) 0x80, 0xBB, 0x00, 0x00, // サンプリング周波数 = 48000 0x00, 0x77, 0x01, 0x00, // バイト/秒 = 96000 0x04, 0x00, // ブロックサイズ = 16bit x 2(ステレオ) = 4byte 0x10, 0x00, // ビット/サンプル = 16 0x64, 0x61, 0x74, 0x61, // 'data' 0x00, 0x00, 0x00, 0x00 // size (データバイト数) };
サンプリング周波数16kHzモノラルはこちら。
AudacityでWAVファイルを読み込み
例えばAudacityで音源ファイルを読み込む時、 *.pcmを開こうとすると、「ファイルの取り込み時にエラーが発生しました」となり失敗します。*.pcm の場合は、 【ファイル】➞【取り込み】➞【ロー (Raw) データの取り込み】という手順になりますが、*.wavではこの手順がなくなります。
Audacityについてはこちら