音声波形をGUIに表示できるみたいです。
ちょっと面白い機能だね~
JUCEプログラミング、Audioの「Draw audio waveforms」の項目を進めていきます。今回は、チュートリアルの概要をみて、ヘッダーのプログラムの記載のところまでを記事としました。
公式のドキュメントはこちらのページとなります。
こんな人の役に立つかも
・JUCEフレームワークに入門したい人
・JUCEで音声プログラミングを学びたい人
・JUCEのチュートリアルを進めている人
チュートリアル概要
チュートリアルの前提
このチュートリアルでは、以前のチュートリアルで作成したAudioPlayerの機能をベースとしています。
私の記事も次のページをはじめとしてチュートリアルを行いましたので、ご参考ください。
また、この記事は、以前作成したAudioPlayerのプログラムを基本として進めました。このプログラムは、GitHubのリポジトリからダウンロードできますので、こちらもご利用ください。
ひとつづつ進んでいます。
どんどん機能を積み上げていろいろなアプリがつくれるようになりたいね。
作成するアプリ
このようなウィンドウのアプリが作成されます。以前のAudioPlayerアプリのボタンの↓の部分に読み込んだ波形が表示されます。この表示する部分は、初めてpaint関数を利用してGUIに「描画」を行っています。(それ以外の再生の機能などは以前のAudioPlayerそのままです。)
MainComponent.h
先ほどご紹介した、AudioPlayerのプログラムをベースに作成していきます。
private:
//...略...
juce::AudioFormatManager formatManager;
//※順番重要見たいです。
std::unique_ptr<juce::AudioFormatReaderSource> readerSource;
juce::AudioTransportSource transportSource;
TransportState state;
juce::AudioThumbnailCache thumbnailCache;// [1]追加します。
juce::AudioThumbnail thumbnail; // [2]追加します。
void changeState(TransportState newState);
void openButtonClicked();
void playButtonClicked();
void stopButtonClicked();
void transportSourceChanged();
//[3]追加しておきます。
void thumbnailChanged();
//[3]追加しておきます。
void paintIfNoFileLoaded(juce::Graphics& g, const juce::Rectangle<int>& thumbnailBounds);
//[4]追加しておきます。
void paintIfFileLoaded(juce::Graphics& g, const juce::Rectangle<int>& thumbnailBounds);
//[4]追加しておきます。
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MainComponent)
};
音声の波形を表示するために、「juce::AudioThumbnailCache」クラスと「juce::AudioThumbnail」クラスを使用します。このクラスの配置は順番が重要とのことで、
①「AudioFormatManager 」を定義
②「juce::AudioThumbnailCache」を定義
③「juce::AudioThumbnail」を定義
とすることが重要なようです。というのも、それぞれがコンストラクタで先に定義したクラスのオブジェクトを利用するからです。
また、[3]と[4]には後からcppで実装する関数を追加しておきます。
cppへの機能追加については、長くなってしまうので、次の記事で記載させていただきます。