音に合わせてきれいに光る、オーディオビジュアライザーを自作したい!そう思ったことはありませんか?
一見、音に合わせてキラキラと光らせるのは、複雑で難しい処理のように思えるかもしれません。しかし電気回路やディジタル回路では、そういった複雑な処理もコツさえつかめば簡単に実現することができます!
こんにちは、Jinです。皆さんいかがお過ごしですか?2023年も終わりを迎え、2024年が始まりました。昨年もたくさんものを作りましたが、これからも変わらずいろんなものを作って行こうと思っています。
さて、今日はタイトルにもある通り、自作電磁楽器「EleMag Harmony」に実装したオーディオビジュアライザーについて、詳しく解説していこうと思っています。
基板は毎度おなじみJLCPCBさんにご提供いただいております。そちらも併せてご覧ください!
知ってるようで知らない、音とはなにか
オーディオビジュラライザーを知るには、まず音とはなにかについて理解を深める必要があります。音は、一言で言うならば振動です。
振動といえば正月早々に能登半島で大きな地震が起き、たくさんの人が亡くなり今も救助活動が続いています。亡くなられた方へのご冥福をお祈りします。
話を元に戻すと、音は実は空気の振動なのです。それも縦波と言って、振動を与えるとバネが伸び縮みするように空気を押し引きします。なので、何かを叩けば簡単に音がなるのです。
音の波を音波といいますが、音の3大要素である高さや大きさ、音色は実はこの音波の次の要素と対応しているのです。
- 音の高さー音波の周波数
周波数というのは一秒間にどれだけの波を出すことができるかで、どれだけ早く空気を振動させるか、といったパラメータになっています。 - 音の大きさー音波の振幅
振幅というのは波の最大値で、一度の音波でどれだけ大きく空気を振動させるか、といったパラメータになっています。 - 音の色(音色)ー音波の波形
波形というのはその名の通り波の形で、どんなふうに空気を振動させるか、といったパラメータになっています。例えば金属を叩くのと、木を叩くのでは波形が異なるため、音色も変わります。
音は空気の振動であるため、波の性質を持ち、その波によって音の様々な要素が決定しているというわけです!
音に合わせて光る仕組み
さて、音がどんなものか理解を深めたところで、これを実際に光に変えることを考えてみます。
おそらくはじめにこれを実現しようと思ったときに多くの人がつまずくのは、音のどのパラメーターを、光のどのパラメーターに変換するのか、というところです。
しかしその答えはオーディオビジュアライザーを見たことがある人は感覚的に分かるのではないでしょうか。
基本的な仕組みは非常にシンプルで、オーディオビジュアライザーは音の大きさである振幅というアナログ値を、LEDバーのディジタルな値に変換しているだけです。
今回作成したものも、この基本的な仕組みを使用しています。これはサウンドレベルメーターとも呼ばれています。さらに音の高さに合わせてこのサウンドレベルメーターを複数つなげると、本格的なカラオケにあるようなオーディオビジュアライザーが完成します。
音の波を振幅と周波数に分けているのですね。ちなみに数学的に言うとこれをフーリエ変換といいます。
回路で実現するには
音の大きさをLEDバーに対応させるためには、アナログ値をディジタル値に変換するADC(Analog Digital Converter)が必要です。ADCにも沢山の種類がありますが、サウンドレベルメーターではそこまで複雑なものは使用しなくて済みます。
ADCの逆の要素で、ディジタル値をアナログ値に変換するDACというものもあります。DACのうちの最も基本的な一つであるPWMは下の記事で詳しく紹介していますので、併せてご確認ください。
今回は一番単純な「フラッシュ型」というADCを紹介します。まず、下の回路図をご覧ください。
簡単のため、3チャンネルで表しています。まず、基準となる電圧(レベリングをする幅のようなもの)を\(V_{CC}\)として、それをLEDバーの数(今回は3つ)に応じて分圧し、各電圧をコンパレーター(図中の三角の部品)のー端子に入力します。
分圧については抵抗器について記したこちらの記事にて詳しく解説をしておりますので、分からない方は確認してくださいね。
同じ抵抗値で分割したい数\(n\)だけ基準電圧を分けることで、電圧を\(n\)等分することができます。\(n\)等分された電圧の各値とマイクなどによる音声信号をコンパレータに入力すると、入力信号の電圧が\(n\)等分された基準電圧超えている部分に電圧が出力されます。
つまり、入力信号が基準電圧の\(\frac{m}{n}\)を超えていなければ、1〜m-1までの出力がOnとなり、m〜nまでの出力がOffとなります。
これにより、連続な値である入力信号(音声)は、\(n\)個の不連続なLEDバーの出力へと変換することができます。
そのため、この基準電圧により変換する精度を変えることができます。サウンドレベルメーターのIC等にはここに半固定抵抗器をはさみ、感度の調節をしたりします。
実際に作ってみた
さて、サウンドレベルメーターの原理について実際に確かめてみましょう。
設計
使用した回路はGitHubにも掲載されていますが、下のような回路になっています。
ADCは先述のフラッシュ型ADCがパッケージとなったLM3914を使用しています。ほぼデータシート通りの値で駆動しています。
内部回路は先述のフラッシュ型ADCと全く同じで、ほとんど説明することもないのですが、基準電圧のところは注意が必要です。
まず、内部電源が\(REF_{OUT}\)と\(REF_{ADJ}\)に\(V_{REF}≒1.27\rm{[V]}\)かかっています。基準電圧は\(V_{REF}\)に加え、\(REF_{OUT}\)端子と\(REF_{ADJ}\)端子それぞれからGNDに流出する電流値による電圧降下を考慮し、下記のような式で与えられます。
$$V=V_{REF}(1+\frac{R_2}{R_1})+I_{ADJ}R_2$$
\(I_{ADJ}\)というのは、\(REF_{ADJ}\)端子より出力される電流値で、約75[μA]ほどの一定値を取りますが、この電流の影響は殆ど無いので、 \(I_{ADJ}\)の項は無視できます。
\(R_1\)の値によってLEDへの出力電流値が変わる(\(I_{LED}≒\frac{12.5}{R_1}\))ので、\(R_1\)から決めると良いでしょう。
今回の回路では、基準電圧は約3.63[V]〜7.48[V]、LED出力電流は約12.9[mA]〜26.5[mA]となります。実際の\(V_{REF}\)値は変動し、また精度の調整も行うため、このように半固定抵抗をかまして上げる必要があります。
実際の動作
組み立てた基板は全体としてはこのようになっております。マイクは基板裏側に、出力はLEDバー代わりのLEDテープに接続しています。
ここには自作楽器の別のモジュールも組み込んでいますが、そちらはまた別の記事にてご紹介させていただきます。この基板はJLCPCBさんにご提供いただきました。発注方法などは下記をご確認ください。
動作の様子です。きっちりと音の大きさがLEDバーの表示に変換されていることがわかります。
さいごに
いかがでしたでしょうか?今回は、LEDやオーディオ好きにとってはなかなか楽しい記事になったのではないでしょうか。
案外難しい、複雑そうに見える身の回りの様々な製品でも、その仕組みは単純だったりします。
特に近年の半導体技術の進歩によって、私達は素人であろうと技術には簡単に触れられることができます。気になったあなたも、オーディオビジュアライザーから音と光の世界に入り浸ってみませんか?
先述しましたが、このサウンドレベルメーターは周波数によって分けることでより本格的な仕上がりとなります。そちらにはフィルタ回路と言ってまた別の回路が必要となりますが、実際に作ってみてお話できればと思います!今後にご期待ください!!
ご提供いただいたJLCPCBさんも、よろしくお願い致します。
それではまた、GoodBye!