コンテンツにスキップ

「WAV」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
KamikazeBot (会話 | 投稿記録)
m r2.6.4) (ロボットによる 変更: en:Waveform Audio File Format
→‎概要: 明白な独自研究
 
(27人の利用者による、間の39版が非表示)
3行目: 3行目:
| icon =
| icon =
| extension = .wav
| extension = .wav
| mime = audio/wav<br />audio/wave
| mime = audio/vnd.wave, audio/x-wav
| type code = WAVE
| type code = WAVE
| uniform type = com.microsoft.waveform-​audio
| uniform type = com.microsoft.waveform-audio
| magic = WAVE (8バイト目から)
| magic = WAVE (8バイト目から)
| owner = [[マイクロソフト]]、[[IBM]]
| owner = [[マイクロソフト]]、[[IBM]]
16行目: 16行目:
}}
}}


'''RIFF waveform Audio Format'''('''WAV''')は音声データ用の[[コンテナフォーマット|コンテナ規格]]である。元の意味に含まれる英単語{{lang|en|waveform}}は「波形」を意味する。「波」の意味を持つ英単語{{lang|en|wave}}から転じて、'''WAVE'''(ウェイヴ、ウェーヴ、ウェイブ、ウェーブ)とも呼ばれる。[[拡張子]]は<code>.wav</code>。
'''WAV'''または'''WAVE'''(ウェーブ、ウェブ) (RIFF waveform Audio Format) は、[[マイクロソフト]]と[[IBM]]により開発された音声データ記述のための[[音声ファイルフォーマット|フォーマット]]である。[[Resource Interchange File Format|RIFF]]の一種。主として[[Microsoft Windows|Windows]]で使われるファイル形式である。[[ファイル (コンピュータ)|ファイル]]に格納した場合の[[拡張子]]は、.wav。


== 概要 ==
RIFF上の識別子は「WAVE」であるが、拡張子から、WAVフォーマットという呼び名が一般化した。
'''RIFF waveform Audio Format''' ('''WAV''') は[[マイクロソフト]]と[[IBM]]により開発された、[[Resource Interchange File Format|RIFF]]ベースの[[音声ファイルフォーマット]]である。RIFF上の識別子は「WAVE」であるが、拡張子からWAVフォーマットという呼び名が一般化した。


