19

私はCで書かれたオーディオアプリケーションに取り組んでいます。Windowsでライブオーディオ再生を提供する必要があります。使用するオーディオAPIを決定する必要があります。基本的なwaveOutAPIを使用する予定ですが、ここのコミュニティが推奨するものを確認したいと思いました。

ライブラリをインストールする必要がなく、最近のバージョンのWindowsで正常に動作するコードが必要です。レイテンシーを最小限に抑えたい。

「エフェクト」は必要ありません。アプリケーションが生成するウェーブサンプルを忠実に再生する必要があります。

私の理解では、Windows上のほとんどのプロフェッショナルオーディオアプリケーションはASIOを使用しており、これにより優れた低レイテンシーが得られますが、コードを正常に機能させたいため、ほとんどの人はコンピューターにASIOをプリインストールしていないため、ASIOは必要ありません。 。(後日、戻ってオプションとしてASIOを追加することもありますが、最初に最も一般的なソリューションを選択します。)

私の目的にとってwaveOutよりも優れているものはありますか、それともそれが最良の選択ですか?

4

4 に答える 4

19

それはあなたが何をしようとしているのかによります。基本的なwaveOutオーディオAPIは、オーディオのストリーミングに適しています。これにより、複数のバッファーをキューに入れて、それらを自動的に連続して再生することができます。しかし、オーディオが再生されていて、それを変更したり、何かを追加したりしたい場合、それは比較的難しいことです。

DirectXオーディオは、イベントベースのオーディオに適しています。自分でミキシングをしなくても、同時に複数のことを再生できます。ユーザーが銃の引き金を引いたときにサウンドを再生するなど、オーディオの小さな断片を簡単に追加または削除できます。ただし、ストリーミング(つまり、1つのバッファーを次々に再生する)は困難です。

waveOutは、.mp3ファイルのように一定のオーディオの再生を容易にするように設計されています。DirectXは、ゲームのフィードバックのように、断続的なオーディオ用に設計されています。

ASIOは、プログラミングの難しさという点で、waveOutとDirectXの中で最悪のようであり、それほど安定していません。通常、アプリケーションはオーディオデバイスを共有できません。ただし、そのオーディオハードウェアへのアクセスの遅延は最小になります。ASIOは、複数のデバイスでの再生を同期する方法も提供します。

再生する直前に再生する内容を変更する必要がなく、複数のデバイスを同期する必要がない場合は、ASIOは必要ありません。

于 2010-01-06T01:37:15.413 に答える
5

この質問をしたとき、waveOutAPIとwaveInAPIを使用してストリーミングコードを記述しました。それ以来、私は便利なライブラリを発見しました。

PortAudio http://www.portaudio.com/

PortAudioは、商用に適したライセンスを持つ無料のソフトウェアです。PortAudioを呼び出すコードを書くと、waveOutデバイスだけでなく、WindowsのASIOデバイスでも動作するはずです。その後、Linux用に再コンパイルでき、ALSAデバイスで動作するはずです。その後、Mac用に再コンパイルでき、CoreAudioデバイスで動作するはずです。Macの部分はテストしていませんが、私のプロジェクトはWindowsとLinuxでうまく機能しています。

于 2011-04-28T19:55:46.370 に答える
4

John Knoellerが言及したオプションに加えて、WaveOutよりもはるかに低い遅延を可能にするWASAPIがありますが、残念ながら、WindowsVista以降でのみ使用できます。

于 2010-01-06T09:40:09.123 に答える
2

DirectSoundストリーミングアプリケーションを自分で作成したので、低レイテンシで使いやすいので、確かにそれをお勧めします。また、Windowsのレガシーエディションで再生するためのより高品質のフォーマットを設定できます。

于 2010-01-06T10:06:27.343 に答える