« 音が出るまで、のこと その4 | トップページ | ああ、ソースファイルが… »

2014年4月21日 (月)

音が出るまで、のこと その5

PCMデータを再生用バッファに定期的に書き込む関数を実装しました。
リングバッファを実装したクラスのインスタンスsoundBufferを使うので少し違いますが基本的にサンプルと同じです。
void Brynhildr::timerExpired()
{
  if (outputLog)
	cout << "[timer] timerExpired()." << endl << flush;

  if (audioOutput != 0 && audioOutput->state() != QAudio::StoppedState){
	int chunks = audioOutput->bytesFree()/audioOutput->periodSize();
	while (chunks){
	  qint64 len = soundBuffer->size(audioOutput->periodSize());
	  if (len != 0)
		output->write(soundBuffer->get(audioOutput->periodSize()), len);
	  if (len != audioOutput->periodSize())
		break;
	  --chunks;
	}
  }
}


やっと音が出るかと思い、ビルド、実行しました。

曲として聴ける、まともな音がやっと出たのですが、少しおかしいです。画像と音がずれている…それも結構な差。

画像はjpegストリームを受け取ったらすぐさま表示する、音声はデータを受け取ってある程度溜まったら、再生用バッファに書き込む、ということをしています。つまり、デスクトップ画像と音声の同期を全く取っていないのです(^_^;

画像と音声がズレている動画の気持ち悪さは本当にひどいです。

これはどうしたものか…少し考えないといけないか。Brynhildrではどうしているのかを作者の方に聞くのがいいのかも、とも思いますが。

あと、もう1つ。長期間動かすとバッサリ落ちます(^_^; リングバッファ周りの実装で境界値問題が多分発生しているような気がします。送られてくるPCMデータのサイズがまちまちなので、絶妙のサイズのデータが到着することで、微妙なバグが発生しているようです、デバッガで追わないと行けません。

前途多難でございます…

« 音が出るまで、のこと その4 | トップページ | ああ、ソースファイルが… »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: 音が出るまで、のこと その5:

« 音が出るまで、のこと その4 | トップページ | ああ、ソースファイルが… »