クラスを覚えてるかな?オーディオストリームもそれと似たようなものです。オーディオストリームは音声ファイルを再生しません。音声ファイル以外のデータのストリーム再生をします。サポートしてない音声形式、などなど。クラスもオーディオストリームクラスの一種です。今回は「ストリーミング再生」に関するお話です。オーディオストリームの出番はありません。クラスで再生するとよいです。sf::SoundStreamではさっそく、オーディオストリームのクラスを作っていきましょう。継承したクラスを用意するのです。オーバーライドするべき仮想関数は2つ。必要なときに、ベースクラスから毎回呼ばれます。リターンしてあげましょう。再生停止、ということです。音声サンプルのコピーを内部に作成します。必要ないなら元のデータを手元に保存しておかなくても大丈夫です。呼ばれたときに呼ばれます。現在の再生ポジションを変更するためです。引数は新たな再生ポジション(時間)を表してます。サウンドの冒頭からの時間です(現在位置からの差分ではなく)。オーディオデータの性質によっては、この関数の中身は実装できないことがあります。その場合は中身を空のままにしておいてください。クラスの仕様として、再生ポジションの変更はサポートされてないことにしておくのです。オーディオストリームクラスが大体出来上がってきました。知りたがってる情報は2つ。チャンネル数と、サンプリングレートです。これらのデータがそろうことで、期待通りの動作をしてくれます。初期化されたタイミングなど)。どんなタイミングでこの処理をするかは、キミが作るストリームクラスの目的次第です。);スレッドにまつわる問題オーディオストリームは内部的に別スレッドで実行されます。オーディオストリームクラスを使っているスレッドと同じスレッドで実行されるということです。内部で作るスレッドから、繰り返し呼ばれ続けます。アクセスが衝突しないようにそのデータを保護してあげる必要があります(ミューテックスなどの排他制御で)。アクセスが衝突すると、思いがけない事件が起きてしまうかもしれません(再生データが壊れるとか、クラッシュするとか)。スレッドについて、もっとよく知りたいキミはスレッドのチュートリアルを読んでくださいませ。作ったオーディオストリームクラスを使ってみるさて、これでキミの独自のオーディオストリームクラスの出来上がりです。チュートリアルとほとんど同じです。いった関数で再生処理を制御できます。ボリュームやピッチの指定もできます。APIドキュメントやオーディオ関連の他のチュートリアルを読んでね。シンプルなサンプルカスタムオーディオストリームのとってもシンプルなサンプルです。音声ファイルを読み込んで、サウンドバッファのデータを再生します。いわゆる車輪の再発明なのですが、あくまでサンプルなので、動作の仕組みに注目するのだ。適当な値にするよりは何らかの固定値にしておく方が安全です。今回のサンプルをストリーミングして、続行。未処理のサンプルをストリーミングして、再生を停止。サンプリングレートとチャンネル数に合わせて、サンプルのインデックスを求める。終点に達するまで演奏を続ける。チュートリアル目次]。