GNU/Linux >> Linux の 問題 >  >> Linux

ALSA:スピーカーのアンダーランを防ぐ方法

このコードはタイトなループで実行され、snd_pcm_writen() でブロックすることを意図していると思います .サンプルレートは指定されていません。数字はすべてき​​れいに割り切れるので、48kHz だと思います。

私がここで行っていると思うことは次のとおりです:

  • snd_pcm_write() 提供されたすべてのフレームを書き込むことを保証するものではありません (戻り値はエラー状態についてのみチェックされます)。 snd_pcm_avail() のログから判断 実際には avail_min を消費しています または 144 それぞれにフレーム。これは 3 ミリ秒のオーディオです。
  • この時点でオーディオが実行されていないと仮定すると、2 回の書き込みの後、バッファ内のフレーム数は start_threshold になります。 - 288 で サンプル;音声出力開始
  • printf() の呼び出し ブロックして、 snd_pcm_avail() を覚えているようです オーディオ出力ハードウェアと同期する必要があり、ブロックする可能性もあります。再生より 6 ミリ秒進んでいるため、snd_pcm_writen() の 3 回目の呼び出し時にバッファが枯渇している可能性は十分にあります。

要約すると、 printf() を呼び出すべきではありません この時点で、おそらく snd_pcm_writen() という事実を補う必要があります pSpeakerBuf のすべてのフレームを消費していません


Linux
  1. Tracktion 7 –音楽クリエーター向けのフル機能のデジタルオーディオワークステーション

  2. オーディオ録音と編集のための10の最高のAudacityの選択肢

  3. 高負荷用のsysctl設定とDDoS防止

  1. LosslessCut –ビデオとオーディオのトリミング/カット用の超高速ツール

  2. 静かなオーディオフェード–仕事で最も静かな音量レベルを取得

  3. Audacious –Linux用の高度なオーディオプレーヤー

  1. Ardour –サウンドを録音およびミキシングするためのオーディオエディタ

  2. SMPlayer –すべてのフォーマットに対応した無料のメディアプレーヤー

  3. Sayonara Player –Linux用の高速で軽量なオーディオプレーヤー