WAVファイルのリニアPC、μ-law/A-law 等の判別方法

コールセンター等では、ほとんどがリニアPCMのWav音声ファイルとして保存されています。
これをμ-lawに変更したい場合等は、音声ファイルのフォーマットをチェックする必要があります。


まずは、WAVE (.WAV) ファイルのフォーマットを確認しましょう。通常は以下のような構造になっています。(チャンクやRIFF等がよく分からない人はこちらを先にどうぞ)

WAVファイルデータフォーマット例

項目 サイズ (byte) データ部
チャンク識別子 4 “RIFF”(0x52494646)で固定。
チャンク サイズ 4 ファイル全体サイズからRIFFとWAVEのバイト数(8Byte)を引いた数
フォーマット 4 WAVファイルの場合は“WAVE”(0x57415645)で固定。AVIファイルの場合は“AVI”が入る
サブチャンク①識別子 4 “fmt “(0x666D7420)で固定。
サブチャンク①サイズ 4 16 + 拡張パラメータのサイズ。デフォルト値は16
音声フォーマット 2 非圧縮のPCMフォーマットは1。A-lawは6、μ-lawは7。それ以外はこちらを参照。
チャンネル数 2 モノラルは1、ステレオは2
サンプリング周波数 4 8kHzの場合は8000、44.1kHzの場合なら44100
1 秒あたりバイト数の平均 4 サンプリング周波数 * ブロックサイズで求める
ブロックサイズ 2 チャンネル数 * 1サンプルあたりのビット数 / 8で求める。ステレオ16bitなら16bit*2 = 32bit = 4byte
ビット/サンプル 2 1サンプルに必要なビット数。8ビットの場合は8、16ビットの場合は16など。
拡張パラメータのサイズ (2) リニア PCM (音声フォーマットが1) の場合は未使用。
拡張パラメータ (*) リニア PCM (音声フォーマットが1) の場合は未使用。
サブチャンク② 識別子 4 “data” (0x64617461)で固定。
サブチャンク② サイズ 4 波形データのバイト数(総ファイルサイズ – 126)
データ * 波形データを格納。リニアPCMの場合は時間順に格納される。ステレオは左→右→左→右…のように格納される。8ビットの場合は符号無し整数 (0 – 255)、16ビットの場合は符号付き整数 (-32768 – 32767) で表わす。

リニアPCM/μ-law/A-law 等の判別方法は簡単です。上記項目にある音声ファイルフォーマットのチェックを行うだけです。

  • 音声フォーマット=0x0001 ⇒ リニアPCM
  • 音声フォーマット=0x0006 ⇒ A-law
  • 音声フォーマット=0x0007 ⇒ μ-law

弊社では、C言語と.NETで書かれたサンプルソースがありますが、判別するぐらいでしたらそんなの難しくありません。ですので皆さんも少し頑張ってチェックしてみましょう。その他の代表的な音声ファイルフォーマットを以下にまとめておきます。

音声フォーマット 判別内容
Unknown 0x0000
PCM(Pulse Code Modulation) 0x0001
MS ADPCM 0x0002
IBM CSVD 0x0005
G.711 A-Law(ITU-T G.711) 0x0006
G.711 μ-Law(ITU-T G.711) 0x0007
OKI ADPCM 0x0010
IMA-ADPCM(DVI-ADPCM) 0x0011
MediaSpace ADPCM 0x0012
Sierra ADPCM 0x0013
ADPCM (ITU-T G.723) 0x0014
DIGISTD 0x0015
DIGIFIX 0x0016
YAMAHA ADPCM 0x0020
SONARC 0x0021
TrueSpeech 0x0022
Echo Speech1 0x0023
AF36(AudioFile) 0x0024
Apix 0x0025
AF10(AudioFile) 0x0026
AC2(Dolby) 0x0030
GSM 6.10 0x0031
ANTEX ADPCM 0x0033
VQLPC(Control Resources) 0x0034
DIGIREAL 0x0035
DIGIADPCM 0x0036
CR10(Control Resources) 0x0037
ADPCM(G.721) 0x0040
IBM μ-Law 0x0101
IBM A-Law 0x0102
IBM ADPCM 0x0103
Creative Labs ADPCM 0x0200
FM TOWNS 0x0300
Olivetti GSM 0x1000
Olivetti ADPCM 0x1001
Olivetti CELP 0x1002
Olivetti SBC 0x1003
Olivetti OPR 0x1004