オーディオ用レベルメータを作ってみよう
-
Upload
kohsuke-yuasa -
Category
Engineering
-
view
1.555 -
download
1
Transcript of オーディオ用レベルメータを作ってみよう
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