簡易オーディオビジュアライザーを作る

Uncategorized

スポンサーリンク

この記事で扱っていること

  • 簡易オーディオビジュアライザーを作る方法

を紹介しています。

オーディオビジュアライザーとは、音の変化の様子を可視化し表現したものです。表現方法はさまざまに考えられると思いますが、今回は比較的簡易な実装を目指し、音の波形をパワースペクトルで分析し、周波数帯ごとに色分けしたバーを動かす形としてみました。

音に合わせて動く様子は静止画では表現できないので動画も作成しています。実際の動作の様子を確認する場合には以下の動画を参考にしてみてください。

スポンサーリンク

どんな結果になるか

フロントパネルには波形グラフとピクチャの表示器、音声波形ファイルの指定用のファイルパス制御器があります。

プログラムを実行すると、音声波形とこれを解析した結果をもとにバーが上下に動きます。

プログラムの構造

音声波形をファイルから読みだして波形表示およびスピーカーから再生するプログラム自体はサンプルファインダにあります。

このサンプルに対して、読み取った波形に対して解析を行い、その結果をもとにグラフの表現を変えていきます。

ファイルから逐次読みだした結果をグラフに表現するのは同じループ内で全て行ってもいいのですが、ピクチャ描画に時間がかかる場合に音の再生機能にラグが出る可能性を考えて、処理を異なるループに分けて実装しました。

上のループ、いわゆる生産者消費者の生産者ループでは、シンプルに、音声ファイルからの波形読み出しを行い、波形データをキューで消費者ループに渡しています。

今回は時間経過でもループが止まるようにしていますが、生産者ループが止まったら、次にあるキューステータス確認が入ったループで、消費者ループ側で全てのキューの中身を消費しきるのを待ちます。

下のループ、消費者ループの方では、グラフに表示したり、パワースペクトルを算出してその結果に対して特定の処理を施し、この結果をもとにピクチャにカラーバーを表示させるようにしています。

途中サブVIの中でそれぞれの周波数帯ごとに演算をしている部分があります。

パワースペクトル演算の結果得られているクラスタの中身は、f0とdfそしてmagnitude配列で、magnitude配列の要素番号にdfを掛けてf0を足した値が、fとなります。

つまり、magnitude配列の要素番号Nの値は、N×df + f0の周波数に対するパワースペクトル値です。

ある周波数レンジの上限(あるいは下限)をdfで割ると、その上限(下限)の値をとるmagnitude配列の要素番号Nがわかります(厳密にはf0を処理する必要がありますが基本f0=0なので今回は特に演算に含めていません)

今回はある周波数帯レンジの中での結果の和をとっていますが、和を取るか平均をとるかそれ以外の演算値を取るかは自由でいいと思います。

また、周波数帯の区切り方も上に示した形である必要はないですし、もっと細かく区切ってもいいと思います。

今回は人の可聴領域を14つの周波数帯に分けてバーの色を虹の7色(のグラデーション)で表すことを目指し周波数帯レンジ配列(bar range配列)を作っていました。

その場で音声を集録して表す場合

上記のプログラムは、あらかじめ用意した音声ファイルを読みだしてその中身を波形データとして取り扱って、オーディオビジュアライザーとして表現していました。

そうではなく、その場でマイクから収録した音声に対して、同様なオーディオビジュアライザーを作ることもできます。

ベースとなるプログラムはこちらもサンプルファインダで見つかります。

やることはほとんど同じです。

単に、ファイルから音声を読み取るかその場で音声を集録するかの違いであり、音声波形を取得さえできてしまえば処理は同じです。

本記事では、簡易オーディオビジュアライザーを作る方法を紹介してきました。

ゲームと言えるほどではないですが、遊び用途でのプログラム作りでも考えることは多いので、腕試しに挑戦してもらえたらと思います。

ここまで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました