オーディオ波形を描く
を使ったオーディオ波形の表示について紹介します。AudioThumbnailクラスを使用します。これによって、オーディオ・アプリケーション内で任意の数の波形を簡単に描画できるようになります。
レベル:中級
プラットフォーム:Windows, macOS, Linux
クラス: AudioThumbnail,AudioThumbnailCache,AudioFormatReader,ChangeListener
スタート
このチュートリアルはTutorial: Build an audio playerを読んで理解する必要がある。また、本書は、あなたが以下の項目について熟知していることを前提としている。Graphicsクラスと、コンポーネント内で描画を行うためのComponent::paint() 関数 (Tutorial: The Graphics class).
このチュートリアルのデモ・プロジェクトのダウンロードはこちらから:PIP|ZIP.プロジェクトを解凍し、最初のヘッダーファイルをProjucerで開く。
このステップにヘルプが必要な場合は、以下を参照してください。Tutorial: Projucer Part 1: Getting started with the Projucer.
デモ・プロジェクト
デモ・プロジェクトでは、次のように3つのボタンが表示される。Tutorial: Build an audio player(サウンドファイルを開く、再生する、停止する)。
また、サウンドファイルの波形を描画する矩形領域もあります。デフォルトの状態(サウンドファイルがロードされていない状態)では、アプリケーションは以下のようになります:

サウンドファイルがロードされると、アプリケーションは次のようになる:

オーディオ波形の描画は、特に長いファイルの場合、一般的 に、波形の描画が効率的で、ユーザーにもわかりやすいフォーマットで、オーディオデータの低解像度バージョンを保存する必要があります。そのためAudioThumbnailクラスがこの低解像度バージョンを処理し、必要に応じて作成・更新されます。
AudioThumbnailの設定
まず重要な点はAudioThumbnailクラスではないのサブクラスです。Componentクラスである。そのAudioThumbnailクラスは、オーディオ波形をpaint()別の関数Componentオブジェクトを追加します。以下のコードは、以下のデモ・プロジェクトに基づいてこの機能を追加する方法を示して います。Tutorial: Build an audio player.
追加オブジェクト
我々のMainContentComponentクラスに2つのメンバーを追加する必要があります。AudioThumbnailCacheオブジェクトとAudioThumbnailオブジェクトになる。そのAudioThumbnailCacheクラスは、1つまたは複数のオーディオファイルの必要な低解像度バージョンをキャッシュするために使用されます。これは、例えば、あるファイルを閉じて新しいファイルを開き、また最初のファイルを開こうとするとAudioThumbnailCacheには最初のファイルの低解像度バージョンが残っているので、データを再スキャンして再計算する必 要はない。もうひとつの便利な機能はAudioThumbnailCacheの異なるインスタンス間で共有できる。AudioThumbnailクラス
    juce::TextButton openButton;
    juce::TextButton playButton;
    juce::TextButton stopButton;
 
    std::unique_ptr chooser;
 
    juce::AudioFormatManager formatManager;                    // [3]
    std::unique_ptr readerSource;
    juce::AudioTransportSource transportSource;
    TransportState state;
    juce::AudioThumbnailCache thumbnailCache;                  // [1]
    juce::AudioThumbnail thumbnail;                            // [2]
 
    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainContentComponent)
};
このような静的に割り当てられたオブジェクトを使用する場合、次のことが重要である。AudioThumbnailCacheオブジェクト[1]の前に表示される。AudioThumbnailオブジェクト[2]に引数として渡されるからである。AudioThumbnail constructor.ということも重要である。AudioFormatManagerオブジェクト[3]の前に表示される。AudioThumbnailオブジェクトも同じ理由である。
オブジェクトの初期化
のイニシャライザーリストではMainContentComponentコンストラクターでこれらのオブジェクトをセットアップする:
    MainContentComponent()
       : state (Stopped),
         thumbnailCache (5),                            // [4]
         thumbnail (512, formatManager, thumbnailCache) // [5]
    {
- [4](その)AudioThumbnailCacheオブジェクトは、保存するサムネイルの数で構築されなければならない。
- [5](その)AudioThumbnailオブジェクトは、1つのサムネイルサンプルを作成するために使用されるソースサンプルの数を指定することで、それ自体を構築する必要があります。これが低解像度バージョンの解像度を決定します。他の2つの引数はAudioFormatManagerそしてAudioThumbnailCacheオブジェクトがある。