オーディオ波形を描く
を使ったオーディオ波形の表示について紹介します。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オブジェクトがある。