5

Windows XPでマルチチャンネル(パラレル)方式でサウンドを再生しようとしています。WinMMで並列サウンドを再生することはおそらく不可能であるとどこかで読んだことがありますが、これが私が観察したことです。

WaveOutOpen()を1回呼び出してから、WaveOutWrite()を何度も呼び出すと、サウンドは並列ではなく、キューに入れられます。

しかし、WaveOutOpenを9回呼び出して(そしてそれに9つのハンドルを格納して)、9つの異なるサウンドでWaveOutWrite()を9回呼び出すと、それらは並列(マルチチャネル)で再生されます。つまり、それらは混合されます。

動作しているように見えますが、チュートリアルやドキュメントに明確に記載されていないため、問題がないかどうかはわかりません。

このような「多くのWaveOutOpen」の方法でサウンドを再生しても大丈夫ですか?

4

3 に答える 3

3

WaveOutOpen()を1回呼び出してから、WaveOutWrite()を何度も呼び出すと、サウンドは並列ではなく、キューに入れられます。

それがまさに起こるはずのことです。WaveOutWriteは次のバッファをキューに入れます。再生したいオーディオを小さなチャンクで送信できます。

しかし、WaveOutOpenを9回呼び出して(そしてそれに9つのハンドルを格納して)、9つの異なるサウンドでWaveOutWrite()を9回呼び出すと、それらは並列(マルチチャネル)で再生されます。つまり、それらは混合されます。

繰り返しますが、これは正しく、予想されます。これは、多くの同時サウンドを再生する最も簡単な方法です。ただし、サンプルの正確なミキシングが必要な場合は、オーディオサンプルを自分で1つのサンプルストリームにミキシングし、単一のWaveOutデバイスで再生する必要があります。

于 2011-10-07T09:22:27.947 に答える
1

私はwaveOut*APIの機能で修正され、サウンドを同時に再生してミックスします。

好奇心旺盛な人のためのテストコードは次のとおりですabc良い。

同時に、同じAPIの上に構築されたDirectShow Audio Renderer(WaveOut)フィルターは、目に見える理由がないため、単一のストリーム以外のものを再生することはできません。

参考までに、waveOutOpen APIはかなり前から廃止されており、現在は新しいAPIのラッパーになっています。waveOutOpenは、オーディオ出力デバイスが専用に開かれていることを前提としているため、複数回開かれたデバイスが同時に混合オーディオ出力を生成するという保証はありません。このような動作を実現するには、新しいオーディオAPI(DirectSound、DirectSoundに加えてDirectShow、またはWASAPI)を使用することをお勧めします。

于 2011-10-06T16:03:43.070 に答える
0

製品が消費者向けである場合は、DirectSoundを使用することをお勧めします。

DirectX8以降、APIは実際には非常に簡単で、ほとんどのコンシューマーマシンにインストールされるようになります。

于 2011-10-07T09:35:37.617 に答える