[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 メーリングリストの案内