Gstreamer でピンクノイズを出力したり、スペクトルを測定したりしてみる
マイクを使ったイベントでは、スピーカーやミキサーで調整することがあると思います。しかし、 PA 作業をミスするとハウリングが発生し、悲しいことになります。勉強会イベントではまだましですが、音楽系のイベントでは最悪の事態と行ってもよいでしょう。
ハウリングの原因には、マイクとスピーカーの位置関係、ボリュームの上げすぎ、話者がマイクから離れすぎなどがありますが、部屋や箱の共振というのも原因の一つです。ハウリングは単一周波数で発生することが多いので、あらかじめノイズを発生させて部屋や箱の周波数特性を調べ、その部分をイコライザーでカットすることで防ぐことができます。
Linux マシンで、このテストを行うため、 GStreamer でノイズを発生させたり、マイクからの信号を周波数スペクトルに変換したりしてみます。まだ、現場で使ったことは無いのですが、今後試してみる予定です。
まずは、音を出すところから。
$ gst-launch-1.0 audiotestsrc ! autoaudiosink … Freeing pipeline ...
この audiotestsrc エレメントを調べてみます。
$ gst-inspect-1.0 audiotestsrc … Element Properties: … wave : Oscillator waveform flags: 読み込み可能, 書き込み可能, コントロール可能 Enum "GstAudioTestSrcWave" Default: 0, "sine" (0): sine - Sine (1): square - Square (2): saw - Saw (3): triangle - Triangle (4): silence - Silence (5): white-noise - White uniform noise (6): pink-noise - Pink noise (7): sine-table - Sine table (8): ticks - Periodic Ticks (9): gaussian-noise - White Gaussian noise (10): red-noise - Red (brownian) noise (11): blue-noise - Blue noise (12): violet-noise - Violet noise freq : Frequency of test signal flags: 読み込み可能, 書き込み可能, コントロール可能 Double. Range: 0 - 20000 Default: 440 …
audiotestsrc エレメントの Element Property: の wave と freq でいろいろ調整できることが分かります。今回は pink-noise を出力したいので以下のようにします。
$ gst-launch-1.0 audiotestsrc wave=pink-noise ! autoaudiosink
スピーカーからピンクノイズが発生します。ヘッドフォン端子などからミキサーにつなぐと、会場にピンクノイズを流せます。くれぐれも音量には注意してください。
さて、本当にピンクノイズが出ているのか、スペクトルを見てみます。最初は 440Hz と 4400Hz のスペクトルを表示してみます。それっぽいところにピークが立つと思います。
$ gst-launch-1.0 audiotestsrc ! audioconvert ! spectrascope ! videoconvert ! autovideosink … $ gst-launch-1.0 audiotestsrc freq=4400 ! audioconvert ! spectrascope ! videoconvert ! autovideosink …
では早速、pink-noise を見てみます。
$ gst-launch-1.0 audiotestsrc wave=pink-noise ! audioconvert ! spectrascope ! videoconvert ! autovideosink …
pink-noise のスペクトルが見えたでしょうか?それでは、マイク(デフォルトの音声入力)から入力してみます。
$ gst-launch-1.0 autoaudiosrc ! audioconvert ! spectrascope ! videoconvert ! autovideosink …
マイクの前で話したり手を叩いたりすると、スペクトルが変化する様子が解ると思います。
実際には、ピンクノイズを出力した状態でスペクトルを測定し、ピークが立っている波長をイコライザーで落として上げることになります。ハウリングのないイベントになるといいですね。