10

ALSAを使用してPCMデバイスにオーディオデータを再生したい。例として、このサンプル例をダウンロードしてPCで実行しました。現在サウンドカードを使用しているプロセスが他にない場合は、正常に機能します。ただし、他のプロセスがオーディオデバイスを使用している場合(つまり、メディアプレーヤーが曲を再生している場合)は何も再生されず、次のエラーが表示されます-

Playback open error: Device or resource busy

この例のソースコードを見ると、882行目のsnd_pcm_open関数がこのエラーをスローしていると言えます。別のプロセスが現在デバイスを使用しているため、デバイスがビジーであることが検出されます。

また、逆の方法を試しました。最初に例を開始してから、曲を開始しようとしました。この場合、メディアプレーヤーはアイドル状態のままで、プログレスバーのすぐ横に「アイドル」と表示されます(私はBansheeを使用しています)。私はsnd_pcm_open、他のプロセスがそれを使用できないように、デバイスリソースの排他的権利を取得すると想定しています。

しかし、私はそれを望んでいません。PC内の他のプロセスがオーディオデータを出力するために同じデバイスを共有できるように、排他的権利を必要とせずにオーディオデバイスでサウンドを再生したいと思います。

どうやってやるの?他のプロセスも同じデバイスを共有できるように、PCMデバイスを開くにはどうすればよいですか?

4

5 に答える 5

3

複数のプロセス間でデバイスを共有する方法が見つかりませんでした。dmixプラグインを使用して、構成ファイルを使用して複数の再生ストリームを結合しようとしました.asoundrcが、何らかの理由で機能しませんでした。サウンドカードのデバイスを使おうとしましたdefaultが、うまくいきませんでした。ALSAメーリングリストの推奨事項によると、関数default:CARD=xのデバイス名パラメーターとしてデフォルトのデバイスを開こうとしましたが、システムでエラーが発生しました。どうやらこれを行う方法はありません(誰かが方法を見つけることができたら、この答えを更新してください)。snd_pcm_opendevice not found

次に、ALSAを使用するのではなく、PulseAudioを使用して問題を解決しました。

于 2011-12-08T20:26:19.587 に答える
2

当時のALSAの問題は、デフォルトの出力にミキサープラグインが挿入されていなかったことです。ALSAの最近のバージョンでは、dmixプラグインがデフォルトで出力パスに含まれるようになったため、これは発生しなくなりました。

(を台無しにした場合、またはハードウェアプラグを直接使用するようにアプリケーションに指示することでミキサーをバイパスした場合は、共有サウンドカードの問題を自分で再現できます。JACK~/.asoundrcなどの一部のアプリケーションは、指示がない場合、ハードウェアを直接使用しようとすることに注意してください。それ以外の場合は行います。)

PulseAudioを使用すると、ALSAをバックエンドとして使用し、ミキサーを使用してレイヤーを追加するだけです(そして、おそらく知りたくないこともたくさんあります)。JACKはあなたのためにまったく同じ仕事をします。

現在、ALSAのdmixプラグインがそれを実行するので、PulseAudioやJACKなどのミドルウェアが提供する非基本的なサウンドシステム機能が本当に必要になるまで、それらを取り除くことができます。

参考までに、いくつかの.asoundrcドキュメントを参照してください。

于 2018-01-01T20:55:56.367 に答える
1

たぶんあなたはジャックを使うことができます:http: //jackaudio.org/

于 2011-11-17T14:56:17.837 に答える
1

ファイル/dev/ sndstatを確認します(OSS互換性レイヤーを有効にしている場合)。システム上のALSAデバイスに対応するオーディオデバイスが一覧表示されます。また、/ proc / asound / devicesをチェックして、各デバイスの機能を取得することもできます。

snd_pcm_open()に別の名前を選択して、さまざまな再生デバイス(この例では「plughw:0,0」が開いています)にアクセスしてみてください。これはここからです:

pluginhw:card、device。どちらもパラメータとして、アクセスするハードウェアのカード(ID文字列または数値インデックス)、デバイス、およびオプションでサブデバイスを持っています。

于 2011-11-17T14:52:58.867 に答える
0

最近Audaciousでこの問題が発生し、Audaciousでなんとか修正できたので、他の人の問題に光が当たった場合に備えて、自分がしたことを共有したいと思いました。

症状:

YouTubeタブを開いた状態でFirefoxを開いている場合(実行されていない場合)、Audaciousで音楽を再生しようとするとできません。このエラーが発生します:

alsa snd_pcm_open device busy

また、PCMビットレートの設定などに関連する他の多くのエラーが発生しました。

Audaciousは以下を使用するように構成されました。

PCM Device: hw:0,0 - Generic Analog 
Mixer Device: default - Default mixer dev 
Mixer Element: Master

これを次のように変更しました:

PCM Device: sysdefault: CARD=Generic - HD-Audio Generic, Generic Analog Default Audio Device
Mixer Device: hw: CARD=Generic - HD-Audio Generic Direct control device
Mixer Element: Master

そして、エラーは消えました。したがって、サウンドカードデバイスとアクセスルートの中には、アプリケーション専用のものとそうでないものがあると思います。さまざまなオプションを試してみてください。

于 2021-05-17T08:42:41.887 に答える