2012-02-28 23 views
3

私は(カスタムデバイスに接続されている)ALSAを使用した再生と録音の両方を利用してLinuxでプログラムを書いています。データの読み書きの両方に非同期コールバックアーキテクチャを使用したいと思います。ALSA PCMコールバックにはどのような制限がありますか?

しかし、私はコールバック内でできることの制限に関する情報を得ることができませんでした。具体的には、私は同期安全でなければならないのですか?もしそうなら、これは例えば、実行のメインスレッドによって満たされているバッファから読み出しまたは書き込み、重度にかなりハードそれを作る、とりわけ、私はすべてのグローバル変数を参照しないはずなので、何ができるかを制限するようですその後、コールバックの外側のファイルに保存されます。

メインスレッドとグローバルの使用を調整するためにALSAコールバックで使用できるC並行構成はありますか?たとえば、POSIXセマフォを使用できますか? ALSAのコールバックがメインスレッドに関してアトミックであるという保証はありますか(他のALSAコールバックに対してアトミックではないことはわかっています)。

人々がこれに耐えることができる任意の洞察に多くの感謝。

+2

ちょうどあなたが知っているように、ここではこれらのAPIを使用すると良いアイデアではないかもしれない理由を説明したリンクです。 http:///0pointer.de/blog/projects/guide-to-sound-apis.html – ldav1s

+0

ありがとう!非常に有益。悲しいことに、それはサードパーティのデバイスのためだから、私はALSAに固執しています。 –

+0

しかし、あなたは非同期APIに悩まされていますか? – ldav1s

答えて

3

この回答がALSAに対して過度に否定的であるかどうかはわかりませんが、とにかく教えてください。

私は、いくつかの非同期アプリケーションでALSAを使用することを切望しました。それはとてもバグがあり、文書化されておらず、使用するのが難しいものでした。

私はALSA OSSエミュレーション層を使い、サウンドデバイス用のfdを開き、非同期コールバックを実行する方法としてlibeventを使用しました。このソリューションは私にとって完璧に機能し、結果に非常に満足していました。

ALSAは驚くほど複雑すぎて、設計が複雑で、バグがあり、文書化が困難で、設計者があらかじめ考えていなかったI/O多重化技術と互換性がありません。 Linuxシステムの標準であり、他のUnixオペレーティングシステムでははるかにシンプルで優れたデザインが利用可能です。

+0

この答えをありがとう。残念ながら、非ALSAソリューションは選択肢ではありません(私は、ALSAデバイスドライバを備えたDAC/ADCを含むマルチチャネルデバイスへのインタフェースとしてALSAを使用しています)。あなたの代わりにALSAのAPIを使用してあなたのAPIとしてOSS互換レイヤーを使用することができます - –

+2

あなたはALSAドライバを使用する必要がちょうどので、あなたがALSA APIを使用する必要が意味するものではありません。それが私の行いなのです。 – Perry

+0

ああ!私はそれを認識しませんでした。私は今それを見上げるでしょう。ありがとう。一部のLinuxプラットフォームで –

関連する問題