.vocファイル

提供: MonoBook
移動先: 案内検索

.vocファイルとは、Creative Technologyの開発した音声データ向けのファイルフォーマットである。 1980年代末から1990年代初頭のSound Blasterにダミ声を喋らせるために考えられたものである。

当初は符号なしの8ビットPCMとADPCMデータに限定されていたが、後に16ビットのA-law圧縮とμ-law圧縮が扱えるように拡張された。

当然ながら最近のMP3(.mp3ファイル)などと比べると絶望的に音質は悪いし圧縮率もよくない。 昔の洋ゲーがよく採用していた。

データ構造[編集 | ソースを編集]

基本的にすべて整数値でリトルエンディアンとなっている。

メインヘッダー[編集 | ソースを編集]

  • バイト0〜18 - 識別子文字列「Creative Voice File」
  • バイト19 - 0x1A(EOF)。 間違ってvocファイルを印刷してもここで止まる親切設計
  • バイト20-21 - このヘッダー部分の合計サイズ(通常0x001A)
  • バイト22〜23 - バージョン番号(major << 8)| minor
    メジャーは通常0x01
    マイナーは通常0x0Aまたは0x14
  • バイト24-25 - チェックサム( = 〜version + 0x1234)

データブロック[編集 | ソースを編集]

すべてのデータブロックは、プロックタイプとブロックサイズで始まる。

  • バイト0 - ブロックタイプ
  • バイト1〜3 - ブロックサイズ(これ以降続く可変長のデータ部分のサイズ)

ブロックタイプ[編集 | ソースを編集]

ブロックタイプ 0x00:ターミネータ

ファイルの終わりを示す。必須ではない。

ブロックタイプ 0x01:サウンドデータ(新規)
  • バイト0 分周数
  • バイト1 コーデックID
  • バイト2..n オーディオデータ

サンプルレートは次のように定義される。

1000000 /(256  -  frequency_divisor)
ブロックタイプ0x02:サウンドデータ(継続)
  • バイト2..n オーディオデータ

このブロックは前の「サウンドデータ(新規)」と同じコーデックパラメータを使用する。 2バイト節約。

ブロックタイプ0x03:無音
  • バイト0-1 - 無音の長さ-1(単位はサンプル)
  • バイト2の周波数除数

サンプルレートは次のように定義される。

 1000000 /(256  -  frequency_divisor)
ブロックタイプ0x04:マーカー
  • バイト0-1 マーク値

これはアニメーションとサウンドを同期するために使用するためのもの。

ブロックタイプ0x05:テキスト
  • バイト0..nゼロ終了文字列

ここに独自のスクリプトを埋め込んであるシステムもよくある。

ブロックタイプ0x06:繰り返し開始
  • バイト0-1リピートカウント - 1

このブロック以降の次のリピート終了ブロックまでのサウンドデータは、カウント+ 1回繰り返されます。 count == 0xFFFFのとき、これは無限の繰り返しを意味します。

ブロックタイプ0x07:繰り返し終了

リピートセクションを終了する空のブロック。

ブロックタイプ0x08:追加情報
  • バイト0〜1の周波数除数
  • バイト2のコーデックID
  • バイト3チャネル番号 - 1

サンプルレートは次のように定義される。

 256000000 /(nb_channels *(65536  -  frequency_divisor))

このブロックはサウンドブロックより前に出現する必要がある。 主にコーデックパラメータが記述されていることが多い。

ブロックタイプ0x09:サウンドデータ(新しいフォーマット)
  • バイト0-3 - サンプルレート
  • バイト4 - 1サンプルあたりのバイト数
  • バイト5 - チャネル番号
  • バイト6-7 - codec_id
  • バイト8-11 - 予約
  • バイト12..n - オーディオデータ

このブロックタイプはおそらくバージョン1.20(0x0114)以上のファイルでのみ有効。