音をプログラムで扱うと聞くと、専門の道具や難しい理論が要りそうに思えます。ところが中身は驚くほど単純で、音とは1秒間に数万個並んだ数字の列でしかありません。スピーカーはその数字のとおりに膜を前後させているだけです。だから音を作るのも、加工するのも、分析するのも、突き詰めればすべて数列の計算になります。

このページは、araisun.com で書いているサウンドプログラミング連載の目次です。オシレータやエンベロープといった音響合成の基本から、ディレイ・リバーブなどのエフェクト、声を作るフォルマント合成、FFTによる分析、そして耳が引っかかる錯覚まで。どの回にも、ブラウザで実際に音が鳴るデモを置いてあります。 Web Audio API で書いた素のJavaScriptなので、何もインストールせずにその場で聴けます。読んで分からなくても、つまみを動かせば分かる、という作りを目指しました。

目次のうち「準備中」と書いてあるものは、書き上がってはいるものの、まだ公開していない回です。それぞれの分野の中に混ぜてあるので、この連載がどこまでを扱うつもりなのかは、そこから読み取ってください。公開したらリンクになります。

数式は隠しません。ただし出しっぱなしにもせず、必ず「その式で何が鳴るのか」まで着地させます。C言語で音を書いていた時代の教科書的なアルゴリズムを土台にしているので、Web Audio に限らず、どの言語でも同じ考え方が使えます。

どこから読むか

はじめてなら、音は数の列 から順に読むのが素直です。サンプル・倍音・エンベロープという語彙が最初の3本でそろい、以降がぐっと読みやすくなります。

作りたい音が決まっているなら、目次から直接どうぞ。ウォブルベースが作りたい、リバーブの中身が知りたい、といった動機で1本だけ読んでも成立するように書いています。

理屈より不思議な話が読みたいなら、耳の錯覚 の章から。無限に上がり続ける音階や、鳴っていないのに聞こえる低音など、聴いて驚く回を集めてあります。

音の正体

音・音色・音程が、それぞれ数の何にあたるのか。連載の土台になる4本と、音楽の側から見た1本です。

楽器の音を合成する

サンプリング音源を使わず、計算だけで楽器の音を作る回です。

声を作る

母音、子音、そして機械が喋るようになるまでの歴史。

シンセサイザーの音づくり

クラブミュージックでおなじみの音を、部品から組み立てます。

時間を操るエフェクト

音を遅らせる、返す、伸ばす、刻む。エフェクターの中身の話です。

ディレイの下敷きになっているデータ構造は、配列を「輪」に見立てるリングバッファ で扱っています。

デジタルの落とし穴

計算で音を作ると、現実には無いはずの音が生まれたり、フィルタが暴れ出したりします。

音を読む

鳴っている音から、機械が情報を取り出す側の話です。

耳の錯覚

鳴っていない音が聞こえる、上がり続ける音階が終わらない。耳と脳の癖につけこむ回です。

楽器やブラウザとつなぐ

この先に書くもの

ギターエフェクターの定番(歪み・フェイザー・コーラス・オクターバー・ワウ・コンプレッサー)、ステレオ定位とオートパン、イコライザー、ウェーブテーブル合成、本物の声のピッチシフト。このあたりは書くつもりでいるものの、まだ形になっていません。

デモについて

デモはすべて、外部ライブラリを使わない素の Web Audio API で書いています。ページを開いた瞬間に音が鳴ることはなく、必ず再生ボタンを押してから鳴る作りです(iPhone の Safari はユーザー操作なしに音を出せない仕様なので、その制約に合わせてあります)。音量は控えめに設定していますが、イヤホンで聴く場合は最初に確認してください。

ついでに自作アプリの紹介を。筆者は音程を聴き分ける耳を鍛える Harmonize というトレーニングアプリを個人で開発していて、この連載で扱っている音響合成は、そのアプリの音源エンジンを自分で作った経験が下敷きになっています。平均律と純正律の回で出てくる「うなりが消える瞬間」を、実際に耳で当てられるようになりたい方はどうぞ。