ホワイトノイズを発生させたいと思います。
前衛かっΣ
「Build a white noise generator」のチュートリアルを進めていきます。いくつかのチュートリアルで基本となるチュートリアルとして挙げられていましたので、こちらのチュートリアルを進めることにしました。
アプリの音声処理の基本的な部分は、以前Audioの項目でも勉強させてもらいましたが、こちらも基本から説明されていましたので、もう一度復習も兼ねて勉強してみました。まずは、ダウンロードできるプログラムについて確認と、チュートリアルの序章に記載されているJUCEの関数での音声処理についてまとめてみました。
こんな人の役に立つかも
・JUCEフレームワークに入門したい人
・JUCEで音声プログラミングを学びたい人
・JUCEの「Build a white noise generator」チュートリアルを進めている人
ダウンロードできるzipファイルのプログラムについて
「Build a white noise generator」のチュートリアルでダウンロードできるソースコードは、「SimpleSynthTurorial_01.h」〜「SimpleSynthTurorial_03.h」の3種類存在しています。チュートリアルのドキュメントで実装を行う部分は「SimpleSynthTurorial_01.h」の内容に該当するようです。02、03では、少しだけ応用になっています。
ざっと見た感じですが、01~03にかけて、次のように機能追加されているようです。
SimpleSynthTurorial_01.h:アプリを起動したら一定音量のホワイトノイズが発生し続けます。
SimpleSynthTurorial_02.h:ホワイトノイズの音量をスライダーで変化させることができます。音量値もラベルに表示します。
SimpleSynthTurorial_03.h:ホワイトノイズの音量変化で発生するノイズをなくすため、変化後の音量へ滑らかに変化させてる仕組みを追加します。
ところどころ、他のチュートリアルで行なった点も重なるような部分はありますが、基本的な部分を抑えることができそうなチュートリアルになっています。
チュートリアルの文章にはないけれど、02と03はソースコードの実装を参考にして機能追加していくことができます。
オーディオアプリのライフサイクル
チュートリアルでは、the audio application lifecycleの項目で、アプリの音声処理の関「prepareToPlay」「releaseResources」「getNextAudioBlock」関数について触れています。
JUCEの音声処理アプリで音声処理の中心となる3つの関数です。
MainComponentクラスでの音声処理関数
prepareToPlay関数:音声処理スタート前に呼び出されます。(基本的にアプリ開始時です。)
releaseResources関数:音声処理が終了した時点で呼び出されます。(基本的にアプリ終了時です。)
getNextAudioBlock関数:オーディオハードウェアが新しい音声ブロックが必要になるタイミングで呼び出されます。
getNextAudioBlock関数のタイミング
例えば、CD音質(44.1kHz16bit)で音声を再生する場合は、16bit(0~65535)のゲイン値を1秒かんに、44100回出力する必要があります。
このとき、オーディオバッファ(またはブロック)が、512サンプル毎に作成する場合は次のようなイメージで作成されます。オーディオバッファのサイズは、DAWとかで設定するやつですね〜。
LとRの2チャンネルの出力が必要な場合、それぞれの出力に対してバッファが必要となります。音声を出力するハードウェア(サウンドカードやインターフェースなど)はオーディオバッファを順次出力していきます。getNextAudioBlockはハードウェアがオーディオバッファを必要な時に、一定間隔毎に呼び出され、オーディオハードウェアに音声出力のオーディオバッファを提供するようです。
ソフト的な関数の動作タイミングなどについては、以前Audioのチュートリアルで行った検証でも、実際にどのようなタイミングで関数が実行されているのかプログラムを動作させていますので、ご参考ください。
だんだん学術的になってきた・・・
その他の重要な関数
setAudioChannnels()
コンストラクタで呼び出して、音声入力と音声出力のチャンネル数を設定します。
この関数がアプリの音声処理の開始トリガーとなります。
shutdownAudio()
音声処理の終了を呼び出す関数です。この関数はアプリのデストラクタ「~MainComponent()」で呼び出されます。
プログラムの準備
今回のチュートリアルは、次のように、ProjucerでAudioの枠を利用して作成していきます。
今回は、概要的な部分を進めました。次回から、ホワイトノイズを発生させるアプリケーションの実装を行なっていきたいと思います。