wavファイルの再生、サンプラーなどを作るには必須の技術ですね。
音声の再生、とても基本で役に立つよね
JUCEチュートリアルの「Audio」項目の「Build an audio player」を進めていきます。
公式のチュートリアルページはこちらとなります。
こんな人の役に立つかも
・JUCEフレームワークに入門したい人
・JUCEプログラミングでオーディオアプリを作成したい人
・JUCEで音声再生を行いたい人
作成するアプリケーションの概要
チュートリアルで作成できるオーディオアプリは次のような機能です。
①音声ファイル読込みの機能
「.wav」ファイルを読み込みます。
②音声ファイル再生の機能
音声ファイルが読み込まれると押すことができるようになります。読みこんだ音声ファイルを再生するボタンになります。
③音声ファイル停止ボタン
再生中の音声ファイルを停止します。
チュートリアルで利用するクラスや関数
チュートリアルでは、最初に利用しているクラスの紹介があります。私自身、完全に理解ができているわけではないのですが、まずは、こんなクラスがあるんだな、という程度に見ていきました。
実際にプログラムを見ていくうえでクラスの役割も明確になっていけばいいかな、というような感覚で進めています。
AudioAppComponentクラス
音声を扱うときに便利な「AudioSource」クラスというものがあるようです。
チュートリアルでは、MainComponentというクラスを作成して「AudioAppComponent」を継承します。さらに、AudioAppComponentクラスは、AudioSourceクラスを継承しています。
また、AudioAppComponentクラスは、「AudioSourcePlayer」オブジェクトを含んでいるという点が重要とのことです。
AudioSourcePlayerは、AudioAppComponentクラスとオーディオハードウェアの間のストリーミングを担うオブジェクトらしいのです。
このような複数の音声を扱うクラスを利用して、アプリ作成の際には、「getNextAudioBlock」という関数からAudioSourceを連続して呼び出すことで、音声を簡単に扱うことができるとのことです。
オーディオフォーマットについて
JUCEでいろいろな形式のサウンドファイルを読み書きするためのツール群です。
AudioFormatManager
このクラスを利用して、wavやAIFFなどのオーディオ形式に合わせた適切なオブジェクトを作成できます。
AudioFormatReader
よりハードウェアレベルに近い音声ファイル(一般的にfloat型の配列)を扱うためのクラスです。このクラスは、AudioFormatManagerが特定のファイルを開くときに、インスタンスとして作成されます。
AudioFormatReaderSource
このクラスは、AudioSourceクラスのサブクラスとのことです。AudioFormatReaderオブジェクトから音声データを読み取ってgetNextAudioBlock関数を呼び出してオーディオをレンダリングすることができるクラスです。
AudioTransportSource
このクラスも、AudioSourceクラスのサブクラスとのことです。AudioFormatReaderSourceクラスのプレイバックを操作できるクラスです。AudioFormatReaderSouceの再生開始位置や停止位置の情報も含まれるとのことです。サンプルレートの変換や、あらかじめ音声をバッファリングしたりもできるようです。
現段階でいくつかクラスが出てきましたので、今の文章から、JUCEで音声の生データを取得する流れでのクラスの関係性を図にしてみました。
現段階でのクラスの役割のイメージです。このイメージを持ちながら、チュートリアルを進めたいと思います。