3

次のことを行うプログラムがあります。

  1. snd_pcm_open()関数でデフォルトの PCM を開きます
  2. サンプルを送信してサウンドを再生します
  3. snd_pcm_close()関数で PCM を閉じます

プログラムは受信したサウンド要求を定期的に再生しますが、オープンに失敗して「デバイスまたはリソースがビジー状態です」というエラーを返すことがあります。これは通常、多くのサウンド ファイルがある場合に発生します。ただし、ヒヤリハットは必ず成功します。クローズが成功した場合、PCM はすぐに他のユーザーが使用できるようになると思います。また、サウンドを使用するシステムには他に何もないことも付け加えておきます。

閉鎖後に ALSA がまだいくつかのリソースをクリーンアップする必要がある可能性はありますか? PCM インターフェイスは頻繁に開いたり閉じたりするように設計されていませんか? インターネット上のほとんどの例では、起動時に PCM ストリームを開き、シャットダウン時に閉じます。

4

1 に答える 1

3

これを頻繁に開閉しないでください。あなたが使用することができます

snd_pcm_open()一度だけ(アプリケーションの開始とsnd_pcm_close()終了)、ストリームをリセットするときにこれを使用します。

snd_pcm_drop()

snd_pcm_prepare()

dmix は複数のストリームを処理できるため、通常、これはまったく問題になりません。ただし、直接 hw:0 アクセスを使用している場合、close() ステップは何らかの方法で非同期になる可能性があり、すぐに open() がうまく機能しない可能性があります。

于 2010-12-17T21:38:48.960 に答える