本日のOMGな話
XAudio2の
Sourcevoice->DestroyVoice();
の部分がEXCEPTION ACCESS VIOLATIONを起こしていて謎だったけど今日解決したっぽいので。
簡単に理由を言うとstd::functionを使用してfadeout/inの処理をしていたのが問題だったみたいだ。
詳細はここ XAudio2で出てくるエラー - ぼく用あれこれまとめ - アットウィキ に書いてあるのだが、同一スコープ内で処理をしないといけないらしい。
更にここにはDestroyVoice()でと書いてあるがどうやらSetVolumeなどのSourceを触ることが厳禁らしい。
そうだったのか・・・
追記~
どうやらSetVolumeを使用した時にDestroyでエラーを吐くのはXAPOFXが関係しているみたいだ、試しに機能を外してみたら動いた
どのエフェクトが悪さをしているのかまではまだ確かめていないがEQなのかなぁって思っていたり。
聞いたことはないのだがGainを全部落とせば最悪fadeは出来るのでそれでやろうかと思っている、もしかしたらそっちの方が正しいのかもしれない。
追記2~
不思議なことにどうやらDestroyVoiceの直前にSetVolumeで(1.0f)を入れ直してあげるとエラーを吐かずに終了してくれる。謎の原因まではわからないがおそらく非同期処理をしているからそのあたりがエラー吐いてるのかなーって感じです。
XAudio2周りは唐突によくわからないエラー吐くからすごい困る。