NAudioのWasapiOutを利用時にAudioClientShareMode.Exclusiveを指定するとPlay時にエラーが出る

概要

表題の件で、以下コードを実行すると「 System.Runtime.InteropServices.COMException: '実装されていません」とエラーが発生してしまいます。

WasapiOutのコンストラクタにAudioClientShareMode.Sharedを指定すれば問題なく動作できますが、
サウンドを排他的に管理したいのでAudioClientShareMode.Exclusiveを指定したいです。

AudioClientShareMode.Exclusiveを指定した場合に必要な処理等あるのでしょうか?
ご教授いただけると嬉しいです。

C#

void Initialize() { var mmDevice = new MMDeviceEnumerator().GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia); this.waveIn = new WasapiLoopbackCapture(mmDevice); this.waveIn.DataAvailable += this.WaveInOnDataAvailable; waveOut = new WasapiOutTest(mmDevice, AudioClientShareMode.Exclusive, true, 44); // Exclusiveを指定 bufferdWave = new BufferedWaveProvider(waveOut.OutputWaveFormat); bufferdWave.DiscardOnBufferOverflow = false; waveOut.Init(bufferdWave); } void Start() { waveIn.StartRecording(); waveOut.Play(); //Error : System.Runtime.InteropServices.COMException: '実装されていません } private void WaveInOnDataAvailable(object sender, WaveInEventArgs e) { var buffer = new byte[e.Buffer.Length]; bufferdWave.AddSamples(buffer, 0, e.BytesRecorded); }

実現したい事

PC上で再生されるサウンドを(FFTなどで)加工してから出力したいと思っています。
つまりイコライザです。

PC上で再生されるサウンドというのは、特定の音声ファイルではなく、
あらゆるアプリケーションから再生されるサウンドの事で、
よってWASAPIからデータを取得しようと考えています。

排他的に管理したいと先述してましたが、オリジナルのサウンドとイコライザから出す音が二重にならないように、
イコライザからだけのサウンドを出したいというのが理由です。

サウンドに関するアプリケーションを作るのが初めてですので、
やろうとしている事が検討違いなら申し訳ございません。

コメントを投稿

0 コメント