英語圏では元の意味からWAVを「ウェイヴ」({{IPA-en|weɪv|IPA}})と読む(発音する)ことが多い<ref>[https://forum.blockland.us/index.php?topic=164377.45 How do you pronounce file extensions?]</ref>が、{{独自研究範囲|日本の音楽業界では{{lang|en|web}}(ウェブ)と響きを区別するために、ワブ(ワヴ)とも呼ばれる<ref>[https://wa3.i-3-i.info/word14204.html WAVファイルとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典]</ref>{{efn|日本語には英語の{{lang|en|v}}に相当する子音が存在せず、日本の学校における英語教育も読み書きのみが中心のため、{{lang|en|v}}と{{lang|en|b}}の発音を区別できない日本人や、{{lang|en|a}}を「エイ」ではなく「エー」と発音してしまう日本人が多いことも関与している。}}。|date=2024年3月}}
通常は非圧縮、リニア[[パルス符号変調|PCM]]の[[サンプリング]]データ用のフォーマットとして扱われるが、WAVはいわゆる[[コンテナフォーマット|コンテナ形式]]で、データ形式は自由であり、[[G.711|μ-law]]や、[[適応的差分パルス符号変調|ADPCM]]、[[MP3]]、[[Windows Media Audio|WMA]]などの圧縮データを格納することもできる。Windows以外のOSで作成したリニアPCMデータを直接Windowsで閲覧するとwavとして認識される。


非圧縮リニア[[パルス符号変調|PCM]]で[[コーデック#音声圧縮のコーデック|符号化]]した音声の格納にWAVはよく用いられる。一方でWAVはあくまで[[コンテナフォーマット|コンテナ規格]]であり、[[G.711|μ-law]]や、[[適応的差分パルス符号変調|ADPCM]]、[[MP3]]、[[Windows Media Audio|WMA]]など他の[[コーデック#音声圧縮のコーデック|音声コーデック]]も格納できる。Windows以外のOSで作成したリニアPCMデータを直接Windowsで閲覧するとwavとして認識される。
WAVフォーマットでは、データ長が32ビット符号なし[[整数型]]で記述されているため、4GBを超えるファイルを作成できない。この制限を越えるため、データ長を[[64ビット]]符号なし整数型で記述するWave64 (.W64) というフォーマットも存在する。またタグはつけられない。

WAVフォーマットでは、データ長が32ビット符号なし[[整数型]]で記述されているため、4GBを超えるファイルを作成できない。この制限を越えるため、データ長を[[64ビット]]符号なし整数型で記述するWave64 (.w64) というフォーマットも存在する。

RIFFのチャンクとして、WAVファイル内にタグ情報を付加することができるが、使用する文字コードは特に規定されておらず、互換性に問題が生じ易い仕様になっている。

音声分野で広く利用される他の[[コンテナフォーマット|コンテナ規格]]には[[MP4]]、[[Ogg]]、[[WebM]]などが挙げられる。

== 仕様 ==
=== RIFF ===
RIFFファイルはタグ付きのファイル形式で、チャンクと呼ばれるコンテナの集合である<ref>[https://www.loc.gov/preservation/digital/formats/fdd/fdd000025.shtml Sustainability of Digital Formats: Planning for Library of Congress Collections - RIFF (Resource Interchange File Format)]</ref>。
チャンクには4文字のタグ([[FourCC]])とチャンクのサイズ(バイト数)があり、タグによってチャンクのフォーマットが区別される。
いくつか標準的なタグがあり、4文字すべてが大文字のタグは予約されたタグである。

RIFFファイルの一番外側のチャンクはRIFFタグを持つ。
チャンクデータの最初の4バイトはフォームの種類を指定するFourCCでその後ろにサブチャンクが続く。
WAVファイルの場合、FourCCは<code>WAVE</code>である。

RIFF形式ではチャンクの出現順には一般的な規定がないが、<code>fmt </code>チャンクは<code>data</code>チャンクの直前に置くという例外がある。

タグファイル形式の利点として、RIFFファイルの利用者が知らないタグは読み飛ばし、処理可能なチャンクのみを扱うことができる点が挙げられる。

RIFFフォーマットにおいて複数バイトで表現されるデータの並びは[[リトルエンディアン]]である。

RIFFファイルの一例を挙げる。
この例ではオフセット0x0に<code>RIFF</code>チャンクがあり、チャンクの長さは0x00630b20である。
<code>FourCC</code>は<code>WAVE</code>であり、ファイルがWAVファイルであることを示している。
オフセット0x12からはサブチャンクが続く。
オフセット0x30から<code>fmt </code>チャンクが始まり、オフセット0x48から<code>data</code>チャンクが始まっている。
<pre>
00000000 52 49 46 46 20 0b 63 00 57 41 56 45 4a 55 4e 4b RIFF .c.WAVEJUNK
00000010 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000030 66 6d 74 20 10 00 00 00 01 00 02 00 44 ac 00 00 fmt ........D...
00000040 10 b1 02 00 04 00 10 00 64 61 74 61 d8 0a 63 00 ........data..c.
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
...
</pre>
=== fmt チャンク ===
<code>fmt </code>チャンクの構造は、<code>WAVEFORMATEX</code>構造体などによって定義される<ref name="waveformatex">[https://learn.microsoft.com/en-us/windows/win32/api/mmeapi/ns-mmeapi-waveformatex WAVEFORMATEX (mmeapi.h) - Win32 apps | Microsoft Learn]</ref>。

チャンネル数、サンプルレート、サンプルのビット数などが定義される。
<pre>typedef struct {
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign; // WAVEFORMATはここまで
WORD wBitsPerSample; // PCMWAVEFORMATで追加
WORD cbSize; // WAVEFORMATEXで追加
} WAVEFORMATEX;</pre>
上記の他、サイズが14バイトの<code>WAVEFORMAT</code>構造体や、サイズが16バイトでcbSizeが存在しない<code>PCMWAVEFORMAT</code>構造体、サイズが40バイトで<code>cbSize</code>の値が22の<code>WAVEFORMATEXTENSIBLE</code>構造体がある。ただし<code>WAVEFORMAT</code>はWindowsでは廃止されて使用不可能であり、<code>PCMWAVEFORMAT</code>も廃止されている<ref>[https://learn.microsoft.com/en-us/windows-hardware/drivers/audio/extensible-wave-format-descriptors Extensible Wave-Format Descriptors - Windows drivers | Microsoft Learn]</ref>。

==== wFormatTag ====
wFormatTagは音声コーデックを指定する。例として次が挙げられる。

* <code>1</code>: リニアPCM (<code>WAVE_FORMAT_PCM</code>)<ref>"WAVE_FORMAT_PCM PCM (pulse-code modulated) data in integer format." Microsoft. ''[https://docs.microsoft.com/en-us/windows/win32/api/mmreg/ns-mmreg-waveformatex#remarks WAVEFORMATEX structure (mmreg.h)]''. Windows App Development.</ref>
* <code>3</code>: [[浮動小数点数]]PCM (<code>WAVE_FORMAT_IEEE_FLOAT</code>)<ref>"WAVE_FORMAT_IEEE_FLOAT PCM data in IEEE floating-point format." Microsoft. ''[https://docs.microsoft.com/en-us/windows/win32/api/mmreg/ns-mmreg-waveformatex#remarks WAVEFORMATEX structure (mmreg.h)]''. Windows App Development.</ref>
* <code>7</code>: [[G.711|μ-law]] (<code>WAVE_FORMAT_MULAW</code>)<ref>"WAVE_FORMAT_MULAW Mu-law-encoded format." Microsoft. ''[https://docs.microsoft.com/en-us/windows/win32/api/mmreg/ns-mmreg-waveformatex#remarks WAVEFORMATEX structure (mmreg.h)]''. Windows App Development.</ref>

これらの定数は[[Windows SDK]]に含まれるmmreg.h<ref>[https://learn.microsoft.com/en-us/windows/win32/api/mmreg/ Mmreg.h header - Win32 apps | Microsoft Learn]</ref>によって定義されており、さらにそれぞれのフォーマットによって<code>fmt</code>チャンクの構造の詳細が決まる。

=== dataチャンク ===
<code>data</code>チャンクの中身は<code>fmt </code>チャンクによって定義されるフォーマットに基づく。

2チャンネルのリニアPCMの場合には、左チャンネル・右チャンネルの順に[[符号付整数]]([[2の補数]])で格納される。

[[浮動小数点数]]で格納される場合、慣習からデータ値の範囲は-1.0から+1.0に限られる。


== Windows上での圧縮 ==
== Windows上での圧縮 ==
Windows上では、[[Audio Compression Manager|ACM]]を利用すれば、圧縮などが行える。この機能が利用できる[[ソフトウェア]]として、[[サウンド レコーダー]]がある。
[[Windows]]上では、[[Audio Compression Manager|ACM]]を利用すれば、圧縮などが行える。この機能が利用できる[[ソフトウェア]]として、[[サウンド レコーダー]]がある。

== 脚注 ==
{{脚注ヘルプ}}
=== 注釈 ===
{{Notelist}}
=== 出典 ===
{{Reflist}}


== 関連項目 ==
== 関連項目 ==
*[[AIFF]] - wavと同じ用途で使用されるコンテナフォーマット
*[[Audio Video Interleave]] (AVI)
*[[Broadcast Wave Format]](BWF)- wavの内包するデータを厳密化、チャンクを拡張した形式
*[[AIFF]]
*[[Cwav]]
*[[Cwav]] - wavを利用した圧縮形式
<!--
*[[Broadcast Wave Format]] (BWF)
*[[Audio Video Interleave]](AVI)- 動画用コンテナ。音声にリニアPCMが利用できる
-->
* [[Windows Media Audio]](WMA)
* [[オーディオコーデック]]


== 外部リンク ==
== 外部リンク ==
* [https://docs.microsoft.com/en-us/windows-hardware/drivers/audio/extensible-wave-format-descriptors Extensible Wave-Format Descriptors] from Microsoft(Updated October 26, 2017)
* [https://web.archive.org/web/20080113195252/http://www.borg.com/~jglatt/tech/wave.htm WAVE File Format - technical details](1999)

=== 解説サイト ===
=== 解説サイト ===
* [http://bb.watch.impress.co.jp/cda/bbword/16386.html Broadband Watch--BBっとWORDS 「WAVの構造と現状」]
* [https://bb.watch.impress.co.jp/cda/bbword/16386.html Broadband Watch--BBっとWORDS 「WAVの構造と現状」]


{{Computer-stub}}
{{Computer-stub}}
41行目: 126行目:
{{圧縮フォーマット}}
{{圧縮フォーマット}}


{{Normdaten}}
[[Category:音声ファイルフォーマット]]
[[Category:音声ファイルフォーマット]]
[[Category:コーデック]]
[[Category:コーデック]]
[[Category:デジタルオーディオ]]
[[Category:スタジオ関連機材]]
[[Category:スタジオ関連機材]]

[[ca:WAV]]
[[cs:WAV]]
[[da:Wav]]
[[de:RIFF WAVE]]
[[en:Waveform Audio File Format]]
[[es:Waveform Audio Format]]
[[fi:WAV]]
[[fr:WAVEform audio format]]
[[hu:WAV]]
[[id:WAV]]
[[it:WAV]]
[[ko:웨이브]]
[[nl:WAV]]
[[nn:Wave]]
[[pam:WAV]]
[[pl:WAV]]
[[pt:WAV]]
[[ru:WAV]]
[[simple:WAV]]
[[sv:WAVE]]
[[tr:WAV]]
[[uk:WAV]]
[[yo:WAV]]
[[zh:WAV]]

2024年3月16日 (土) 11:32時点における最新版

Waveform
拡張子.wav
MIMEタイプaudio/vnd.wave, audio/x-wav
タイプコードWAVE
UTIcom.microsoft.waveform-audio
マジック
ナンバー
WAVE (8バイト目から)
開発者マイクロソフトIBM
種別音声
派生元RIFF

RIFF waveform Audio FormatWAV)は音声データ用のコンテナ規格である。元の意味に含まれる英単語waveformは「波形」を意味する。「波」の意味を持つ英単語waveから転じて、WAVE(ウェイヴ、ウェーヴ、ウェイブ、ウェーブ)とも呼ばれる。拡張子.wav

概要

[編集]

RIFF waveform Audio Format (WAV) はマイクロソフトIBMにより開発された、RIFFベースの音声ファイルフォーマットである。RIFF上の識別子は「WAVE」であるが、拡張子からWAVフォーマットという呼び名が一般化した。

英語圏では元の意味からWAVを「ウェイヴ」(IPA: [weɪv])と読む(発音する)ことが多い[1]が、日本の音楽業界ではweb(ウェブ)と響きを区別するために、ワブ(ワヴ)とも呼ばれる[2][注釈 1][独自研究?]

非圧縮リニアPCM符号化した音声の格納にWAVはよく用いられる。一方でWAVはあくまでコンテナ規格であり、μ-lawや、ADPCMMP3WMAなど他の音声コーデックも格納できる。Windows以外のOSで作成したリニアPCMデータを直接Windowsで閲覧するとwavとして認識される。

WAVフォーマットでは、データ長が32ビット符号なし整数型で記述されているため、4GBを超えるファイルを作成できない。この制限を越えるため、データ長を64ビット符号なし整数型で記述するWave64 (.w64) というフォーマットも存在する。

RIFFのチャンクとして、WAVファイル内にタグ情報を付加することができるが、使用する文字コードは特に規定されておらず、互換性に問題が生じ易い仕様になっている。

音声分野で広く利用される他のコンテナ規格にはMP4OggWebMなどが挙げられる。

仕様

[編集]

RIFF

[編集]

RIFFファイルはタグ付きのファイル形式で、チャンクと呼ばれるコンテナの集合である[3]。 チャンクには4文字のタグ(FourCC)とチャンクのサイズ(バイト数)があり、タグによってチャンクのフォーマットが区別される。 いくつか標準的なタグがあり、4文字すべてが大文字のタグは予約されたタグである。

RIFFファイルの一番外側のチャンクはRIFFタグを持つ。 チャンクデータの最初の4バイトはフォームの種類を指定するFourCCでその後ろにサブチャンクが続く。 WAVファイルの場合、FourCCはWAVEである。

RIFF形式ではチャンクの出現順には一般的な規定がないが、fmt チャンクはdataチャンクの直前に置くという例外がある。

タグファイル形式の利点として、RIFFファイルの利用者が知らないタグは読み飛ばし、処理可能なチャンクのみを扱うことができる点が挙げられる。

RIFFフォーマットにおいて複数バイトで表現されるデータの並びはリトルエンディアンである。

RIFFファイルの一例を挙げる。 この例ではオフセット0x0にRIFFチャンクがあり、チャンクの長さは0x00630b20である。 FourCCWAVEであり、ファイルがWAVファイルであることを示している。 オフセット0x12からはサブチャンクが続く。 オフセット0x30からfmt チャンクが始まり、オフセット0x48からdataチャンクが始まっている。

00000000   52 49 46 46 20 0b 63 00 57 41 56 45 4a 55 4e 4b  RIFF .c.WAVEJUNK
00000010   1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000020   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000030   66 6d 74 20 10 00 00 00 01 00 02 00 44 ac 00 00  fmt ........D...
00000040   10 b1 02 00 04 00 10 00 64 61 74 61 d8 0a 63 00  ........data..c.
00000050   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000060   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000070   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000080   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
...

fmt チャンク

[編集]

fmt チャンクの構造は、WAVEFORMATEX構造体などによって定義される[4]

チャンネル数、サンプルレート、サンプルのビット数などが定義される。

typedef struct {
    WORD  wFormatTag;
    WORD  nChannels;
    DWORD nSamplesPerSec;
    DWORD nAvgBytesPerSec;
    WORD  nBlockAlign; // WAVEFORMATはここまで
    WORD  wBitsPerSample; // PCMWAVEFORMATで追加
    WORD  cbSize; // WAVEFORMATEXで追加
} WAVEFORMATEX;

上記の他、サイズが14バイトのWAVEFORMAT構造体や、サイズが16バイトでcbSizeが存在しないPCMWAVEFORMAT構造体、サイズが40バイトでcbSizeの値が22のWAVEFORMATEXTENSIBLE構造体がある。ただしWAVEFORMATはWindowsでは廃止されて使用不可能であり、PCMWAVEFORMATも廃止されている[5]

wFormatTag

[編集]

wFormatTagは音声コーデックを指定する。例として次が挙げられる。

これらの定数はWindows SDKに含まれるmmreg.h[9]によって定義されており、さらにそれぞれのフォーマットによってfmtチャンクの構造の詳細が決まる。

dataチャンク

[編集]

dataチャンクの中身はfmt チャンクによって定義されるフォーマットに基づく。

2チャンネルのリニアPCMの場合には、左チャンネル・右チャンネルの順に符号付整数2の補数)で格納される。

浮動小数点数で格納される場合、慣習からデータ値の範囲は-1.0から+1.0に限られる。

Windows上での圧縮

[編集]

Windows上では、ACMを利用すれば、圧縮などが行える。この機能が利用できるソフトウェアとして、サウンド レコーダーがある。

脚注

[編集]

注釈

[編集]
  1. ^ 日本語には英語のvに相当する子音が存在せず、日本の学校における英語教育も読み書きのみが中心のため、vbの発音を区別できない日本人や、aを「エイ」ではなく「エー」と発音してしまう日本人が多いことも関与している。

出典

[編集]

関連項目

[編集]

外部リンク

[編集]

解説サイト

[編集]