チュートリアルオーディオレベルのコントロール
このチュートリアルでは、オーディオを処理して出力レベルを変える方法を説明します。これは、低レベルのオーディオサンプルデータを処理することで実現します。
レベル:中級
プラットフォーム:Windows, macOS, Linux
クラス: AudioAppComponent,Random,AudioSourceChannelInfo,AudioBuffer,Slider
スタート
このチュートリアルはTutorial: Build a white noise generatorを読んで理解しておく必要がある。また、以下の操作に慣れていることを前提としている。Sliderオブジェクト(参照Tutorial: The Slider class).
このチュートリアルのデモ・プロジェクトのダウンロードはこちらから:PIP|ZIP.プロジェクトを解凍し、最初のヘッダーファイルをProjucerで開く。
このステップにヘ ルプが必要な場合は、以下を参照してください。Tutorial: Projucer Part 1: Getting started with the Projucer.
デモ・プロジェクト
デモ・プロジェクトでは、ホワイト・ノイズ・ジェネレーターの出力レベルを制御するために使用できるスライダーを1つ含むウィンドウが表示されます。これは次のスクリーンショットに示されています。
IDEからプロジェクトを実行し、発生するホワイトノイズのレベルを実際にコントロールできることを確認してください。
乗算としてのレベルコントロール
コードを見て、次のことに気づくかもしれない。MainContentComponent
クラスはないを継承する。Slider::Listenerクラスの 値を取得します。実際、スライダーの値はgetNextAudioBlock()
関数が呼び出される:
void getNextAudioBlock (const juce::AudioSourceChannelInfo& bufferToFill) override
{
auto level = (float) levelSlider.getValue();
このような単純なアプリケーションでは、このテクニックは許容範囲ですが、より複雑なアプリケーションでは、ほぼ間違いなく別のテクニックを使いたいでしょう。オーディオ処理システムを制御する値は、UIコントロールにのみ保存するのではなく、アプリケーションの "データモデル "に保存する方が良いでしょう。
と呼んでも構わないがSlider::getValue()でのgetNextAudioBlock()
ファンクションユーべからずを呼び出す。Slider::setValue()関数は、このgetNextAudioBlock()
関数で実行されます。これは、このコードがオーディオスレッド上で実行されているためです。オーディオ・スレッドからUIオブジェクトの状態を変更するようなことはしてはいけませんが、UIオブジェクトの状態を問い合わせることは、副作用がないことを確認している限り、許容されます。
スライダーで指定されたレベルのホワイトノイズを生成するには、基本的な演算を行う必要がある。そのRandom::nextFloat()関数は常に0.0から1.0の間の値を生成する。これをオーディオ波形としてプロットすると、次のようになる:
これにアプローチする簡単な方法は、まずノイズをスケーリングし、常に-1.0から1.0の間でスケーリングされるようにすることである。これを行うには、2.0を掛け、1.0を引く。そうすると、下図のような信号になります: