2016/01/23
オーディオ用レベルメーターを

作ってみよう
@hotwatermorning
1
はじめに
✤ 勉強会の紹介ページにかっこいいUIを作って

みようとか書いてあるんですが、
✤ 僕自身UI作るの苦手でかっこいいUI作れません
✤ このスライドではせめて、3種類のレベルメーター
の実装方法を紹介します
2
自己紹介
✤ @hotwatermorning
✤ C++やったりDTMやったりしてます
✤ C++ポケットリファレンス(共著)
3
レベルメーターについて
4
レベルメーター
✤ このスライドでは、

単になにか音量を表示するメーター
✤ Sound Level Meterだと騒音計に

なってしまいます。
5
レベルメーターの意義
✤ サウンドプロダクションの時に、耳で聞くだけじゃ
なく、音の大きさの情報を計測して表示
✤ 音の大きさを調整するために必要
✤ また、

オーディオデータは、耳で聞くだけじゃなく、

その音量の情報を可視化して表示すると、

かっこいい!
6
レベルメーターの種類
✤ VUメーター
✤ ピークメーター
✤ スペクトルアナライザー
✤ ラウドネスメーター
7
VUメーター
✤ いわゆる音量メーターっぽい見た目のアレ

動画: https://www.youtube.com/watch?v=f6Pi2TBdMhI













8From wikimedia Commons/FileVU_Meter.jpg 05:15, 12 August 2006 (UTC) License=CC BY 2.5
VUメーター
✤ Volume Unit(音量感)を計測するためのメーター
なので、VUメーター
✤ ただしこの音量感は、かならずしも人間の聴覚の特性
には一致しない。
✤ 後述する、ラウドネスメーターを使用する必要がある。
9
VUメーターの特徴
✤ 音量感を表すメーターのため、信号の瞬発的なピー
クには反応しない
✤ VUメーターは規格上-20dB付近に表示の下限が
あるので、小さい音量には反応しない
✤ 細かい音量変化を読み取るのは難しい
10
ピークメーター
✤ 正式名称は、Peak Programme Meter(PPM)
✤ 瞬間瞬間の波形のピークを表示する。













11
ピークメーター
✤ 信号のピークは、刻々と変化するので、そのまま
ではピークを目視しにくい
✤ そのため、ピークホールド機能が実装されている
こともある
12
ピークメーターの種類
✤ True Peak Programme Meter
✤ Quasi Peak Programme Meter
✤ Sample Peak Programme Meter
✤ Over-sampling Peak Programme Meter
13
ピークメーターの特徴
✤ その瞬間の音量を表示するため、音量変化に

非常に敏感
✤ メーターの変化が激しいので、目が疲れる
✤ 反面、人間が感じるようなスムーズな音量変化の
度合いを読み取るのは難しい
14
スペクトルアナライザー
✤ 入力された波形を周波数毎に分解し、周波数帯域
ごとの信号の強さを表示するメーター

動画: https://www.youtube.com/watch?v=vWpC5PtNE6E











15https://www.flickr.com/photos/electriksuicide/2284349103
スペクトルアナライザーの特徴
✤ 周波数ごとの音の強さがわかるので、低音域から
高音域まで、どの部分の音が強いかが分かる
✤ それぞれの音域での音の強さの変化を読み取れる
16
ラウドネスメーター
✤ 入力される波形を、人間の聴覚の特性に合わせて
補正を行い、人間が感じる音の大きさを表すよう
に作られたメーター
✤ 役割的にはVUメーターの上位互換
✤ 現在のテレビのデジタル放送なんかは、このラウ
ドネスメーターで計測した音量の基準を満たすよ
うに番組が作られている
✤ 現代のサウンドプロダクションの世界では、

ラウドネスメーターとOver-sampling PPMを使用
17http://www.soundonsound.com/sos/jul13/articles/qanda-0713-2.htm
レベルメーターの実装
18
サンプルプログラム
✤ https://github.com/hotwatermorning/
LevelMeter
19
レベルメーターの実装
1.ピークメーター
2.VUメーター
3.スペクトルアナライザー
20
レベルメーターの実装
1.ピークメーター
2.VUメーター
3.スペクトルアナライザー
21
ピークメーターの実装
✤ Sample PPMを実装する
✤ 入力されたオーディオ信号を走査して、もっとも

dB値が大きなサンプルを記録する
✤ その時のdB値をdBスケールで表示する
22
dB(デシベル)とは?
✤ 人間が感じる音量の変化は、音の強さの変化に対
して対数的
✤ ウェーバー・フェヒナーの法則で検索
✤ 音の強さの変化を、そのままのスケールで表現す
るよりも、対数スケールで表現した方が、感覚に
合う。
23
ピークメーターの実装
✤ 実際にコードを見てみましょう
24
レベルメーターの実装
1.ピークメーター
2.VUメーター
3.スペクトルアナライザー
25
VUメーターの実装
✤ 実際のVUメーターと同じ挙動を再現するのは難
しい
✤ VUメーターの規格では、VUメーターの針がど
のように動かなくてはいけないかまで細かく指
定されている
26
VUメーターの実装
✤ なので、今回はVUメーターと同じような特性を
もつRMSメーターで代用する。
✤ ただし、一般的にRMSメーターの方がVUメーターより
も数値が大きくなる傾向があるらしい

参考: http://jp.residentadvisor.net/feature.aspx?1473
27
RMSとは?
✤ Root Mean Squareの略
✤ 信号の各サンプルを2乗して平均をとり、その平
方根をとる操作
✤ 時間とともに変化する信号の実効値が得られる。

参考: http://www.g200kg.com/jp/docs/dic/rms.html
28
VUメーターの実装
✤ 入力された信号を2乗して、300ms分のサンプル
の平均値をとり、その平方根をとる
✤ 得られたRMS値を、角度にマッピングしてVUメー
ター状のUIに表示
29
VUメーターの実装
✤ 実際にコードを見てみましょう
30
レベルメーターの実装
1.ピークメーター
2.VUメーター
3.スペクトルアナライザー
31
FFTメーターの実装
✤ 設定したFFTの次数でのバッファサイズに達する
まで、オーディオデータをキャッシュする
✤ キャッシュしたオーディオデータをFFTで周波数
成分に分解する
✤ 各周波数帯域の成分(複素数)の絶対値を算出し、
これをdBスケールで扱うことで、パワースペクト
ルを生成する
32
FFTメーターの実装
✤ パワースペクトルが得られたら、

そのスペクトルのピークホールドを表示したり、

フレームごとのスペクトルの移動平均をとって、

周波数ごとの音の強さの変化を表示できる
33
FFTメーターの実装
✤ 実際にコードを見てみましょう
34
おわりに
35
おわりに
✤ オーディオデータを複数の方法で計測して、

音の大きさの情報をいくつかの側面から

分析/表示できる
✤ 表示したい情報に合わせたメーターを実装しよう
✤ かっこいいUIを作るのは難しい
36
参考になる発表
✤ CEDEC 2015の

CRI 増野さんによるセッション

「イカすビジュアライザー天国 -音楽と同期した
イケてる映像表現とその設計手法-」

https://cedil.cesa.or.jp/cedil_sessions/view/1280
37
ありがとうございました
38

オーディオ用レベルメータを作ってみよう