2009年7月22日

[alsa-user] ALSA ドライバについて


ALSA 向けのサウンドドライバを開発しています
森本と申します

現在解決できない問題を抱えており,
いろいろ調べましたが分からなかったので質問させて下さい

現在,SH アーキテクチャを使っており

内臓のモジュールを使って音を出そうとしてます

プレイヤーには aplay を使用していて,
音データには wav を使用しています

とりあえず音は出る状況まで来ていますが,
再生してみると

underrun!!! (at least 0.000 ms long)
underrun!!! (at least 0.000 ms long)
underrun!!! (at least 0.000 ms long)
underrun!!! (at least 0.000 ms long)

と出てきて,
0.000 ms の部分が一向に変化する様子がありません

aplay のソースを見てみましたが,
snd_pcm_status_get_state 関数の戻り値がどうやって
変化するかがよく分かりませんでした

また,Linux カーネルの soc-core.c :: soc_pcm_trigger
で音データが渡されてくるタイミングが遅いために音が
途切れ途切れになっています

私のドライバが原因である事は間違いないと思うのですが,

・snd_pcm_status_get_state の戻り値はドライバのどの部分に
 依存して変化するものなのでしょうか?

・trigger で音データが届くタイミングが遅いのですが,
 どのようにすれば早くなるのでしょうか?

また,ドライバを書いていて,よく分からない箇所なのですが

・snd_pcm_period_elapsed 関数はどのタイミングで呼び出せば
 いいのでしょうか?
 私は trigger 関数で渡ってきた substream 内のデータを
 すべて転送し終えた段階で呼び出すものだと思っていましたが
 間違いでしょうか?

・snd_pcm_ops :: pointer 関数が返す値は
 trigger 関数で渡ってきた substream のデータをどれだけ
 転送終了したか? を返すものだと思っていたのですが
 間違いでしょうか?
 (素直に転送済みデータ量を bytes_to_frames で返すと
  aplay が止まってしまいます)


質問ばかりで恐縮ですが
上記について教えていただけますでしょうか?

 以上よろしくお願いします

★゜・。。・゜゜・。。・゜☆゜・。。・゜゜・。。・゜★
ルネサスソリューションズ システム推進部 第2グループ 
博士(工学)森本 國文

投稿者 xml-rpc : 2009年7月22日 18:02
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/86781
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。