音が出るまで、のこと 最後 その3
ログを少し詳細に出しました。再生バッファへの書き込み間隔は60msです。
Boot : QDateTime("2014-04-26 10:22:32.926 JST Qt::LocalTime") Assertion SUCCESS : brynhildr.cpp : LINE : 253 [control] Connected for control. [graphics] Connected for graphics. [sound] Connected for sound. [sound] stop : IdleState [timerExpired()] output: bytesFree(): 38400 [timerExpired()] output: periodSize(): 7680 [timerExpired()] : chunk (5) [sound Buffer] get(int len) : size = 11520 : len = 7680 [sound] stop : ActiveState [timerExpired()] : chunk (4) [sound Buffer] get(int len) : size = 3840 : len = 7680 [timerExpired()] output: bytesFree(): 23040 [timerExpired()] output: periodSize(): 7680 [timerExpired()] : chunk (3) [sound Buffer] get(int len) : size = 7680 : len = 7680 [sound] stop : IdleState [timerExpired()] output: bytesFree(): 38400 [timerExpired()] output: periodSize(): 7680 [timerExpired()] : chunk (5) [sound Buffer] get(int len) : size = 13312 : len = 7680 [sound] stop : ActiveState [timerExpired()] : chunk (4) [sound Buffer] get(int len) : size = 5632 : len = 7680 [timerExpired()] output: bytesFree(): 30720 [timerExpired()] output: periodSize(): 7680 [timerExpired()] : chunk (4) [sound Buffer] get(int len) : size = 11520 : len = 7680 [timerExpired()] : chunk (3) [sound Buffer] get(int len) : size = 3840 : len = 7680 [timerExpired()] output: bytesFree(): 23040 [timerExpired()] output: periodSize(): 7680 [timerExpired()] : chunk (3) [sound Buffer] get(int len) : size = 15360 : len = 7680 [timerExpired()] : chunk (2)
bytesFree()とあるのが、書き込み時の再生バッファの空きサイズです。再生バッファ自体のサイズは38400バイトのようです。"bytesFree"でログをgrepしてみます。
$ grep bytesFree log_60.txt [timerExpired()] output: bytesFree(): 38400 [timerExpired()] output: bytesFree(): 23040 [timerExpired()] output: bytesFree(): 38400 [timerExpired()] output: bytesFree(): 30720 [timerExpired()] output: bytesFree(): 23040 [timerExpired()] output: bytesFree(): 23040 [timerExpired()] output: bytesFree(): 30720 [timerExpired()] output: bytesFree(): 38400 [timerExpired()] output: bytesFree(): 15360 [timerExpired()] output: bytesFree(): 23040 [timerExpired()] output: bytesFree(): 38400 [timerExpired()] output: bytesFree(): 23040 [timerExpired()] output: bytesFree(): 38400 [timerExpired()] output: bytesFree(): 15360 [timerExpired()] output: bytesFree(): 38400 [timerExpired()] output: bytesFree(): 30720 [timerExpired()] output: bytesFree(): 23040 [timerExpired()] output: bytesFree(): 38400
再生バッファがあまり効率よく埋められていないようです。空きサイズが38400バイトということはバッファが空だった(で、再生がストップしていた)ことを示します。
ここでQtのサンプルソースaudiooutput.cppを思い出しました。PullモードとPushモード…
現状の実装はサンプルソースでいうところの、定期的に自発的にデータを転送するPushモードです。Pullモードは、必要になった場合にデータがPullされるモードのようです。自発的にバッファを効率よく書き込むには通信速度、CPUの処理速度などを考慮する必要があり、難しそうです。それなら必要になった時点でPullしてもらうほうがいいのではないでしょうか?
« 音が出るまで、のこと 最後 その2 | トップページ | 進捗記録 2014.4.26 »
コメント