本来、音はすべての時刻で値をとる「アナログ信号」の物理現象(図1(a))で、コンピュータはアナログ信号をそのままの状態では処理できません。コンピュータで音を取り扱うには、図1(b)のようにアナログ信号の音を離散的な時刻でしか値をとらない「ディジタル信号」の音データに変換する必要があります。こうした処理を「サンプリング」と呼びます。
図1 サンプリング:(a)アナログ信号、(b)ディジタル信号
サンプリングはコンピュータで音を取り扱うための基礎知識ですが、本書ではこのような解説だけではありません。コンピュータから音を鳴らす方法としてWAVEファイルの読み書きや、サイン波、ノコギリ波、矩形波など基本的な音を実際に鳴らす方法も取り上げています。さらに波形に含まれるサイン波の配合比率を割り出すテクニックとしてフーリエ変換による周波数分析(図2)の方法などにも言及しています。
図2 ピアノのA4本:(a)波形、(b)周波数特性
その他にも数多くの仕組みやプログラミングテクニックが説明されています。
- 重ね合わせの原理に基づいて、サイン波を重ね合わせることで音を作り出す加算合成の仕組み(オルガン、ピアノの楽器音を作成)
- 波形に含まれるサイン波の配合比率を変化させると音色が変化する仕組みによって音色をコントロールするテクニック(フィルタによる周波数特性の加工)
- フィルタによって不必要な周波数成分を削り取ることで音を作り出す減算合成の仕組み(音声合成やボコーダのプログラミング)
- 黎明期のコンピュータに採用されたPSG音源、いわゆるピコピコの電子音を鳴らす仕組み(ゲームミュージックや効果音)
- 電子楽器の1つとして開発されたアナログシンセサイザ(オルガン、バイオリン、ピアノ、ドラムの楽器音を作成)
- 金属的な音を作り出すFM音源の仕組み(チューブラーベル、エレクトリックピアノの楽器音を作成)
- 音響合成の方式として現在の主流になっているPCM音源の仕組み(加工技術と圧縮技術)
- マイクから入力された音を加工すると同時にスピーカーから出力するリアルタイム処理のサウンドプログラミング(ボイスチェンジャのプログラミング)
このように手元にあるコンピュータでも、プログラミングすることでシンセサイザのようにさまざまな音を作り出すことができます。
また、サウンドプログラミングに対する理解を深めるには、やはり理論の勉強を避けて通ることはできません。そのため、本書ではあちこちに数学が登場していますが、高校程度の数学の知識があれば読み進めることができるように最小限の内容に配慮されています。また、理論だけではなく、自分でサウンドプログラミングをして音を出しながら理解を深めることができます。
なお、本書のサンプルプログラムはC言語の基本的なスタイルで記述されているので、そのほかの環境で動作するようにアレンジすることもできます(コンパイラは無償の「Borland C++ Compiler 5.5」を利用しています)。