9

オーディオのライブストリーミングを必要とするアプリケーションの開発を検討しています。それぞれのOSのSoundAPIを使用して作成することはオプションですが、CまたはC ++で作成されたクロスプラットフォーム(windows / linux / BSD)のオープンソースライブラリを使用することをお勧めします。

SFML、SDL、PortAudioなどのさまざまなサウンドライブラリについて少し読んだことがあります。確かに、私はまだFreeBSDとLinuxのSoundについて十分に研究していません(これら2つの間でどれほど似ていますか?)

主な要件は次のとおりです

  1. 選択したマイク/マイクから音声を取得してネットワーク経由で送信し、
  2. 選択した出力デバイスにデータを送信し、
  3. サウンドを処理します(フィルタリング、ノイズのクリーンアップ、ストリームの多重化など)が、オーディオデータを取得したらこれを実行できます。ライブラリ自体がこれを実行できる必要はありません。
  4. レイテンシーが適度に低い

私の主な懸念は、これらの言及されたAPIが主にゲームを対象としているように見えることです(サウンドは通常ディスクからロードされ、録音と再生の間で同等の重要性を持つネットワークを介してストリーミングされるのではなく、サウンドレコーディングが含まれることはほとんどありません。

これらまたは他の健全なAPIに関して、または長い道のりを進み、それぞれのOSのAPIにこれを実装することの長所/短所について、誰かがポインタ/警告/提案を持っていますか?

注:「本、ツール、ソフトウェアライブラリ、チュートリアル、またはその他のオフサイトリソースを推奨または検索するように求める質問は、Stack Overflowのトピックから外れています」と考えると、質問はトピックから外れます。彼らは意見のある回答やスパムを引き付ける傾向があります」と私はこの質問を閉じるべきではないと思います。説明されているようなライブラリを探している人は、何かを見つけるのに苦労するでしょう。この質問への回答は、利用可能なすべてのオプションを実質的に要約しています。したがって、これは「一般的にカバー...プログラマーが一般的に使用するソフトウェアツール」に含まれます。受け入れられた回答のカテゴリ。

4

5 に答える 5

7

PortAudioは、説明しているアプリケーションに最適です。PortAudioは、これらすべてのプラットフォームで実行され、Cで記述されており、低レイテンシーを提供し、コールバックとブロッキングI/Oオプションの両方を備えています。それは間違いなくあなたの要件を満たし、特にゲームを対象としていません。実際、ゲームに適したAPIは他にもありますが、PortAudioは、VoIPのようなアプリケーション、オーディオプレーヤー、プロオーディオアプリケーション、オーディオレコーディング、ソフトウェア無線などの汎用オーディオI/Oに適しています。等

あなたが検討するかもしれないもう一つのオプションは、私があまりよく知らないRTAudioです。私の理解では、それは少し単純で(I / O AFAIKをブロックしない)、モバイルOSを含むより多くのプラットフォームをサポートしていますが、PortAudioの人々はそれに取り組んでいます。

FreeBSDとLinuxについてのあなたの質問:LinuxはALSAを使用しますが、他のUNIXはOSSを使用します。OSSとALSAはどちらも互換性レイヤーを提供するため、ALSAにはOSS互換性があり、その逆もありますが、私の経験では、両方の互換性レイヤーにバグがあります。でも、最後に使ってから状況が良くなったのかもしれません。

一部のLinuxデスクトップは、ALSA上でPulseAudioを実行します。これがFreeBSDに当てはまるかどうかはわかりません。何らかの理由で、ALSAはほとんどのシステムでデフォルトで排他モードで構成されています。これは理論的には簡単に修正できますが、設定ファイルは奇妙で、ほとんどのユーザーはこれを行っておらず、今後も行うことはありません。つまり、PulseAudioが引き継ぐと、ALSAデバイスに直接アクセスできなくなるため、ユーザーに構成を変更させたい場合を除いて、PulseAudioドライバーも同様です(アプリケーションが非常に低いレイテンシーを必要とする場合はそうするかもしれません)。

PortAudioは、Webサイトで何を言っているかどうかにかかわらず、PulseAudioをサポートしていると確信しています。メーリングリストで質問し、ここで更新します。

更新:メーリングリストの誰かが、Alsaドライバーを使用してPulseAudioにアクセスできると考えました。それは私にとって(素晴らしい!)ニュースですが、それはあります。

于 2012-06-22T16:27:06.560 に答える
2

SDLとOpenALは一般的であり、広くサポートされていると思います。これらがニーズを満たさない場合を除いて、プラットフォームの独立性が失われるため、下位レベルには進まないことをお勧めします。

彼らがゲームを対象としているように見える理由は、それがより難しいユースケースの1つだからです。したがって、ゲームの可能性をサポートできる場合は、別のアプリが必要とするもの(スタジオソフトウェアを除く)をサポートすることになります。

低遅延の目標を検討してください。ゲームは、効果音が画面上のアクションとうまく一致することを保証するために、非常に低い待ち時間を必要とします。これはあなたがこれを望んでいるのと同様の理由だと思います(あなたのサウンドはあなたのビデオストリームと一致し、音声チャンネルに一時停止はありません)。

ところで、ゲームに対するあなたの認識は正しくありません。多くのゲームには、チームコミュニケーション用のユーザー音声チャネルがあります。さらに、手続き型サウンドと効果音が含まれる場合があります。


録音サポートを含むSFMLという別の呼び出しを見つけました。私はそれについてあまり知りませんが、それがSDLに取って代わることができるのを見ました。

于 2012-06-22T07:20:08.337 に答える
2

libsoundioは、要件に適合する低レベルのCライブラリです。

注意点:OSS(FreeBSD)またはsndio(OpenBSD)はまだサポートされていません。

于 2015-10-24T19:30:44.330 に答える
1

クロスプラットフォーム(Linux / Mac / Windows)のQtフレームワークで、独自のQtライブラリを使用して開発することを強くお勧めします。QtMultimediaモジュールでは、QAudioInputを使用してマイクから生のオーディオをキャプチャできます。処理。

Qtフレームワークは、マルチメディアおよびゲームアプリケーション用に非常に最適化されているため、パフォーマンスを失うことはありません。

于 2012-06-22T07:53:21.660 に答える
-1

linphoneには、まさにこの目的のためにmediastreamer2が含まれています

于 2012-07-08T10:36:51.127 に答える