6

Linuxで、ALSA(カスタムデバイスに接続)を使用して再生と記録の両方を利用するプログラムを作成しています。データの読み取りと書き込みの両方に非同期コールバックアーキテクチャを使用したいと思います。

ただし、コールバック内で許可されていることの制限に関する情報を取得できませんでした。具体的には、非同期セーフである必要がありますか?もしそうなら、これは何ができるかを厳しく制限しているようです。とりわけ、グローバル変数を参照するべきではないため、たとえば、実行のメインスレッドで満たされたバッファからの読み取りや書き込みがかなり難しくなります。バッファに保存され、その後、コールバックの外部でファイルに保存されます。

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

人々がこれに耐えることができる洞察に感謝します。

4

1 に答える 1

3

この回答が人々によってALSAに対して過度に否定的であると見なされるかどうかはわかりませんが、とにかくそれを示します.

私は必死になって、いくつかの非同期アプリケーションで ALSA を使用しようとしました。非常にバグが多く、文書化が不十分で、使いづらかったため、何日も懸命に機能させようとした後、最終的にあきらめました。

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

振り返ってみると、ALSA は驚くほど複雑で、設計しすぎで、バグが多く、文書化が不十分で、設計者が事前に考えていなかった I/O 多重化技術と互換性がありません。なぜそれが Linux の標準になったのか理解できません。他の Unix オペレーティング システムではるかに単純で優れた設計が利用できる場合。

于 2012-02-28T23:54:57.327 に答える