[Armadillo:09148] Re: Armadillo800EVAでの音声ストリーミング再生がすぐに止まります

nakai email@hidden
2013年 8月 29日 (木) 12:56:22 JST


nakaiです。

> ●問題
> parec --device="bt device name" | aplay -f cd -V mono

状況から推測すると、パイプした場合にデータが間に合っていない(underrun)ようですね。
パイプのところを数フレーム分バッファリングできれば解決しそうな感じだと思います。

aplayの下記のオプションなどを利用すると状況は変わりますか?

-B, --buffer-time=#     buffer duration is # microseconds
    --buffer-size=#     buffer duration is # frames


(2013年08月28日 22:32), Takeshi Inoue wrote:
> 井上と申します。
> 
> Armadillo800EVAにUSB Bluetoothドングルを指し、
> Android携帯の音楽を、BluetoothのA2DPにてArmadilloを
> 経由して再生させようとしていますが、音がすぐ途切れます。
> 
> どうも、fsi-wm8978のサウンドドライバに問題がある可能性が
> あるのではと考えています。
> 
> ●確認できていること
> 
> カーネルはat2 (+マルチメディア評価パッケージ)ベースで
> Bluetooth周りを有効にし、
> 
> 1) hciconfig で、Bluetooth USBドングルの認識を確認
> 2) bluetooth-agentを起動してAndorid携帯(Galaxy Nexus)とのペアリングを確認
> 
> また、pulseaudioを使用し
> 3) parec --device="bluetooth device name" > audio.dat
>  で、Android携帯側のミュージックプレイヤーで再生した音声をファイルに録音
> 4) aplay -f cd -V mono audio.dat にて、上記録音データのArmadilloでの再生を確認
> (30秒程度録音して確認)
> 
>  以上より、単体レベルでの動作は確認できています。
> 
> ●問題
> 
> 上記3)4)をパイプでつなげて
> parec --device="bt device name" | aplay -f cd -V mono
> を実行すると、1〜2秒で再生が停止し、しばらくして
> aplay: pcm_write:1609: write error: Input/output error
> のエラーが出ます。
> 
> ●確認したこと
> 
> a) alsa-utilsのaplay.cを修正し、libalsaのsnd_pcm_writei()を呼び出している部分に
>  printfを仕込んで動作を確認したところ、
> 
>  耳に聞こえるレベルでの音声停止が発生
>  -> snd_pcm_writei()で2KB単位の音声データ書き込みはその後も数回正常終了
>  -> snd_pcm_writei()がブロックされる
>     -> 数秒して-5 (-EIO)が返される。
> 
>  という状況でした。EIOを返すまではsnd_pcm_writei()は全て正常終了です。
> 
> b) また、aplayに-Nオプションを追加して、non blocking modeでも
>  試してみましたが、この場合はEIOの代わりにEAGAINが返され続ける状況です。
> 
> c) parec --device="bt device name" | aplay -f cd -V mono -r 24000
>  と、aplayの再生レートだけを試しに無理やり半分にしてみたのですが
>  (もちろん)再生速度は半分になるものの途中で止まらず再生が続きます。
> 
> d) aplayで再生に指定するデバイスを、HDMI側にしてみたところ
>  止まらずに再生できています(ただし、当方の環境では、モニタ側が
>  HDMI信号を認識せず、実際に音が出るかは確認できていません。
>  aplayの-V monoオプションで再生レベルをリアルタイム表示させて
>  動作確認しています)。
>  また、再生デバイスをnullデバイスにした場合も正常です。
> 
> c)alsa周りのソースを目視でちょっとだけ追ってみましたが、
>  sound/core/pcm_lib.c: snd_pcm_lib_write1()中の
>  snd_pcm_playback_avail()でバッファ空きを待っているのが
>     タイムアウトすると、a)で見られたようにEIOのエラーコードを返すようです。
> 
> 以上から、fsi-wm8978のサウンドドライバに何らかの問題
> (上記 cから考えると、underrunが起きた場合の処理?)がある
>  可能性を考えていますがいかがでしょうか。
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
> 




armadillo メーリングリストの案内