JUCEプログラミング、Draw audio waveforms 1

音声波形をGUIに表示できるみたいです。

ちょっと面白い機能だね~

JUCEプログラミング、Audioの「Draw audio waveforms」の項目を進めていきます。今回は、チュートリアルの概要をみて、ヘッダーのプログラムの記載のところまでを記事としました。

公式のドキュメントはこちらのページとなります。

あわせて読みたい

こんな人の役に立つかも

・JUCEフレームワークに入門したい人

・JUCEで音声プログラミングを学びたい人

・JUCEのチュートリアルを進めている人

目次

チュートリアル概要

チュートリアルの前提

このチュートリアルでは、以前のチュートリアルで作成したAudioPlayerの機能をベースとしています。

私の記事も次のページをはじめとしてチュートリアルを行いましたので、ご参考ください。

ぱんだクリップ
JUCEプログラミング、AudioPlayerを作成する1、作成するアプリの概要とクラスの調査 | ぱんだクリップ wavファイルの再生、サンプラーなどを作るには必須の技術ですね。 音声の再生、とても基本で役に立つよね JUCEチュートリアルの「Audio」項目の「Build an audio player」...

また、この記事は、以前作成したAudioPlayerのプログラムを基本として進めました。このプログラムは、GitHubのリポジトリからダウンロードできますので、こちらもご利用ください。

GitHub
GitHub - perfectpanda-works/AudioPlayer01: JUCE audio tutorial JUCE audio tutorial. Contribute to perfectpanda-works/AudioPlayer01 development by creating an account on 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への機能追加については、長くなってしまうので、次の記事で記載させていただきます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次