音がでないなぁ
Phononの代わりにQt Multimedia moduleを使うことは分かりましたが、参考書は使えませんので自力で試していくしかありません。一応googleで検索しますが、ピンポイントには難しそうです。
まずは、Qt Assistantですね、やはり。「Qt Multimedia」で検索します。
提供されているクラスライブラリを眺めます。「QAudioOutput」がそれっぽいでしょうか。リンクをクリックして「QAudioOutput」へ移動します。「お、サンプルソースが載っている」これを参考にすれば音が出るのかも。
サンプルソースを読んでみると、どうやら音声ファイルを読み込んで、再生の開始を指示して一端関数は終わって、再生が終わったら特定の関数が呼び出されて終了処理をするという手順のようです。ということは、Brynhildrサーバさんから届いたデータを届いたデータの順にどんどん再生すれば、結局一連の音声データが再生できそうな感じですね。
現在の実装では、音声データは到着順にファイルにどんどん上書きしてくことにしています。サーバさんが送ってくる音声データは今回の場合(Windows7 NotePC)サンプルレート48000Hzで10KB以下に抑えられているようです。本当はファイルに落とすことは無駄なのですが、チェックのためにそのようにしています。
ところがそのようにしたことで、今はトラブっています。お気づきだと思いますが、ファイルを指定して、音声再生を指示すると後は、バックグラウンドで音声再生が行われます。しかし、次々と音声データは送られてくるわけで、どんどん同じファイルに上書きしているのです。このため、ファイルのオープンやサウンドデバイスのオープンでタイミングが悪いと失敗します。その結果音声がブツギリで聞こえてしまい、最後にはQt5さんの内部データに不整合が起こって、ぶつっとアプリケーションが終了します(^_^;
ま、これはファイルにしたからということでもなく、メモリ上にデータ置き場を作っても同じ状況が発生します。これを避けるにはデータの上書きが起こらないように適切に調整することが必要となりそうです。
少し落ち着いて考える必要がありそうです。
今回のテストではローカルのVMware Workstationでサーバを走らせると音が出ているのか分からないので、ノートPCを利用してます。
音はぶつ切れにしか出ていません(^_^; #動画はYoutubeで公開されているもので、たいした意図はありません(^_^; テストのためループ中。
おまけ
最初音声ファイルの内容を耳で確認しようとしました。
生のPCMファイルを聞くためのツールを知らなかったので、VLCというメディアプレイヤーを利用しようとしましたが無理です。生のPCMファイルなので、どんなデータか分からないのですから当然です。
どのような音声ファイルかを知らせるために、ファイルの先頭にヘッダを付ける必要があります。なんかRIFFという形式のヘッダーをつけるそうです。が、WikipediaでRIFFを調べても、いまいち分かりません…最小単位のチャンクと呼ばれるものが幾つかあるらしいのですが…
こういう時はgoogleさんで調べましょう。「raw 音声 変換 wav」で調べてみます。
下記のURLが先頭にありました。
http://www.xucker.jpn.org/pc/sox_raw.html
どうやら、オープンソースで提供されているsoxというツールで生のPCMファイルをWAVファイルに変換できるようです。幸いなことに普段使っているcygwin(x64)の中にすでにsoxは提供されているようです。
ただ、上記のページは古いsoxに関する記述のようなのでman soxとして確認しました。
例えば、サンプルレート48000Hz 16bit ステレオ 2ch の場合だと以下のようにすればwavファイルに変換できます。
sox -r 48000 -b 16 -c 2 -e unsigned-integer -t raw test.pcm test.wav
バイナリエディタでみると最初の4バイトが"RIFF"となっていて8バイト目から"WAVE"となっているので".WAV"ファイルに変換されているようです。
と、ここまでくれば音が聞こえると思ったのですが、VLCで再生しても、どう再生しても、何も聞こえず、速攻で終了します。
16bit、ステレオ2ch、サンプリング・レート 48000Hz、データサイズ 10KBの音声データがどのくらい長さなのかを考えれば、まず最初に気づくべきでした。あまりに短すぎて、人間の耳では聞き取れません…
今の状態はこんな感じです。画像自体は滑らかなんですが、音がだめだめです。
ホントはこんな画像と音声が出ます。これはBrynhildrの最新バージョンです。
ローカルLANです、念のため。
« いちおう画像データのことも載せておこう | トップページ | Linux 64-bit 再び »
コメント