いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

イコライザを作る

 wav(ウェーブ)ファイルというのがあります。MediaPlayerなどを使ってパソコンで再生できますよね。wavファイルは構造が決まっていて、ファイルの先頭付近に音楽データの長さや、サンプリング周波数、ステレオかモノラルかの区別のための数値などが入っています。すべて音楽をデジタルデータで扱うためのパラメータです。その後に実際の音楽データが並んでいます。この音楽データは、(wavファイルのタイプによりますが)-32768~32767の範囲の整数値の並びです。「3499,-23,-25,-60,……」といった具合です。さて、これがwavファイルなんですが……不思議ではありませんか?? こんな数値の単純な1列の並びがあの音楽を鳴らしているわけです。wavファイルを再生するといろんな楽器の音、人間の声などが、いろいろな高さ、強さ、速さで流れてきます。さっきの数値の並びは、ある意味、単純にスピーカーにかける電圧だと思ってよく、クラリネットの音ならこの値」なんて決まりはまったくありません。つまりスピーカーからは数値に応じた強さで単純な音が出るだけなのです。それなのに実際にはどんな音色、楽器、声でもきちんと鳴らせるのです!! 不思議だ……。
 理由をひと言で説明するなら、「音の強さ、高さの変化のさせ方でどんな音楽でも再現できる」ということになります。さっきの整数値をy軸にとってグラフを描けますよね。普通、結構ギザギザのあるグラフになるはずです。例えばこれが特定のギザギザの形に近いとき、人間は「この音色はクラリネットだ」とか分かるわけです。
 こういう疑問に対して、数学のフーリエ変換、信号処理といった分野が答えを用意しています。

入門信号処理のための数学―離散フーリエ変換・離散コサイン変換

入門信号処理のための数学―離散フーリエ変換・離散コサイン変換

 

 おすすめのテキストは『入門信号処理のための数学―離散フーリエ変換・離散コサイン変換』(高橋 信2007オーム社)です。易しく書いてあって「理系の高校生には読める」ということになっていますがやや厳しいかも。高速フーリエ変換FFT)まできっちり書いてあり、かわいい表紙ですがお話だけで済ませてはいません。特定のコンピュータ言語の使用を想定しているわけではなく、理論書です。ひととおり勉強すればイコライザを作れるようになります。イコライザというのは任意の周波数成分の強さを変化させる(=音質を変える)ソフトウェアです。ぼくは最初にこの本で、次に『これなら分かる応用数学教室―最小二乗法からウェーブレットまで』(金谷健一2003共立出版)で勉強しました。

これなら分かる応用数学教室―最小二乗法からウェーブレットまで

これなら分かる応用数学教室―最小二乗法からウェーブレットまで

 

 実際に自分でwavファイルを扱ってイコライザなどを作るにはまずこうした理論書を勉強しなければなりません。wavファイルの扱いについては『C言語ではじめる音のプログラミング―サウンドエフェクトの信号処理』(青木直史2008オーム社)が大変分かりやすく、おすすめです。

C言語ではじめる音のプログラミング―サウンドエフェクトの信号処理

C言語ではじめる音のプログラミング―サウンドエフェクトの信号処理

 

 イコライザを作ればフーリエ変換の理屈が身にしみて分かります。ぜひ挑戦してみてください。フーリエ変換は、Pythonなどでは簡単に使えるようになっています(Numpyなどのモジュールを利用)。それはそれでいいんですが、それでは理屈は100年経っても分かりません。学生実験レベルでよいですから例えば好きな音域をカットするなど、ぼくは自分でプログラミングしてみることを強く勧めます。