スポンサーサイト

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

DirectSound8でストリーミング再生が出来ました!!

DirectSound8で
ついにストリーミング再生が成功しました!

長かった・・・。

範囲外アクセスで強制終了したり、作成したスレッドが暴走したり、
酷い目に遭った。

まぁ、完成したので良かったです。

まだ、クラス化はしていないので、
クラス化とかが出来れば、ソースコードを公開しようかなとか考え中。
(というか、たまたまBGM再生が上手く行っているように見えるだけで、
   内部でデータが損壊している、という可能性もあるので、再度 見直してみたい。)

とりあえず、スレッドについて。
自分は始め、通知イベント毎にスレッドを作成していたのですが、

DWORD WINAPI ThreadFunc1(LPVOID lpParameter)
{
while(1){
if(WaitForSingleObject(g_Event[0], 1) == WAIT_OBJECT_0){
//中略
}
}
return(0);
}
DWORD WINAPI ThreadFunc2(LPVOID lpParameter)
{
while(1){
if(WaitForSingleObject(g_Event[1], 1) == WAIT_OBJECT_0){
//中略
}
}
return(0);
}


よく考えてみたら、
上記のEventハンドル配列の添え字を変えればスレッドは複数も要らない事に気づき、
以下の様に修正しました。

DWORD WINAPI ThreadFunc(LPVOID lpParameter)
{
while(1){
 if(WaitForSingleObject(g_Event[g_EventNum], 1) == WAIT_OBJECT_0){
  //中略
           g_EventNum ^= 1;
 }
}
return(0);
}

※イベントが、 以下の様に設定されており、
g_Event[0] ・・・ バッファの中間
g_Event[1] ・・・ バッファの最後

それぞれのイベントが発生した際、以下の処理を行います。
g_Event[0] ・・・ バッファの最初から中間までを、次の再生時間のデータで更新。
g_Event[1] ・・・ バッファの中間から最後までを、次の再生時間のデータで更新。

ここら辺はまた次回、細かい説明を行いたいと思います。
ではでは!(`・ω・´)
スポンサーサイト

テーマ : 日記 - ジャンル : 日記

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



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