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

38
2016/01/23 オーディオ用レベルメーターを 作ってみよう @hotwatermorning 1

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

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

2016/01/23

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

@hotwatermorning

1

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

はじめに

✤ 勉強会の紹介ページにかっこいいUIを作って みようとか書いてあるんですが、

✤ 僕自身UI作るの苦手でかっこいいUI作れません ✤ このスライドではせめて、3種類のレベルメーターの実装方法を紹介します

2

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

自己紹介

✤ @hotwatermorning ✤ C++やったりDTMやったりしてます ✤ C++ポケットリファレンス(共著)

3

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

レベルメーターについて

4

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

レベルメーター

✤ このスライドでは、単になにか音量を表示するメーター

✤ Sound Level Meterだと騒音計になってしまいます。

5

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

レベルメーターの意義

✤ サウンドプロダクションの時に、耳で聞くだけじゃなく、音の大きさの情報を計測して表示

✤ 音の大きさを調整するために必要 ✤ また、オーディオデータは、耳で聞くだけじゃなく、その音量の情報を可視化して表示すると、かっこいい!

6

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

レベルメーターの種類

✤ VUメーター ✤ ピークメーター ✤ スペクトルアナライザー ✤ ラウドネスメーター

7

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

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

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

VUメーター

✤ Volume Unit(音量感)を計測するためのメーターなので、VUメーター ✤ ただしこの音量感は、かならずしも人間の聴覚の特性には一致しない。

✤ 後述する、ラウドネスメーターを使用する必要がある。

9

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

VUメーターの特徴

✤ 音量感を表すメーターのため、信号の瞬発的なピークには反応しない

✤ VUメーターは規格上-20dB付近に表示の下限があるので、小さい音量には反応しない

✤ 細かい音量変化を読み取るのは難しい

10

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

ピークメーター✤ 正式名称は、Peak Programme Meter(PPM) ✤ 瞬間瞬間の波形のピークを表示する。

11

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

ピークメーター

✤ 信号のピークは、刻々と変化するので、そのままではピークを目視しにくい

✤ そのため、ピークホールド機能が実装されていることもある

12

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

ピークメーターの種類

✤ True Peak Programme Meter ✤ Quasi Peak Programme Meter ✤ Sample Peak Programme Meter ✤ Over-sampling Peak Programme Meter

13

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

ピークメーターの特徴

✤ その瞬間の音量を表示するため、音量変化に非常に敏感 ✤ メーターの変化が激しいので、目が疲れる

✤ 反面、人間が感じるようなスムーズな音量変化の度合いを読み取るのは難しい

14

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

スペクトルアナライザー

✤ 入力された波形を周波数毎に分解し、周波数帯域ごとの信号の強さを表示するメーター動画: https://www.youtube.com/watch?v=vWpC5PtNE6E

15https://www.flickr.com/photos/electriksuicide/2284349103

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

スペクトルアナライザーの特徴

✤ 周波数ごとの音の強さがわかるので、低音域から高音域まで、どの部分の音が強いかが分かる

✤ それぞれの音域での音の強さの変化を読み取れる

16

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

ラウドネスメーター✤ 入力される波形を、人間の聴覚の特性に合わせて補正を行い、人間が感じる音の大きさを表すように作られたメーター ✤ 役割的にはVUメーターの上位互換

✤ 現在のテレビのデジタル放送なんかは、このラウドネスメーターで計測した音量の基準を満たすように番組が作られている ✤ 現代のサウンドプロダクションの世界では、ラウドネスメーターとOver-sampling PPMを使用

17http://www.soundonsound.com/sos/jul13/articles/qanda-0713-2.htm

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

レベルメーターの実装

18

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

サンプルプログラム

✤ https://github.com/hotwatermorning/LevelMeter

19

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

レベルメーターの実装

1.ピークメーター

2.VUメーター

3.スペクトルアナライザー

20

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

レベルメーターの実装

1.ピークメーター

2.VUメーター

3.スペクトルアナライザー

21

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

ピークメーターの実装

✤ Sample PPMを実装する ✤ 入力されたオーディオ信号を走査して、もっともdB値が大きなサンプルを記録する

✤ その時のdB値をdBスケールで表示する

22

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

dB(デシベル)とは?

✤ 人間が感じる音量の変化は、音の強さの変化に対して対数的 ✤ ウェーバー・フェヒナーの法則で検索

✤ 音の強さの変化を、そのままのスケールで表現するよりも、対数スケールで表現した方が、感覚に合う。

23

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

ピークメーターの実装

✤ 実際にコードを見てみましょう

24

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

レベルメーターの実装

1.ピークメーター

2.VUメーター

3.スペクトルアナライザー

25

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

VUメーターの実装

✤ 実際のVUメーターと同じ挙動を再現するのは難しい ✤ VUメーターの規格では、VUメーターの針がどのように動かなくてはいけないかまで細かく指定されている

26

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

VUメーターの実装

✤ なので、今回はVUメーターと同じような特性をもつRMSメーターで代用する。 ✤ ただし、一般的にRMSメーターの方がVUメーターよりも数値が大きくなる傾向があるらしい参考: http://jp.residentadvisor.net/feature.aspx?1473

27

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

RMSとは?

✤ Root Mean Squareの略 ✤ 信号の各サンプルを2乗して平均をとり、その平方根をとる操作

✤ 時間とともに変化する信号の実効値が得られる。参考: http://www.g200kg.com/jp/docs/dic/rms.html

28

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

VUメーターの実装

✤ 入力された信号を2乗して、300ms分のサンプルの平均値をとり、その平方根をとる

✤ 得られたRMS値を、角度にマッピングしてVUメーター状のUIに表示

29

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

VUメーターの実装

✤ 実際にコードを見てみましょう

30

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

レベルメーターの実装

1.ピークメーター

2.VUメーター

3.スペクトルアナライザー

31

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

FFTメーターの実装

✤ 設定したFFTの次数でのバッファサイズに達するまで、オーディオデータをキャッシュする

✤ キャッシュしたオーディオデータをFFTで周波数成分に分解する

✤ 各周波数帯域の成分(複素数)の絶対値を算出し、これをdBスケールで扱うことで、パワースペクトルを生成する

32

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

FFTメーターの実装

✤ パワースペクトルが得られたら、そのスペクトルのピークホールドを表示したり、フレームごとのスペクトルの移動平均をとって、周波数ごとの音の強さの変化を表示できる

33

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

FFTメーターの実装

✤ 実際にコードを見てみましょう

34

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

おわりに

35

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

おわりに

✤ オーディオデータを複数の方法で計測して、音の大きさの情報をいくつかの側面から分析/表示できる

✤ 表示したい情報に合わせたメーターを実装しよう ✤ かっこいいUIを作るのは難しい

36

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

参考になる発表

✤ CEDEC 2015の CRI 増野さんによるセッション「イカすビジュアライザー天国 -音楽と同期したイケてる映像表現とその設計手法-」https://cedil.cesa.or.jp/cedil_sessions/view/1280

37

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

ありがとうございました

38