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

ウェーブデータの供給

DirectSoundには、サウンドファイルからウェーブイメージを取得する機能がありません。そのためDirectSoundを用いたシステムでは、別途サウンドデータを供給する仕組みを用意しなければなりません。

マネージ環境のDirectSoundでは、サウンドデータ供給のためにストリームクラスが定義されています。マネージ環境のセクションではストリームクラスについて解説しています。

このセクションではモデルケースとして、ウェーブファイルを扱うサービスクラスを紹介します。以下に実装例を示します。

ファイル関連

void            OpenFile(LPCSTR strPath);
void            CloseFile(void);

ウェーブファイルのパスを指定してファイルをオープンします。小さなファイルならばサウンドデータをすべて読み出し、ローカルバッファに保存しておくことも可能です。この場合は、読み出した後すぐにファイルをクローズすることができます。大きなファイルの場合、サウンドデータをローカルバッファに保存することはメモリの利用効率を悪くするためお勧めしません。ストリーミング再生を行う場合、ファイルをオープンした状態で必要な部分だけを読み出します。すべての再生が終わったら、ファイルをクローズします。

シーク関連

BOOL            Rewind(void);
BOOL            Seek(long lDataPos);

サウンドデータを読み出す位置を変更します。最初から演奏するときは、Rewindを実行します。また途中から演奏するときは、引数に演奏開始位置を指定しSeekを実行します。Seekの引数をゼロとしたものとRewindは等価です。

読み出し関連

long            ReadData(LPVOID pDataBuff, long lDataSize);
void            FillSilence(LPVOID pDataBuff, long lDataSize);

サウンドデータを読み出します。通常の読み出しには、ReadDataを用います。引数にセカンダリーバッファのアドレスと読み出したいデータサイズを指定します。セカンダリーバッファを無音状態にしたいときは、FillSilenceを用います。引数はReadDataと同じです。

プロパティ関連

LPWAVEFORMATEX  GetWaveFormat(void);
BOOL            IsFileOpen(void);
long            GetDataSize(void);

演奏情報に関連した情報を提供します。これらはウェーブファイルをオープンしたときに取得します。

具体的な実装についてはセクション「ウェーブフォーム」で解説していますので参照して下さい。

具体的なコードは、次回以降の更新で公開する予定です。

ドキュメントの先頭へ

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