waveファイルに関係ないデータを埋め込む
突然ですが、waveファイルがwaveファイルと認識されて演奏可能になる条件ってなんでしょうね?
詳細はちょいと不明ですが、大体↓な感じ。
要するに「必須ヘッダ」と「必須分のデータ」が確保されていればいいということ。
・最低限のヘッダが構成されている。
(RIFF/WAVE/fmt /dataの各チャンクが正確に定義されていること。)
・上記「RIFF」「data」チャンク内のサイズが正しいこと。
・上記「data」チャンク内に記入されているサイズ分のデータが
ファイル内に存在すること。
で、ここからが今回の本題。
あえて二つ目の条件の所を「サイズが正しい」とぼかして書きました。
これは、一般的な解説では
とされているかと思うのですが、
RIFF … 以降のファイル全体のサイズ
data … 以降の波形データのサイズ
これが正確には少し違うようで、
とするのが正しいようです。
RIFF … 以降のwaveフォーマットデータのサイズ
data … 以降の波形データのサイズ
(少なくとも、WindowsMediaPlayerにおいては。他のプレイヤは要検証かもしれず。)
このことを考慮すると、鳴らす音声データ以外もwaveファイルに埋め込むことができます。
具体的には、
鳴らす音声データ終了後に埋め込みたいデータを直接書き込んでしまえばOK。
(ヘッダに記述されている範囲外のデータになるので、プレイヤ側から触れることはない…ということなんですかね?)
数秒しか鳴らないのに、異様にファイルサイズが大きい
…なんていうものがあった場合は、おそらくこの手法で何らかのデータが埋め込まれています。
(まぁ、そんなファイルを見たことはありませんが(苦笑))
…で、こんなことをして何に使うんでしょう?
…実際の所、使い道はほとんどありません(何)
何らかの形で、音声とセットで持たせておきたいデータとかスクリプトがある場合は有効かもしれないですが…。
(ちなみに、範囲外アクセスよろしくBufferOverRunの可能性ですが、前述の通りヘッダで記述されている範囲外になるせいか、ほとんど考えなくていいみたいです。)