カクタスソフトウェア
カクタスソフトウェア
サウンド MIDI マルチメディア アプリケーション

WAVEFORMATEX構造体とWAVEFORMATEXTENSIBLE構造体

当初ウェーブ属性の表現にはWAVEFORMAT構造体が用いられていました。しかし、ウェーブデータの多様化などによって拡張が必要となり、WAVEFORMATEXTENSIBLE構造体が定義されました。これら構造体は、データ属性によって利用できる範囲が異なります。このセクションでは2つの構造体の特徴を示し使い分けについて解説します。

WAVEFORMATEXは拡張仕様であるWAVEFORMATEXTENSIBLEと従来仕様のWAVEFORMATを共存させるために拡張エリアのサイズ(cbSize)をWAVEFORMATに追加したものです。このサイズがゼロの場合、構造体は実質的にWAVEFORMATであり、非ゼロの場合、cbSize以降に追加情報があることを示します。

特にWAVEFORMATEXTENSIBLEの場合、cbSizeは常に22となります。

WAVEFORMATEX構造体は従来からあるフォーマット、主に非圧縮のPCM形式を格納するために用いられます。一方、WAVEFORMATEXTENSIBLE構造体は、圧縮フォーマット・多チャンネルフォーマット・高分解能フォーマットなど多くの形式に対応します。

以下の条件をすべて満たした時、WAVEFORMATEX構造体が利用できます。

またWAVE_FORMAT_PCM以外では以下のケースでWAVEFORMATEXの利用が可能です。

wFormatTag wBitsPerSample nChannels
WAVE_FORMAT_ALAW 8 1 or 2
WAVE_FORMAT_MULAW 8 1 or 2
WAVE_FORMAT_IEEE_FLOAT 32 1 or 2

一方、一つでも以下の条件に当てはまる場合は、WAVEFORMATEXTENSIBLE構造体を利用しなければなりません。

また以下のケースではWAVEFORMATEXTENSIBLEを利用しても、ウェーブ再生できませんので注意して下さい。

wFormatTag wBitsPerSample nChannels
WAVE_FORMAT_ALAW 8 1 or 2
WAVE_FORMAT_MULAW 8 1 or 2
WAVE_FORMAT_IEEE_FLOAT 64 1 or 2

WAVEFORMATEXTENSIBLE構造体は、中にWAVEFORMATEX構造体が埋め込まれた構造になっています。以下にコードを示します。

WAVEFORMATEX構造体

typedef struct tWAVEFORMATEX
{
    WORD        wFormatTag;         /* format type */
    WORD        nChannels;          /* number of channels (i.e. mono, stereo...) */
    DWORD       nSamplesPerSec;     /* sample rate */
    DWORD       nAvgBytesPerSec;    /* for buffer estimation */
    WORD        nBlockAlign;        /* block size of data */
    WORD        wBitsPerSample;     /* number of bits per sample of mono data */
    WORD        cbSize;             /* the count in bytes of the size of */
                                    /* extra information (after cbSize) */
} WAVEFORMATEX, *PWAVEFORMATEX, NEAR *NPWAVEFORMATEX, FAR *LPWAVEFORMATEX;

WAVEFORMATEXTENSIBLE構造体

typedef struct {
    WAVEFORMATEX    Format;
    union {
        WORD wValidBitsPerSample;       /* bits of precision  */
        WORD wSamplesPerBlock;          /* valid if wBitsPerSample==0 */
        WORD wReserved;                 /* If neither applies, set to zero. */
    } Samples;
    DWORD           dwChannelMask;      /* which channels are */
                                        /* present in stream  */
    GUID            SubFormat;
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
詳しくはセクション「WAVEFORMATEXTENSIBLE構造体」を参照して下さい。

ドキュメントの先頭へ

カクタスソフトウェア 技術協力 資料室 資料室の広場 SourceForge.jp お問い合わせ