スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

DirectSound プログラミング ~その1~

とりあえず音楽とかを流してみたかったので、
DirectSoundを使ってみました。

で、このDirectSoundについてですが、 物凄く面倒くさいです。
何が面倒くさいかというと、 waveファイルの読み込み。

例えば、
--------------------------------------------------------
テクスチャであれば、 D3DXCreateTextureFromFile関数
メッシュであれば、D3DXLoadMeshFromX関数

--------------------------------------------------------
とか、読み込む関数とかがあるじゃないですか。
DirectSoundには、それがありません・・・。

なので、どうしなければいけないか?というと、
自分でwaveファイルの内部データを解析し、
情報を引っ張り出してやらないといけない

のです。

何この仕様? (´・ω・`)

※幸い、検索したらいくつか参考になるサイトが出てきたので、
そちらを見て作成しました。
【参考URL】マルチメディアプログラミング
【参考URL】WAVEファイルにリアルタイムで囲加工し再生する
【参考URL】DirectSound入門
【参考URL】gameつくろー ファイルから音を抽出


とりあえず単純に音を鳴らすための手順を書いてみる。
-------------------------------------------------------------------------
【1】dsound.hをインクルード。 dsound.libとdxguid.libをリンクする。
【2】デバイスオブジェクトを作成する。
【3】協調レベルを設定する。
【4】waveファイルが収まる容量のバッファを確保する。
【5】バッファにwaveファイル書き込む。
【6】バッファに書き込んだら、元のwaveファイルを開放する。
【7】Play関数を呼ぶ。
【8】プログラムの最後に、バッファとデバイスを開放する。

-------------------------------------------------------------------------


【1】dsound.hをインクルード。dsound.libとdxguid.libをリンクする。
インクルードとリンクの仕方は下記の様になります。
(リンクはプロジェクトのプロパティで設定してもOKですが、
          今回はソースコード内で指定する方法をとります。)
---------------------------------------
#pragma comment ( lib, "dsound.lib" )
#pragma comment ( lib, "dxguid.lib" )
#include <dsound.h>

---------------------------------------


【2】デバイスオブジェクトを作成する。
デバイスの作成には、DirectSoundCreate8関数を使用します。




長くなりそうなので、先にソースコードを。

【ソースコード】Sample_DirectSound1.txt
※Test.wavというファイルを読み込んでいます。
各自Test.wavを作成するか、任意の名前のwaveファイルに変えるようにお願いします。

あと、デカすぎるwaveファイルを読み込もうとするとバッファに収まりきれないので、
数秒くらいのwaveファイルで試す事をお薦めします。
※デカいwaveファイルはストリーミングバッファというものを使用する。
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント
コメントの投稿
管理者にだけ表示を許可する



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。