- 253 名前:デフォルトの名無しさん mailto:sage [2012/10/05(金) 20:53:50.19 ]
- XAudio2なんですけどclallbackのOnStreamEnd()って全部のバッファを再生し終えたら呼ばれますよね?
ストリーミングで、ループ再生をしようと思ってOnStreamEnd()を使ってみたのですがなんか挙動が変だとおもって ブレークポイント掛けてみたところ頻繁にOnStreamEnd()が呼ばれていました。 しかも、バッファが一つ以上残ってるのに呼ばれていました。 何が悪いんでしょうか? 待機用関数のコード乗せようとしたら多過ぎると怒られたのでCallBackだけですすみません。 class StreamCallback : public IXAudio2VoiceCallback { public: StreamCallback() : StreamEndEvent_( CreateEvent( NULL, FALSE, FALSE, NULL ) ),BufferEndEvent_(CreateEvent( NULL, FALSE, FALSE, NULL )){} virtual ~StreamCallback(){ CloseHandle( StreamEndEvent_ );CloseHandle( BufferEndEvent_ ); } public: HANDLE operator()(int flag) const { if(flag==STREAM_END_EV)return StreamEndEvent_; if(flag==BUFFER_END_EV)return BufferEndEvent_; return NULL; } void __stdcall OnStreamEnd(){ SetEvent( StreamEndEvent_ ); } void __stdcall OnBufferEnd(void*){ SetEvent(BufferEndEvent_);} //残りは特に無い無いので略 private: HANDLE StreamEndEvent_,BufferEndEvent_; }; 待機はWaitForMultipleObjects()で待機させてます。 また、ストリーミングは二つのデータを取って交互に入れてます。
|

|