はじめに
ここでは音声ファイルであるWAVファイル(.wav)のフォーマットの説明と簡単な読込サンプルについて解説しています。
WAVファイルについては、「wav フォーマット」などで検索するとすでに他のサイトでも解説されていますので、簡単に説明します。
WAVファイルのフォーマット
WAVファイルはRIFFファイル形式をとっています。
RIFFファイル形式では、そのファイルに必要なデータをチャンクと呼ばれるブロックに分けて保存し、チャンクにFourCCと呼ばれる4Byteの識別子(ID)を付けて管理するファイル形式です。
RIFFファイルについては下記に簡単に記載しております。必要に応じてご参照ください。
今回作成するWAVファイルの読み込み関数のサンプルはこちらからダウンロードできます。 → riffsample_20231210
※Wavファイル以外にもSoundfontファイル読込サンプルなども同梱されています。
WAVファイルのチャンク
WAVファイルのチャンクと階層構造は下記となっています。各チャンクの詳細は後述します。
2つの必須チャンクがあります。
チャンク名 | タイプ | 必須 /任意 |
チャンク識別子 (ファイル/LIST識別子) |
概要 |
---|---|---|---|---|
RIFFチャンク | RIFF | 必須 | RIFF(WAVE) | RIFFチャンク、ファイル識別子は「WAVE」となる。 |
fmt チャンク | 一般 | 必須 | fmt (「fmt 」の最後に空白があるので注意) |
音声波形データ(後述のdataチャンク)のデータ形式情報が保存されたチャンク |
dataチャンク | 一般 | 必須 | data | 音声波形データが保存されたチャンク |
WAVファイルの各チャンクの説明
WAVファイルの各チャンクについて説明いたします。
fmtチャンク
概要 | 音声波形データ(後述のdataチャンク)のデータ形式情報が保存されたチャンクになります | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
必須・任意 | 必須 | チャンクサイズ | 16Byte固定 | |||||||||||||||||||||
データ部 | データ部には下記 構造体が入ります。 (WORD型はunsigned short、DWORD型はunsinged longの再定義となります。)
|
dataチャンク
概要 | 音声波形データが保存されたチャンクになります。 | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
必須・任意 | 必須 | チャンクサイズ | 音声波形データのサイズになります | ||||||||||||||||||||||||
データ部 | データ部は、fmtチャンクのformatid・chunnelnum・bitrateの内容によって変わります。 formatidが「1」(圧縮されていない音声波形)の場合、下記のようになります。 【例】
|
WAVファイル読み込みサンプル
WAVファイルの読み込みの流れは
- fmtチャンクを読み込む
- fmtチャンクの内容に合わせてdataチャンクの内容を読み込む
となります。
下記に「44,100Hz 16bit 非圧縮 モノラルorステレオ」のWAVファイルを読み込む関数のサンプルコードを記載します。
説明についてはコード内に記載しているので割愛します。
なお、WAVファイルの読み込みには下記のRIFFの読込を行うクラスを使用していますので、下記もご参照ください。
WAVファイルの読み込み関数のサンプルはこちらからもダウンロードできます。 → riffsample_20231210
※Wavファイル以外にもSoundfontファイル読込サンプルなども同梱されています。
【readWavFile.h】
上記の関数ででWAVファイルを読み込むことができます。
VSTなどで利用するのであれば、下記のようにして32bit浮動小数点型(float)などに変換します。
最後に
WAVのファイルフォーマットとそれぞれのチャンクについての説明は以上になります。
今回作成したWAVファイルの読み込み関数のサンプルはこちらからダウンロードできます。 → riffsample_20231210
※Wavファイル以外にもSoundfontファイル読込サンプルなども同梱されています。
他のファイルの読み込みなどはリンクはこちらにまとめております → メディアファイルの取り扱い
質問はコメント欄や掲示板、Twitterでいただけばとおもいます。
また、「この部分を詳しく」などの要望も掲示板やTwitterでいただければと思います。
■掲示板
■Twitterアカウント:@vstcpp URL:https://twitter.com/vstcpp