WAV
読み:ウェーブ
外語:WAV: WAVe

 Microsoft Windows標準の音声データ用コンテナーフォーマットで、オーディオフォーマットの代表的なもの。
 ファイルの拡張子がWAVであることから、WAVファイル、あるいは単にWAVと呼ばれている。
目次

概要
 正式には「RIFF waveform Audio Format」といい、MicrosoftとIBMにより開発され、特許をもつ規格である。
 Microsoft WindowsOS/2で採用されて以降、その普及とともに一般化し、今に至っている。
 この規格をWindowsで最初に採用したのは、Windows 3.0 with Multimedia Extensionsであり、音声再生に一切対応していなかったWindowsにマルチメディア機能を追加する製品であった。同様の技術を用いた動画データ用のフォーマットはAVIである。

特徴

コーデック
 初期には、無圧縮PCMとADPCMなど幾つかの簡単な圧縮にしか対応していなかったが、後に様々な音声コーデックが登場し、利用できるようになった。
 現在では、mp3形式のデータをWAVファイルに格納することも可能である。
 格納フォーマットの番号は16ビットの数値であり、この番号さえ取得できれば理論上どんな形式でも格納可能。但し、どこに問い合わせれば番号が貰えるのかは全く不明である。

形式
 技術的には、ファイル形式はAVIと同様にRIFFになっている。AVIファイルの音声だけのもの、とも考えられる。
 WAVファイルはRIFFチャンク形式なので、汎用性が高く、様々な情報を同時に格納することができる。
 工夫すれば複数の音楽ファイルを一つのWAVファイル内に格納することも理論上可能だが、そのようには使われていない。事実上格納可能なデータは一つ(一曲)だけである。

構造
 ファイルは、フォーマット部(fmt)、全サンプル数(fact)、波形データ(data)、コメント情報(LIST)、などのチャンクで構成される。
 WAVファイルとして成立させるには最低限、fmtチャンクとdataチャンクがあれば良い。
 RIFF形式の識別子は「RIFF」、種類を表わす識別子は「WAVE」である。
 データ部は、ステレオならLRLR…の順に格納する。データは無符号8ビットまたは符号付き16ビットであり、16ビット時のバイトオーダーはリトルエンディアンである。

技術

ファイル構造
 基本的なファイル構造は次の通り。
 WAVファイルとして最低限必要なのは、サンプリングレートなどの情報を格納するfmtチャンクと、実際の波形情報を格納するdataチャンクのみである。
 fmtチャンクの大きさや構成は使用するフォーマット(圧縮などの種類)により変わり、dataチャンクの大きさはそれに加えて音響の長さにより変わる。
 RIFFヘッダー内に全体のファイルサイズを書く必要があるが、これが32ビットであるため、ファイルの最大サイズは4Giバイトということになる。

ファイルヘッダー
 最もシンプルな場合の、WAVのファイルヘッダーは、次のような構造をとる。
 2バイト/4バイトの各値は、リトルエンディアンで格納される。
バイト数内容説明補足
4'R' 'I' 'F' 'F'RIFFヘッダー 
4これ以降のサイズ ファイルサイズ-8
4'W' 'A' 'V' 'E' RIFFがWAVEであることを表わす
fmtチャンク
4'f' 'm' 't' ' 'fmtチャンク4文字目は空白文字。これ以降フォーマット情報
4チャンクサイズ リニアPCMなら16である
2フォーマットID リニアPCMなら1である(一覧は後述)
2チャンネル数 モノラルは1、ステレオは2
4サンプリングレートHz単位44.1kHzなら44100
4データ速度バイト/秒44.1kHz/16ビット/ステレオなら44100×2×2=176400
2ブロックサイズバイト/サンプル×チャンネル16ビット/ステレオなら2×2=4
2ビットレートビット/サンプル8ビットなら8、16ビットなら16、GSMなどでは常に0
2拡張領域のサイズ チャンクサイズが18以上なら存在する
n拡張領域 リニアPCMなら存在しない
dataチャンク
4'd' 'a' 't' 'a'dataチャンクこれ以降波形情報
4チャンクサイズ 波形情報のバイト数
n波形情報  
 fmtチャンクの8番目の項目、ビットレートは、ビット/サンプルの値が格納される。例えば、WAVE_FORMAT_PCM(リニアPCM)であれば8ビットなら8、16ビットなら16が格納され、WAVE_FORMAT_MULAW(μ-Law)なら常に8である。さらに、WAVE_FORMAT_GSM610(GSM 6.10)の場合は常に0が格納される。
 このように0が格納されることもあるため、8や16が格納されることを前提としているとバグを発生させる。例えばAndroid 5.0ではこれが0になることを想定しないコードが追加されたため、GSM 6.10のWAVを再生すると0除算例外(SIGFPE)が発生するという、不具合修正と称する不具合「Fix WAVExtractor to output full audio frames only」が存在した。なおこの残念なバグは「Fix GSM WAV playback」としてAndroid 5.1で無事に修正されている。

