AudioDeviceManagerというクラスでDAWの環境設定画面みたいなものが実装できているようですね。
まずは、プログラムを動作させるところからだね~
JUCEプログラミング、チュートリアルの「The AudioDeviceManager class」を進めました。まずは、デモプログラムを実装していきます。デモプログラムを実装しながら、今回利用されているJUCEクラスなどを調べていきたいと思います。
こんな人の役に立つかも
・JUCEプログラミングを勉強している人
・チュートリアル「The AudioDeviceManager class」をやっている人
・JUCEで音声デバイスの情報を取得したい人
実装するアプリ
このチュートリアルでは、「AudioDeviceSelectorComponent」オブジェクトを使ってオーディオデバイスの設定をすることができるアプリを作成していきます。
ビルドすると、↑のスクショのようなアプリが起動しました。(DAWの環境設定みたいなアプリです。)
※入出力がPCデフォルトのマイクとスピーカーの場合、ハウリングするかもしれませんので、スピーカーレベルを0に下げてビルドしたほうが良いです。
また、CPU使用率や現在の音声デバイスの設定情報が右のテキストボックスに表示されるようなものを実装していきます。
今回のアプリは、PCに接続されている「音声デバイス」(サウンドカードや、オーディオインターフェイスなどの入出力を提供するハード)の設定を切り替えたり現状の情報を読み出したりするような機能を実装していくようです。
プロジェクトの新規作成
今回は、新規にProjucerからプロジェクトを作成します。新規に作成したプロジェクトに対してチュートリアルプログラムを追加していきます。
Projucerでは、「Audio」の項目を選択しています。
Projucerでの新規プロジェクトの作成方法などについては、以前の記事もご参照ください。(以前の記事では「GUI」の項目を選択していますが、今回はそこを「Audio」として新規作成しています。)
deviceManagerメンバ変数
「Audio」の項目でアプリを新規作成すると、「AudioAppComponent」クラスを継承しています。このクラスには、AudioDeviceManagerクラスの「deviceManager」メンバが定義されているので、初期状態で「deviceManager」というメンバから関数を呼び出すことで、音声デバイスにアクセスすることができます。
「AudioDeviceManager」クラスと「AudioDeviceSelectorComponent」クラス
AudioDeviceManagerクラスに設定されている音声デバイス(音声入力や音声出力の設定)は、プログラムの中で直接変更するか、「AudioDeviceSelectorComponent」クラスで変更することができます。また、AudioDeviceクラスは、外部音声デバイス(オーディオインターフェースなど)が予期せず切断された場合でも、システムにデフォルトで設定されている音声デバイスに切り替えることができるようです。
AudioDeviceManagerは高機能ですね。それが初期で利用できるという点でJUCEはすごいです。
MainComponent.h
今回は、まず、ヘッダファイルの変更事項を記載します。
class MainComponent : public juce::AudioAppComponent,
//[1]以下を追加しました。
public juce::ChangeListener,
private juce::Timer
{
public:
//...略...
private:
//[2]以下のメンバ関数を追加しました。
void changeListenerCallback(juce::ChangeBroadcaster*) override;
static juce::String getListOfActiveBits(const juce::BigInteger& b);
void timerCallback() override;
void dumpDeviceInfo();
void logMessage(const juce::String& m);
//[3]以下のメンバ変数を追加しました。
juce::Random random;
juce::AudioDeviceSelectorComponent audioSetupComp;
juce::Label cpuUsageLabel;
juce::Label cpuUsageText;
juce::TextEditor diagnosticsBox;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainComponent)
};
内容としては、[1]、[2]をまず機械的に追加するところです。具体的な内容はcpp実装時にみていきます。
[3]では、「AudioDeviceSelectorComponent」クラス、「Label 」クラス、「TextEditor」クラスのメンバを定義しています。
TextEditorは初めて見ますが、テキスト入力が可能なオブジェクトになります。
次回から、cppファイルの記載に入っていきます。