dataチャンク
 波形情報を格納するチャンクである。

フォーマットID
 WAVは、格納する波形情報の種類を、16ビットの数値で表わす。
 Microsoft Visual C++なら、MMReg.hをincludeすることでラベルが使用できるようになる。
 今となってはobsolete(破棄)されたものも多い。
番号名前内容
0x0000WAVE_FORMAT_UNKNOWN未知のフォーマット
0x0001WAVE_FORMAT_PCMリニアPCM
0x0002WAVE_FORMAT_ADPCMMicrosoft ADPCM
0x0003WAVE_FORMAT_IEEE_FLOATIEEE Float
0x0004WAVE_FORMAT_VSELPCompaq VSELP
0x0005WAVE_FORMAT_IBM_CVSDIBM CVSD
0x0006WAVE_FORMAT_ALAWA-Law
0x0007WAVE_FORMAT_MULAWμ-Law
0x0008WAVE_FORMAT_DTS 
0x0009WAVE_FORMAT_DRM 
0x000AWAVE_FORMAT_WMAVOICE9 
0x000BWAVE_FORMAT_WMAVOICE10 
0x0010WAVE_FORMAT_OKI_ADPCMOKI ADPCM
0x0011WAVE_FORMAT_DVI_ADPCMIntel DVI ADPCM
WAVE_FORMAT_IMA_ADPCMMicrosoft IMA ADPCM
0x0012WAVE_FORMAT_MEDIASPACE_ADPCMVideologic MediaSpace ADPCM
0x0013WAVE_FORMAT_SIERRA_ADPCMSierra ADPCM
0x0014WAVE_FORMAT_G723_ADPCMADPCM (G.723)
0x0015WAVE_FORMAT_DIGISTDDSP Solution DIGISTD
0x0016WAVE_FORMAT_DIGIFIXDSP Solution DIGIFIX
0x0017WAVE_FORMAT_DIALOGIC_OKI_ADPCMDialogic OKI ADPCM
0x0018WAVE_FORMAT_MEDIAVISION_ADPCMMediaVision ADPCM
0x0019WAVE_FORMAT_CU_CODECHewlett-Packard CU
0x0020WAVE_FORMAT_YAMAHA_ADPCMYAMAHA ADPCM
0x0021WAVE_FORMAT_SONARCSpeech Compression SONARC
0x0022WAVE_FORMAT_DSPGROUP_TRUESPEECHDSP Group True Speech
0x0023WAVE_FORMAT_ECHOSC1Echo Speech EchoSC1
0x0024WAVE_FORMAT_AUDIOFILE_AF36Audiofile AF36
0x0025WAVE_FORMAT_APTXAPTX
0x0026WAVE_FORMAT_AUDIOFILE_AF10AudioFile AF10
0x0027WAVE_FORMAT_PROSODY_1612Prosody 1612
0x0028WAVE_FORMAT_LRCLRC
0x0030WAVE_FORMAT_DOLBY_AC2Dolby AC2
0x0031WAVE_FORMAT_GSM610GSM 6.10
0x0032WAVE_FORMAT_MSNAUDIOMSNAudio
0x0033WAVE_FORMAT_ANTEX_ADPCMEAntex ADPCME
0x0034WAVE_FORMAT_CONTROL_RES_VQLPCControl Res VQLPC
0x0035WAVE_FORMAT_DIGIREALDigireal
0x0036WAVE_FORMAT_DIGIADPCMDigiADPCM
0x0037WAVE_FORMAT_CONTROL_RES_CR10Control Res CR10
0x0038WAVE_FORMAT_NMS_VBXADPCMNMS VBXADPCM
0x0039WAVE_FORMAT_CS_IMAADPCMRoland RDAC
0x003AWAVE_FORMAT_ECHOSC3EchoSC3
0x003BWAVE_FORMAT_ROCKWELL_ADPCMRockwell ADPCM
0x003CWAVE_FORMAT_ROCKWELL_DIGITALKRockwell Digit LK
0x003DWAVE_FORMAT_XEBECXebec
0x0040WAVE_FORMAT_G721_ADPCMAntex Electronics G.721
0x0041WAVE_FORMAT_G728_CELPG.728 CELP
0x0042WAVE_FORMAT_MSG723MSG723
0x0050WAVE_FORMAT_MPEGMPEG Layer 1,2
0x0052WAVE_FORMAT_RT24RT24
0x0053WAVE_FORMAT_PACPAC
0x0055WAVE_FORMAT_MPEGLAYER3MPEG Layer 3
0x0059WAVE_FORMAT_LUCENT_G723Cirrus
0x0060WAVE_FORMAT_CIRRUS 
0x0061WAVE_FORMAT_ESPCMESPCM
0x0062WAVE_FORMAT_VOXWAREVoxware (obsolete)
0x0063WAVE_FORMAT_CANOPUS_ATRACCanopus Atrac
0x0064WAVE_FORMAT_G726_ADPCMG.726 ADPCM
0x0065WAVE_FORMAT_G722_ADPCMG.722 ADPCM
0x0066WAVE_FORMAT_DSATDSAT
0x0067WAVE_FORMAT_DSAT_DISPLAYDSAT Display
0x0069WAVE_FORMAT_VOXWARE_BYTE_ALIGNEDVoxware Byte Aligned (obsolete)
0x0070WAVE_FORMAT_VOXWARE_AC8Voxware AC8 (obsolete)
0x0071WAVE_FORMAT_VOXWARE_AC10Voxware AC10 (obsolete)
0x0072WAVE_FORMAT_VOXWARE_AC16Voxware AC16 (obsolete)
0x0073WAVE_FORMAT_VOXWARE_AC20Voxware AC20 (obsolete)
0x0074WAVE_FORMAT_VOXWARE_RT24Voxware MetaVoice (obsolete)
0x0075WAVE_FORMAT_VOXWARE_RT29Voxware MetaSound (obsolete)
0x0076WAVE_FORMAT_VOXWARE_RT29HWVoxware RT29HW (obsolete)
0x0077WAVE_FORMAT_VOXWARE_VR12Voxware VR12 (obsolete)
0x0078WAVE_FORMAT_VOXWARE_VR18Voxware VR18 (obsolete)
0x0079WAVE_FORMAT_VOXWARE_TQ40Voxware TQ40 (obsolete)
0x0080WAVE_FORMAT_SOFTSOUNDSoftsound
0x0081WAVE_FORMAT_VOXWARE_TQ60Voxware TQ60 (obsolete)
0x0082WAVE_FORMAT_MSRT24MSRT24
0x0083WAVE_FORMAT_G729AG.729A
0x0084WAVE_FORMAT_MVI_MVI2MVI MV12
0x0085WAVE_FORMAT_DF_G726DF G.726
0x0086WAVE_FORMAT_DF_GSM610DF GSM610
0x0088WAVE_FORMAT_ISIAUDIOISIAudio
0x0089WAVE_FORMAT_ONLIVEOnlive
0x0091WAVE_FORMAT_SBC24SBC24
0x0092WAVE_FORMAT_DOLBY_AC3_SPDIFDolby AC3 SPDIF
0x0093WAVE_FORMAT_MEDIASONIC_G723 
0x0094WAVE_FORMAT_PROSODY_8KBPS 
0x0097WAVE_FORMAT_ZYXEL_ADPCMZyXEL ADPCM
0x0098WAVE_FORMAT_PHILIPS_LPCBBPhilips LPCBB
0x0099WAVE_FORMAT_PACKEDPacked
0x00A0WAVE_FORMAT_MALDEN_PHONYTALK 
0x00FFWAVE_FORMAT_RAW_AAC1 
0x0100WAVE_FORMAT_RHETOREX_ADPCMRhetorex ADPCM
0x0101WAVE_FORMAT_IRATBeCubed Software's IRAT
0x0111WAVE_FORMAT_VIVO_G723Vivo G.723
0x0112WAVE_FORMAT_VIVO_SIRENVivo Siren
0x0123WAVE_FORMAT_DIGITAL_G723Digital G.723
0x0125WAVE_FORMAT_SANYO_LD_ADPCM 
0x0130WAVE_FORMAT_SIPROLAB_ACEPLNET 
0x0131WAVE_FORMAT_SIPROLAB_ACELP4800 
0x0132WAVE_FORMAT_SIPROLAB_ACELP8V3 
0x0133WAVE_FORMAT_SIPROLAB_G729 
0x0134WAVE_FORMAT_SIPROLAB_G729A 
0x0135WAVE_FORMAT_SIPROLAB_KELVIN 
0x0140WAVE_FORMAT_G726ADPCM 
0x0150WAVE_FORMAT_QUALCOMM_PUREVOICE 
0x0151WAVE_FORMAT_QUALCOMM_HALFRATE 
0x0155WAVE_FORMAT_TUBGSM 
0x0160WAVE_FORMAT_MSAUDIO1 
0x0161WAVE_FORMAT_WMAUDIO2 
0x0162WAVE_FORMAT_WMAUDIO3 
0x0163WAVE_FORMAT_WMAUDIO_LOSSLESS 
0x0164WAVE_FORMAT_WMASPDIF 
0x0170WAVE_FORMAT_UNISYS_NAP_ADPCM 
0x0171WAVE_FORMAT_UNISYS_NAP_ULAW 
0x0172WAVE_FORMAT_UNISYS_NAP_ALAW 
0x0173WAVE_FORMAT_UNISYS_NAP_16K 
0x0200WAVE_FORMAT_CREATIVE_ADPCMCreative Labs ADPCM
0x0202WAVE_FORMAT_CREATIVE_FASTSPEECH8Creative FastSpeech8
0x0203WAVE_FORMAT_CREATIVE_FASTSPEECH10Creative FastSpeech10
0x0210WAVE_FORMAT_UHER_ADPCMCreative ADPCM
0x0220WAVE_FORMAT_QUARTERDECKQuarterdeck
0x0230WAVE_FORMAT_ILINK_VC 
0x0240WAVE_FORMAT_RAW_SPORT 
0x0241WAVE_FORMAT_ESST_AC3 
0x0249WAVE_FORMAT_GENERIC_PASSTHRU 
0x0250WAVE_FORMAT_IPI_HSX 
0x0251WAVE_FORMAT_IPI_RPELP 
0x0260WAVE_FORMAT_CS2 
0x0270WAVE_FORMAT_SONY_SCX 
0x0300WAVE_FORMAT_FM_TOWNS_SNDFM TOWNS SND
0x0400WAVE_FORMAT_BTV_DIGITALBTV Digital
0x0450WAVE_FORMAT_QDESIGN_MUSIC 
0x0680WAVE_FORMAT_VME_VMPCMVME VMPCM
0x0681WAVE_FORMAT_TPC 
0x1000WAVE_FORMAT_OLIGSMOlivetti GSM
0x1001WAVE_FORMAT_OLIADPCMOlivetti ADPCM
0x1002WAVE_FORMAT_OLICELPOlivetti CELP
0x1003WAVE_FORMAT_OLISBCOlivetti SBC
0x1004WAVE_FORMAT_OLIOPROlivetti OPR
0x1100WAVE_FORMAT_LH_CODECLH Codec
0x1400WAVE_FORMAT_NORRISNorris
0x1401WAVE_FORMAT_ISIAUDIOISIAudio
0x1500WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESSSoundspace Music Compression
0x1600WAVE_FORMAT_MPEG_ADTS_AAC 
0x1601WAVE_FORMAT_MPEG_RAW_AAC 
0x1602WAVE_FORMAT_MPEG_LOAS 
0x1608WAVE_FORMAT_NOKIA_MPEG_ADTS_AAC 
0x1609WAVE_FORMAT_NOKIA_MPEG_RAW_AAC 
0x160AWAVE_FORMAT_VODAFONE_MPEG_ADTS_AAC 
0x160BWAVE_FORMAT_VODAFONE_MPEG_RAW_AAC 
0x1610WAVE_FORMAT_MPEG_HEAAC 
0x2000WAVE_FORMAT_DVMDVM
0x2001WAVE_FORMAT_DTS2 
0xFFFEWAVE_FORMAT_EXTENSIBLESubFormat
0xFFFFWAVE_FORMAT_DEVELOPMENTDevelopment

再検索