黒地にネオンの波形、サブウーファー、LFOの軌跡、WUB BASSの文字を重ねたダブステップのレコードジャケット風アイキャッチ

ダブステップの「ウォブウォブ」ベースを作る ── LFOでフィルターを揺らす

ダブステップでよく聞く、低音が「ウォブウォブ」「ワウワウ」とうねるベース。英語では wobble bass や wub bass と呼ばれる音です。はじめて聴くと、何か特殊な音源や複雑なアルゴリズムが入っていそうに聞こえますが、核になっている考え方はかなり素直です。 倍音の多いベース音を作り、それをフィルターへ通し、フィルターのカットオフ周波数を LFO で周期的に動かす。さらに歪みで倍音を増やし、低域の芯はサブベースとして別に支える。これだけで、あの「うにょうにょ」した動きの大部分が説明できます。 この意味で、ウォブルベースはサウンドプログラミングの集大成にちょうどいい題材です。音を数として作る ところから始まり、倍音 で素材を作り、フィルター で明るさを削り、ADSR のような時間変化を別のパラメータへ掛ける。FM合成 で荒い倍音を足すこともできます。単発の仕組みではなく、いくつもの小さな部品を音楽的な目的へ組み上げる例です。 ウォブルベースを曲で聴く ウォブルベースは、曲のクレジットに「wobble bass使用」と書かれるタイプの音色ではありません。なのでここでは、ダブステップやブロステップの文脈で、唸る中域ベースやワウワウ動くベースが代表的に語られやすい曲を並べます。低域そのものより、倍音の多い中域がどう動いているかに耳を向けると、このあとの仕組みとつながりやすいです。 Doctor P / Sweet Shop / Gargoyle Sweet Shop この記事のデモにいちばん近い、直球の「ワブワブ」感を聴き取りやすい曲です。音程の低さよりも、歪んだ中域ベースがリズムに合わせて口を開け閉めするように動くところへ耳を向けると分かりやすいです。 YouTubeで探す Amazonで探す Caspa & Rusko / FABRICLIVE.37 Cockney Thug 2000年代後半の、荒くて前に出るダブステップの聴きやすい入口です。ベースが「低音の支え」ではなく、リズムと音色変化で主役になる感覚が分かりやすいです。 YouTubeで探す Amazonで探す Skrillex / EP Scary Monsters and Nice Sprites いわゆるブロステップ的な、喋るような中域ベースの代表例として分かりやすい曲です。低音の芯より、歪んだ倍音とフィルターの動きが前面に出る方向を聴けます。 YouTubeで探す Amazonで探す Flux Pavilion / Lines in Wax I Can't Stop ...

公開: 2026年7月10日 · Toshihiko Arai
サイン波1つは澄んだ単音だが、sin の中に sin を入れて揺らすと倍音の森が一気に生える対比図

sin 2つで金属もベルもエレピも ── FM合成

カープラス・ストロングの回 では、ノイズを輪に閉じ込めて回すだけで弦が鳴るという話をしました。今回はもっと欲張って、ベル、金属、エレクトリックピアノ、木管——と、まるで性格の違う音色をひとつの式から取り出します。使うのはサイン波の発振器(オシレータ)2つと、こんな式だけです。 $$y(t) = \sin\big(2\pi f_c t + I \cdot \sin(2\pi f_m t)\big)$$ sin の中に、もうひとつの sin が入っている。たったこれだけの仕掛けが FM合成(周波数変調合成)で、1983年のヤマハ DX7——世界でいちばん売れたシンセサイザーのひとつで、80年代ポップスのあのエレピやベルの音源——の心臓部でもあります。この記事では、この入れ子の sin が何をしているのか、そしてつまみ2つでなぜ音色の地図を旅できるのかを、音の出るデモで確かめていきます。 DX7の音を実際の曲で聴く DX7の話をするときは、実際の曲を横に置いたほうが一気に分かりやすくなります。個々の曲で鳴っている音がすべてDX7という意味ではありませんが、80年代ポップスでFM音源がどう聞こえていたかをつかむ入口として、よく名前が挙がる曲を並べます。 a-ha / Hunting High and Low Take On Me DX7のシンセベース系プリセットの例として語られることが多い曲です。歌メロの印象が強いですが、下で細かく動く硬めのベースに耳を向けると、FMらしい輪郭の速さが分かります。 YouTubeで聴く Amazonで探す Whitney Houston / Whitney Houston Greatest Love of All DX7の代表的なエレピ音を聴くなら、まずこの系統のバラードが分かりやすいです。アコースティックピアノより硬く、ベルよりは丸い、あの透明なエレピの質感です。 YouTubeで聴く Amazonで探す Berlin / Top Gun soundtrack Take My Breath Away 『トップガン』の主題歌として有名ですが、冒頭から支えるシンセベースの質感もDX7の文脈でよく取り上げられます。エレピだけでなく、低音でもFMの硬い輪郭が出ます。 YouTubeで聴く Amazonで探す ジャケット画像はMusicBrainz / Cover Art Archive由来の画像を記事内に同梱して配信しています。 ...

公開: 2026年7月10日 · Toshihiko Arai
リングバッファの輪の上を書き込み針と読み出し針が一定間隔で追いかけっこし、読んだ音を弱めて書き戻すとやまびこが連なるディレイの図

やまびこはリングバッファ1本 ── ディレイの仕組み

山に向かって「ヤッホー」と叫ぶと、少し遅れて自分の声が返ってきます。返ってきた声は元の声よりも小さく、運が良ければ2回目、3回目と、だんだんかすかになりながら繰り返します。カラオケのエコーも、ギタリストが足元で踏むディレイペダルも、正体はこのやまびこです。音を豊かに響かせているように聞こえますが、やっていることを言葉にすると拍子抜けするほど単純で、いまの音に「少し前の自分の音」を弱めて混ぜているだけなのです。 ディレイの音を曲で聴く ディレイは、ただ音を後ろに足すだけの飾りではありません。遅れて返ってくる音がリズムの隙間を埋めると、演奏していない音符まで鳴っているように聞こえます。本文に入る前に、ディレイがフレーズそのものになっている曲を2つ置いておきます。 U2 / The Joshua Tree Where the Streets Have No Name 冒頭のギターは、付点8分ディレイが音符の隙間を埋める代表例です。1本のアルペジオに「少し前の自分」が重なり、細かく走るリズムへ広がります。 YouTubeで探す Amazonで探す Pink Floyd / The Wall Run Like Hell ミュートしたギターにディレイを重ね、反復音まで含めてリフを作る曲です。本文のフィードバック量を上げたときの「返ってくる列」が、演奏の推進力になります。 YouTubeで探す Amazonで探す ジャケット画像はMusicBrainz / Cover Art Archive由来の画像を記事内に同梱して配信しています。 山びこの場合、この「少し前の自分」を届けてくれるのは山です。声が山まで飛んで戻ってくるのに時間がかかるから遅れる。空気の中で減衰するから弱くなる。ではプログラムの中でこれを再現したいとき、山の代わりは何が務めるのか。音を一定時間だけ「ためておいて」、あとから取り出せる置き場所があればいい。今回の主役はその置き場所、リングバッファです。 少し前の自分を、輪にためておく 前提をひとつだけ確かめておくと、コンピューターにとって音とは1秒あたり44100個流れてくる数の列です。スピーカーの膜をどれだけ押し出すかを表す数が、毎秒4万個あまり届いているだけで、サイン波も人の声もこの数の並びにすぎません。だから「少し前の自分の音」とは、少し前に流れていった数のことです。0.3秒前の自分が欲しければ、直近13230個(44100 × 0.3)の数をためておいて、いちばん古いものから取り出せばいい。 ここで使うのが、固定長の配列を端まで来たら先頭へ戻る「輪」に見立てて使う、リングバッファと呼ばれるデータ構造です。当ブログでは以前、Queue の先頭削除からシフトを消す道具 として仕組みを紹介しました。要素を1つも動かさず、位置を指す目印だけをぐるぐる回すのが持ち味でしたが、今回はそのリングバッファが音響エフェクトの心臓部として働く、いわば実戦編です。 ディレイでの使い方はこうです。輪の上に、針を2本立てます。1本は書き込み針で、いま入ってきた音を毎サンプル、輪のマスに書き込んでは隣へ進む。もう1本は読み出し針で、書き込み針から一定の距離だけ離れた後ろを、同じ速さでついて回ります。 書き込み針がいまマスに置いた音を、読み出し針は自分がそのマスに到着したときに拾います。2本は同じ速さで回っているので、到着するのはきっかり「針の間隔ぶん」あとです。つまり読み出し針が拾う音は、いつでも「間隔ぶん昔の音」。この間隔こそがディレイタイム、やまびこが返ってくるまでの時間です。0.3秒のエコーが欲しければ針を0.3秒ぶん(13230マス)離しておく。エフェクターのつまみを回してディレイタイムを変えるという操作は、輪の上では針の間隔を広げたり狭めたりしているだけなのです。 追いかけっこという言葉を使いましたが、2本の針の間隔は永遠に縮まりません。等間隔を保ったまま輪を回り続ける。この安定した追いかけっこが、「常に一定時間前の音が取り出せる」という保証そのものになっています。 やまびこを連ねる ── フィードバック 読み出し針が拾った「少し前の音」を弱めて、いまの音に足す。これで1回だけのやまびこができます。しかし本物のやまびこは2回、3回と続きますし、ディレイペダルの音の魅力も、あの減衰しながら連なる尾にあります。やまびこを連ねるには、どうすればいいのでしょうか。 素朴に考えると、0.6秒前・1.2秒前・1.8秒前……と読み出し針を何本も立てて、それぞれ弱めて足したくなります。それでも作れるのですが、もっとうまい一手があります。混ぜ終わった出力のほうを輪に書き込むのです。 書き込み針が輪に書くのを「入ってきた生の音」ではなく「やまびこを混ぜたあとの出力」にする。すると出力は0.6秒後に読み出し針に拾われて、また弱められて出力に混ざり、それがまた書き込まれて……と、ぐるぐる回り始めます。1回目のやまびこには2回目が、2回目には3回目が、勝手についてくる。この、出力を入口へ戻す配線をフィードバックと呼びます。針を1本も増やさずに、無限に続くやまびこの列が手に入るわけです。 弱める割合を $g$ とすると、やまびこは1周ごとに $g$ 倍されるので、音量は $g,\ g^2,\ g^3,\ \dots$ と等比数列で減っていきます。$g$ が1より小さい限り、この列は必ずゼロへ向かうので、やまびこは自然に消えてくれます。逆に $g$ を1以上にすると、回るたびに音が減らない、あるいは膨らんでいくことになり、音は永遠に止まらずやがて轟音になります。これが発振です。カラオケでマイクをスピーカーに向けたときの「キーン」というハウリングは、まさに空気の上で起きた $g \geq 1$ のフィードバックです。ディレイを実装するときにフィードバック量へ上限を設けるのは、この事故を防ぐためで、このあとのデモでも85%を上限にしています。 ...

公開: 2026年7月9日 · 更新: 2026年7月10日 · Toshihiko Arai
サイン波を1本、2本、3本と足していくと波形が育ち、ノコギリ波になっていく図

音色の正体は倍音の配合 ── 足し算だけでノコギリ波を作る

エンベロープの回 で、サイン波は「具のないスープ」だと書きました。音量の輪郭をどれだけ作り込んでも、中身がサイン波のままでは、ピアノらしい鳴り方の系統までしか近づけない。本物の太い響きを出すには倍音たっぷりの波形が要る、という宿題を残したままでした。今回はその宿題の回収です。倍音とは何で、どうすれば「倍音たっぷりの波形」を自分の手で作れるのかを、音の出るデモと一緒に見ていきます。 音の高さが同じでも、音色が違うのはなぜか ピアノの「ラ」とフルートの「ラ」は、同じ高さなのにまるで違う音に聞こえます。マイクで録って波形を見比べると、違いは一目瞭然です。どちらも同じ間隔で同じパターンをくり返しているのに、そのくり返される「波の形」が違うのです。 コンピューターの中では、音は「スピーカーの膜をその瞬間どれだけ押し出すか」を表す数の列として、1秒あたり44100個の速さで流れています。波が1秒に何回くり返すか(周期の細かさ)が音の高さを決め、1回ぶんの波がどんな形をしているかが音色を決めます。上の図の3つは、くり返しの速さがそろっているのでどれも同じ高さの「ラ」ですが、聞こえ方は別物です。サイン波は音叉のような澄んだ音、ノコギリ波は弦や金管のような張りのある音、矩形波は昔のゲーム機のようなピコピコした音がします。 そうなると次の疑問は、この「波の形」をプログラムでどう作るかです。ノコギリの歯のような折れ線を数式で直接書いてもよさそうなものですが、サウンドプログラミングの世界には、もっと見通しのよい考え方があります。それが今回の主役、倍音です。 どんな波も、サイン波の足し算でできている 19世紀フランスの数学者フーリエは、のちの信号処理をまるごと支えることになる事実を見つけました。どんなに複雑な形の波でも、周期的にくり返ってさえいれば、それは必ず「基本のサイン波と、その整数倍の速さのサイン波たち」の足し算に分解できる、というものです(フーリエ級数と呼ばれます)。 音の言葉に翻訳するとこうなります。いちばん低い、音の高さを決めているサイン波を基音と呼び、その2倍、3倍、4倍……の速さで揺れるサイン波たちを倍音と呼びます。ピアノのラも、フルートのラも、分解すればどちらも「220Hzの基音+440Hzの倍音+660Hzの倍音+……」という同じ品目のリストになる。違うのは、それぞれの倍音がどれだけの量で入っているかという配合比だけです。音色の正体は、この配合比なのです。 分解できるということは、逆に組み立てることもできるはずです。ここが今回の核心で、実際にサイン波を1本ずつ足していくと、目の前で波形が「育って」いきます。 レシピは拍子抜けするほど単純で、$n$ 倍の速さの波を $1/n$ の量で、ぜんぶ足すだけ。基音1本ではただのサイン波だったのが、2倍の波を半分の量で足すと波が傾きはじめ、3倍の波を1/3で足すとギザギザの気配が出てきて、8倍まで足せばもう、はっきりノコギリ波の姿になります。足しているのは終始、角のまるいサイン波だけです。それなのに、足せば足すほど鋭い角が立ち上がってくる。初めて見ると、ちょっとした手品のようです。 倍音ごとの量を棒グラフに並べたものが、いわば音色の配合表です。そして配合表を少し書き換えるだけで、できあがる波形はがらりと変わります。 全部の倍音を $1/n$ で混ぜればノコギリ波。偶数番目を抜いて、奇数の倍音だけを $1/n$ で混ぜれば矩形波。ゲーム機のあのピコピコ音は、「偶数の倍音が入っていない」という配合の音だったわけです。このようにサイン波を積み上げて音色を作る方式は加算合成と呼ばれ、シンセサイザーの最も古典的な作り方のひとつです。パイプオルガンは、長さの違うパイプ(それぞれがほぼサイン波を出します)を同時に鳴らして音色を作るので、いわば物理装置による加算合成です。 ついでに自作アプリの話を少しだけ。筆者が個人開発している音感トレーニングアプリ Harmonize でも、オルガン・フルート・尺八といった音色は、まさにこの正弦倍音の重ね(加算合成)で鳴らしています。配合表を楽器ごとに変えているだけ、と言ってしまえるのがこの方式の気持ちよさです。 Harmonize 相対音感と純正律の感覚を鍛える音感トレーニングアプリ 今すぐ無料でダウンロード App StoreGoogle Play 触ってみる ここまでの話を、実際に手で混ぜられるデモを用意しました。スライダー8本がそのまま倍音の配合表です。まず「🌱 1本ずつ足して育てる」を押してみてください。基音だけのサイン波に倍音が1本ずつ加わって、澄んだ「ポー」という音がだんだん張りのあるブラスのような音に変わり、波形にノコギリの歯が立っていきます。さきほどの図が、音付きで動く様子を見られます。 うまく表示されないときは、デモを別タブで開く 。 鳴らしたまま、ノコギリ波と矩形波のプリセットを切り替えてみると、「偶数の倍音を抜く」だけで音の性格が変わるのがわかります。それから、どのスライダーをどう動かしても、音の高さそのものは変わらないことにも注目してください。高さを握っているのはくり返しの速さ、つまり基音の周波数で、倍音の配合は音色だけを受け持っています。むしろ基音のスライダーを0にしてしまっても、耳にはほぼ同じ高さに聞こえ続けるはずです。倍音の並びの「間隔」から、耳が勝手に基音を補ってしまうからで、この不思議は鳴らしていない低音が聞こえる話 として以前に取り上げました。 どう実現するか デモの中身は、レシピをそのまま数式にしたものです。基音の周波数を $f_0$ として、ノコギリ波は $$x(t) = \frac{2}{\pi} \sum_{n=1}^{N} \frac{1}{n} \sin(2\pi n f_0 t)$$ と書けます。$n$ 倍の速さのサイン波を $1/n$ の量で足し合わせる、あの図のとおりの式です(先頭の $2/\pi$ は、全体の高さを $\pm1$ にそろえるための定数です)。矩形波なら、和を奇数の $n$ だけに限って係数を $4/\pi$ にすれば得られます。プログラムにするなら、二重ループが1つあれば足ります。 /* ノコギリ波を倍音の足し算で作る(C風の擬似コード) */ for (i = 0; i < length; i++) { double t = (double)i / fs; /* いまの時刻(秒) */ double v = 0; for (n = 1; n <= 8; n++) /* 倍音を8本 */ v += sin(2.0 * M_PI * n * f0 * t) / n; /* n倍の波を 1/n で足す */ output[i] = (2.0 / M_PI) * v; } ブラウザの Web Audio API なら、サイン波を1本鳴らす部品(OscillatorNode)を8個作って、それぞれの音量を $1/n$ にしてつなぐだけです。足し算はどこにも書いていませんが、複数の音源を同じ出力へつなぐと自動的に混ざる、つまり配線そのものが足し算になっています。 ...

公開: 2026年7月8日 · Toshihiko Arai
プログラムが計算した数の列がスピーカーの膜を押し引きして音の波になる図。音の正体は1秒に44100個の数の列

音は数の列 ── サイン波を数式から鳴らす

デジタル画像の正体なら、多くの方が知っています。写真を拡大していくと四角いピクセルの並びが現れて、1枚の絵は結局「色を表す数の並び」だった、というあれです。では、音はどうでしょう。スマホから流れる音楽、ゲームの効果音、プログラムで鳴らす「ピー」という音。あれの正体を数で言い切れる人は、画像に比べるとぐっと少なくなります。 答えは画像と同じくらい単純です。スピーカーは、1秒に44100回、「いま膜をどれだけ押し出すか」という数を受け取って、そのとおりに膜を動かしているだけ。音の正体は、この数の列です。 スピーカーの中では、紙やフィルムでできた薄い膜が前後に動いて空気を押したり引いたりしています。この空気の振動が耳に届いたものが音です。そして膜の動きを指示しているのが、図の左上に並んだ数の列。+の数が来たら押し出し、−の数が来たら引っ込める。指示は1秒に44100回のペースで途切れなく届きます。録音した曲の再生も、プログラムがその場で作る合成音も、最後は必ずこの形になってスピーカーへ渡ります。裏を返せば、この数の列さえ自分で作れれば、どんな音でも鳴らせるということです。 この記事では、その一番小さな実例として、サイン波を数式から作って鳴らすところまでをやります。ここで連載の案内を少しだけ。当ブログでは、楽器の音をプログラムで作る仕組みを音の鳴るデモつきで紹介するシリーズを続けていて、エンベロープ やカープラス・ストロング の回では、今回の「音=数の列」を毎回さらっと前提にしてきました。今回はその土台を一本で正面から扱います。筆者は個人で音感トレーニングアプリ Harmonize を開発しており、アプリで鳴るピアノもオルガンも、録音ではなく、鳴らすたびにプログラムが計算したこの数の列です。 Harmonize 相対音感と純正律の感覚を鍛える音感トレーニングアプリ 今すぐ無料でダウンロード App StoreGoogle Play なめらかな波も、拡大すると点の列 音の教科書を開くと、まず出てくるのはなめらかな波の絵です。ところがコンピューターの中の音を拡大していくと、画像のピクセルとまったく同じことが起きます。 なめらかに見えていた波は、実は1/44100秒おきに置かれた点の列です。この一粒一粒をサンプルと呼びます。本物の空気の振動は切れ目なく連続していますが、コンピューターはそれを1秒あたり44100回のスナップショットで代表させている、というわけです。この「1秒を何個の数で表すか」をサンプリング周波数と呼び、44100Hz(44.1kHz)はCDが採用して以来の標準的な細かさです。人間に聞こえるいちばん高い音(およそ2万Hz)の揺れを描き取るのに足りるだけの細かさとして選ばれた数字です。なぜその2倍強で足りるのかは面白い話なので、この連載のエイリアシング(ナイキストの壁)の回であらためて取り上げます。さしあたっては「1秒=44100個の数」とだけ覚えれば十分です。 つまりプログラムで音を出す仕事とは、44100分の1秒ごとに数をひとつ決めて、スピーカーへ送り続けることです。では、その数をどんな式で決めれば「ラの音」が鳴るのでしょうか。 どう実現するか ── 位相をぐるぐる回す 鳴らしたいのは、たとえば440Hzのサイン波だとします。440Hzとは「1秒に440回、押し引きをくり返す」という意味です。ここで、1回のくり返しを円の1周にたとえるのが定石です。円の上を回る点を思い浮かべて、その角度を$\varphi$(ファイ)と書き、位相と呼びます。1周は$2\pi$。1秒に440周してほしくて、数を書き出すチャンスは1秒に44100回あるのですから、1サンプルあたりに進むべき角度は決まっています。 $$\Delta\varphi = \frac{2\pi f}{f_s} \qquad (f = 440,\ f_s = 44100)$$ あとは、1サンプルごとに$\varphi$をこの$\Delta\varphi$だけ進めて、その瞬間の高さ$\sin\varphi$を数として書き出すだけです。 書き出した数を時間順に並べると、それがそのままサイン波の点列になっています。この「回しては書き出す」の小さなループを、サウンドプログラミングではオシレータ(発振器、音の源になる部品)と呼びます。コードにするとこれだけです。 /* サイン波オシレータ(C風の擬似コード) */ double phase = 0.0; double dphi = 2.0 * M_PI * f0 / fs; /* 1サンプルぶんの角度 */ for (n = 0; n < length; n++) { output[n] = amp * sin(phase); /* いまの高さを数として書き出す */ phase += dphi; /* 位相を進める */ if (phase >= 2.0 * M_PI) phase -= 2.0 * M_PI; /* 1周したら戻す(値が育ちすぎないように) */ } ここで、$\sin(2\pi f t)$と時刻$t$から直接計算すればいいのに、なぜわざわざ位相を足し込んでいくのか、と思うかもしれません。両者は同じ波を作りますが、差が出るのは周波数を途中で変えた瞬間です。時刻から直接計算する式で$f$を差し替えると、波の高さがいきなり別の場所へジャンプして「プチッ」という雑音が鳴ります。位相を積み上げる方式なら、$\Delta\varphi$を差し替えても$\varphi$自体は連続なので、波はなめらかにつながったまま音程だけが変わる。実用のシンセサイザーがそろってこの方式なのは、それが理由です。 ...

公開: 2026年7月7日 · Toshihiko Arai
入力波形をフィルターで処理して出力波形と周波数特性が変わる概念図

音色を変えるデジタルフィルター入門。ローパスとハイパスのカットオフを考える

サウンドプログラミングで音色を変えるとき、いちばん基本になる道具がフィルターです。フィルターは、音を「加工する魔法の箱」ではありません。波形の中から、速く変化する部分を弱めたり、ゆっくり変化する部分を弱めたりする計算です。 この記事では、ローパスとハイパスに絞ります。まずは「ローパスのカットオフ周波数を、デジタルの1サンプルごとの計算へどう変換するのか」をはっきりさせます。 フィルターの音を曲で聴く フィルターは、単体で主役になるというより、音の明るさを開いたり閉じたりして曲の呼吸を作る道具です。特にサンプルを反復するダンスミュージックでは、同じループでも高域を削ると遠く、開くと一気に前へ出てきます。ここでは、その「明るさを動かす」感覚で聴きやすい曲を2つ挙げます。 Daft Punk / Discovery One More Time French house のフィルター感をつかむ入口として分かりやすい曲です。ループの明るさが前へ出たり奥へ引いたりする聴こえ方を、ローパスの「高域を削る」と結びつけて聴けます。 YouTubeで探す Amazonで探す Stardust / Single Music Sounds Better With You 短いサンプルを反復しながら、明るさと密度でグルーヴを育てる French house の代表例です。同じ素材でも、高域の残し方で近さや抜けが変わることを聴き取りやすいです。 YouTubeで探す Amazonで探す ジャケット画像はMusicBrainz / Cover Art Archive由来の画像を記事内に同梱して配信しています。 ローパスは波形をならす ローパスフィルターは、低い周波数を通し、高い周波数を落とすフィルターです。言い換えると、波形の急な変化をならします。矩形波やノコギリ波の角が丸くなり、音は明るさを失って、こもった方向へ変わります。 いちばん直感的なローパスは、移動平均です。いまの値だけでなく、少し前の値もまとめて平均します。たとえば4個の値を平均するなら、次のようになります。 $$ y[n] = \frac{x[n]+x[n-1]+x[n-2]+x[n-3]}{4} $$ $x[n]$ は入力、$y[n]$ は出力です。$n$ は「何番目の値か」を表す番号です。最後に4で割っているのは、4個の値を足して平均しているからです。3個を平均するなら3で割りますし、8個を平均するなら8で割ります。 この式は、波形の細かいギザギザをならします。細かいギザギザは高い周波数成分なので、高域が落ちます。まずはこれがローパスの出発点です。 実際のサウンドプログラミングでは、次のような形もよく使います。 $$ y[n] = ax[n] + (1-a)y[n-1] $$ これは、いまの入力 $x[n]$ と、ひとつ前の出力 $y[n-1]$ を混ぜる式です。$a$ が大きいほど入力に素早く追従し、$a$ が小さいほど前の出力を強く引きずります。前の値を引きずるほど、急な変化には追いつけません。だから高域が落ちます。 コードにすると、1サンプルごとの処理は次の形です。 let y = 0; function lowpass(x, a) { y = a * x + (1 - a) * y; return y; } ここではまだ、カットオフ周波数をどう計算するかは置いておきます。まず大事なのは、ローパスが「前後の値を混ぜて、急な変化をならす」処理だということです。 ...

公開: 2026年7月5日 · 更新: 2026年7月10日 · Toshihiko Arai

PostgreSQLのUPDATEは上書きしない:MVCCと行バージョンをpsqlで見る

UPDATE しかしていないのに、なぜテーブルは太るのか PostgreSQL を運用していると、「DELETE はほとんどしていないのにテーブルの物理サイズが増え続ける」「夜間バッチで大量 UPDATE が走っているのに、別画面の SELECT は思ったほど待たされない」という現象に出会います。 この不思議は、PostgreSQL の UPDATE を「今ある行の値を書き換える操作」だと思っていると説明しにくくなります。入口で先に図にすると、実際の動きは次のようになります。 PostgreSQL の UPDATE は上書きではなく追記です。新しい行バージョンを追加し、古い行バージョンには「このトランザクションで見えなくなった」という死亡印を付けます。DELETE も物理的にその場で消すのではなく、対象の行バージョンに死亡印を付ける操作です。 この記事では、この一点から実務でよく見る挙動をつなげます。SELECT / UPDATE など SQL の基本操作そのものを確認したい場合は、先に PostgreSQLと向き合うための 現場で使えるデータベース操作・SQLノート を見ておくと、以降の psql ログを追いやすくなります。 行バージョンを見分ける xmin と xmax PostgreSQL は MVCC、つまり Multi-Version Concurrency Control という仕組みで同時実行を制御します。日本語にすると「複数バージョンを使った同時実行制御」です。ひとつの論理的な行に対して、必要に応じて複数の行バージョンを持ち、読み取り側は自分のスナップショットから見えるバージョンだけを読みます。 スナップショットとは、ある時点でどのトランザクションが完了済みで、どのトランザクションがまだ実行中だったかを判断するための見取り図です。どの範囲を一つのスナップショットで通すかは、トランザクション分離レベルという設定で決まります。既定の READ COMMITTED では SQL 文ごとに新しいスナップショットを取り直すため、実行中に別のトランザクションが確定した変更は次の文から見えます。一段上の REPEATABLE READ にすると、トランザクションが最初に読んだ時点のスナップショットが最後まで固定され、同じ SELECT を何度実行しても結果が変わりません。この記事の後半では、この固定が効く様子も実際に見ます。 行バージョンには、通常の id や name のような列とは別に、PostgreSQL が内部的に持つシステム列があります。この記事で見るのは次の 3 つです。 列 役割 xmin その行バージョンを作ったトランザクション ID xmax その行バージョンを削除または更新で見えなくしたトランザクション ID。何もなければ 0 ctid その行バージョンがテーブル内のどこにあるかを示す物理位置 トランザクション ID は、PostgreSQL が書き込みトランザクションを識別するために付ける番号です。記事中では XID とも書きます。xmin は「この XID が作った」、xmax は「この XID が死亡印を付けた」と読むと理解しやすいです。 ...

公開: 2026年7月5日 · Toshihiko Arai
2つの音を足すだけでは差音は生まれず、歪み(非線形)を通すと差の周波数が新しく生えることを示す図と、パイプオルガンが16フィートと10・2/3フィートの2本で32フィート相当の重低音を作る仕組みの図

鳴らしていない低音が聞こえる ── 差音と、パイプオルガンの合成低音

2つの音を同時に鳴らしたとき、鳴らしたつもりのない低い音がうっすら床から湧いてくるように聞こえることがあります。ギターを歪ませて重音を弾いたとき、あるいは大きなパイプオルガンが地鳴りのような重低音を出すとき。これは気のせいではなく、差音(さおん)と呼ばれるれっきとした現象です。今回は、その「そこに無いはずの低音」がどこから来るのかをたどります。 この連載では、楽器の音をプログラムでどう作るかを紹介しています。差音はどちらかというと音そのものの不思議に近い話ですが、その正体をつかむと、シンセサイザーの変調や歪みが何をしているのかも一段見通しよくなります。 「足し算」だけでは差音は生まれない まず、素朴なところでつまずきがちな点をはっきりさせておきます。2つの音を同時に鳴らすと、空気中では2つの波が足し合わさります。ここまでは間違いありません。ところが、その足し合わさった波の中に、差の高さ(周波数の引き算にあたる音)は含まれていないのです。 足した波を周波数で分解しても、出てくるのは元の2つの高さだけ。近い2つの音なら、音量がゆっくり脈打つ「うなり」は感じられますが、それは音量の揺れであって、低い音そのものではありません。純粋な足し算は、新しい高さの音を一切作らない——これは数式の上でも成り立つ、動かしがたい性質です。 ではなぜ低音が聞こえるのか。カギは、足した波が「まっすぐでないもの」を一度くぐったかどうかにあります。 ここで線形・非線形という言葉を用意します。「線形=まっすぐ、非線形=曲がっている」というイメージで大きくは合っているのですが、“何が"曲がっているのかが少しだけ紛らわしいので、上の図で押さえておきます。まず、左の入力——きれいな2つの音を足しただけの波——は、上下段でまったく同じ1つです。片方だけが歪んだ音、ということはありません。違うのは、その同じ波を通す"箱"のほうだけです。箱というのは、音が通り抜ける装置のことで、スピーカーやアンプ、歪みエフェクター、そして私たちの耳がそれにあたります。 中央のグラフは、その箱の性格を1本の線で表したものです。横軸は、ある瞬間に箱へ入ってきた音の大きさ、縦軸は、そのとき箱から出る音の大きさで、時間軸ではありません。入力を2倍にすれば出力もきっちり2倍、というまっすぐな比例なら線形——理想的なアンプや空気がこれに近い——です。頭打ちになるなどして曲がっていれば非線形で、歪みエフェクターや、大きな音での耳がそれにあたります。同じ入力でも、まっすぐな箱を通すのか、曲がった箱を通すのかで、出て来る音がまるで変わる、というのがこの図の要点です。 線形の装置には、決定的な性質があります。入れた音に無い高さは、絶対に出てこない。サイン波を入れればサイン波が出る(大きさや位相は変わっても、高さは変わらない)。だから、いくらきれいに2音を足しても、線形のままでは差音は生まれません。図の上段で、出てくるのが元の2本だけなのはこのためです。 ところが、入れた大きさと出る大きさの関係が曲がっている装置——非線形——を通すと、話がまるで変わります。大きな入力で頭打ちになる、いわゆる歪みがその代表です。足した波をこの曲がった特性にくぐらせると、元には無かった差の高さや、その他の倍音がいっせいに生まれる。図の下段で、いちばん低いところに赤い線(差音)が新しく生えているのがそれです。 なぜ曲がっていると新しい高さが生まれるのか、いちばん簡単な非線形として「二乗する」で考えると腑に落ちます。2つの波 $\sin A + \sin B$ を二乗すると、 $$(\sin A + \sin B)^2 = \sin^2 A + 2\sin A\sin B + \sin^2 B$$ 真ん中に、2つの波の掛け算 $2\sin A\sin B$ が現れます。そしてこの掛け算は、 $$2\sin A\sin B = \cos(A - B) - \cos(A + B)$$ と書き直せる。$\cos(A - B)$ がまさに差の高さ、$\cos(A + B)$ が和の高さです。つまり、足した信号を非線形に通すと、その内側に掛け算がこっそり現れ、それが差音を生む。「足すだけでは出ない、足したあと一度歪ませると出る」というのは、こういうことでした。 ここは引っかかりやすいところなので、先に触れておきます。いまの二乗を全部開くと、出てくるのは差音と和音、それに各音の2倍音ばかりで、肝心の元の2音がどこにも見当たりません。純粋に二乗しきる箱を通すと、元の高さは本当に消えてしまうのです。ではなぜ現実には元の音が残るのかというと、本物の歪みは「純粋な二乗」ではないからです。エフェクターや耳の曲がりは、「入ってきた音をそのまま通す部分」と「少しだけ二乗する部分」の足し算になっていて、小さい入力ではほとんどまっすぐ。だから元の2音はそっくり残り、曲げた分から差音がおまけに少しだけ生える。図の下段で $f_1$ と $f_2$ が残ったまま、その脇に差音が加わっているのは、このためです。ちなみに、入力をまるごと掛け算してしまう箱も特殊なエフェクターとして実在し(リングモジュレーター)、こちらは元の音を消して差音と和音だけにするので、あの金属的な機械音になります。 歪ませるほど、はっきり出る この見方は、エフェクターをいじる人の実感とぴたり重なります。きれいな音のときは静かなのに、ディストーションを深くかけて2音を鳴らすと、急に濁ったうねりや低い成分が前に出てくる。あれは気のせいではなく、歪み=強い非線形が、さきほどの掛け算を激しく起こしているからです。混じり合った音どうしが差や和の高さを次々に作る、この現象は相互変調(intermodulation)と呼ばれ、歪みが深いほど盛大になります。歪んだ音ほど差音がよく出る、という体感は物理的に正しいのです。 逆に、倍音の少ないきれいな音を、まっすぐな装置でそっと鳴らすだけなら、差音はほとんど出ません。 耳そのものが非線形だから、生の耳でも起きる ではきれいな2音を、歪みなしで、ただ大きな音で鳴らしたら差音は聞こえないのかというと、そうとも言い切れません。というのも、私たちの耳自身が非線形な装置だからです。音は外耳から外耳道を通り、鼓膜を震わせ、耳小骨(つち・きぬた・あぶみ)を経て、内耳の蝸牛へ届きます。ここで差音を作っているのは、じつは鼓膜ではありません。大きな音で鼓膜が限界まで揺れて頭打ちになる——歪みエフェクターのクリップのように——と考えたくなりますが、主な発生源はその奥の蝸牛、なかでも音を電気信号に変える外有毛細胞という細胞だと分かっています。この細胞の反応がまっすぐでない(非線形)のです。しかもそれは、大きな音で受動的に頭打ちになるというより、音を小さいうちから増幅する仕組みそのものに備わった圧縮的な曲がりで、それほど大きくない音でも働きます。だから外の空気にきれいな2音しか無くても、蝸牛の中で差音が作られてしまう。 これは古くから知られていて、ヴァイオリン奏者のジュゼッペ・タルティーニは、重音を弾いたときに下の方に聞こえる「第三の音」に18世紀初頭(本人によれば1714年)には気づいており、後に理論書としてまとめました。差音がタルティーニ音とも呼ばれるのはこのためです。ほぼ同じ頃にドイツでも独立に記述したとされ、最初の発見者が誰かには諸説あります。 ...

公開: 2026年7月5日 · Toshihiko Arai
平均律の和音はわずかなズレで音量が脈打ち(うなり)、純正律では倍音がぴたり重なって脈打ちが止まる様子を示す波形の図

きれいな和音はなぜ「うなり」が消えるのか ── 平均律と純正律

よく調律された楽器で和音を鳴らしたとき、澄みきって聞こえることもあれば、かすかに「ワウワウ」と音量が揺れて聞こえることもあります。この揺れは気のせいではなく、周波数から計算で求まる、はっきりした物理現象です。今回は、その揺れ——うなり——の正体をたどり、平均律と純正律という二つの調律を、プログラムでどう鳴らし分けるのかを見ていきます。 少しだけこの連載のことを。ここでは楽器の音をプログラムで作る仕組みを紹介しています。筆者は個人で音感トレーニングアプリ Harmonize を作っていて、これはまさに今回の「うなりが消える位置」を耳で探し当てる練習をするアプリです。純正律や平均律が音楽やトレーニングのなかでどんな意味を持つかは Harmonize の Q&A にまとめてあるので、本記事では現象そのものと、その作り方に絞ります。 Harmonize 相対音感と純正律の感覚を鍛える音感トレーニングアプリ 今すぐ無料でダウンロード App StoreGoogle Play うなりには二段階ある まず揺れそのものから。じつは、うなりの起き方には二段階あって、ここを分けておかないと話が混ざります。 ひとつめは、高さのごく近い二つの音のあいだで起きるうなりです。440Hz と 442Hz のように基音(その音のいちばん低い成分)どうしが近いと、二つの波が少しずつズレていき、山と山が重なる瞬間は大きく、山と谷がぶつかる瞬間は小さくなる。これがくり返されて音量が脈打ちます。その速さは二つの周波数の差にちょうど等しく、$442 - 440 = 2$ で1秒に2回。差が縮むほどゆっくりになり、ぴったり同じ高さで消えます。ここで大事なのは、これは倍音がなくても、純粋なサイン波どうしでも起きるということです。 問題はふたつめ、ドとソのように離れた二つの音——和音——のうなりです。ドが 261Hz、ソが 392Hz なら、基音どうしは 130Hz も離れていて、これは「ゆっくりした脈打ち」ではなく、もう別の一つの高さとして聞こえてしまいます。だから基音だけを見るかぎり、和音にうなりは出ません。実際、サイン波でこの5度を鳴らすと、少し外れて感じることはあっても、ワウワウとは揺れないのです。 それでも本物の楽器では、和音にはっきりうなりが出ます。その正体が倍音です。 澄む条件は「倍音がぴたり重なる」 ひとつの楽器の音には、基音のほかに、その2倍・3倍・4倍…の高さの成分がいくつも含まれています。これが倍音です。だから和音を鳴らすと、耳もとには両方の倍音がずらりと並びます。そして、片方の高い倍音と、もう片方の低い倍音が「近いけれど少し違う高さ」で出会うと、そこで——さきほどの近い二音のうなりとまったく同じ理屈で——うなりが生まれます。 上の図は、その重なるはずの二つ——ドの3倍音と、ソの2倍音——を波として重ね、足し合わせたものです。純正律では二つが同じ高さでずっとそろっているので、足しても音量は変わりません。平均律ではソをわずかに低く取るぶん、二つの波が少しずつずれていき、山と山が重なって大きくなる瞬間と、山と谷がぶつかって打ち消し合う瞬間をくり返します。この音量の脈打ちが、うなりの正体です。脈打ちの速さ(毎秒およそ0.9回)は、二つの波の周波数の差にちょうど等しくなります。和音が澄むか濁るかは、この「重なるはずの倍音」がぴたり合うかどうかで決まるわけです。だから、倍音をあまり持たない音(サイン波に近い音)ほど和音のうなりは出にくく、倍音の豊かな楽器ほどはっきり出る。楽器によって濁り方が違うのは、このためです。 では、重なるはずの倍音がぴたり合うのはどんなときか。二つの音の周波数が簡単な整数比のときです。ソをドのちょうど $3/2$ 倍にすると、ドの3倍音($3 \times$ 基音)とソの2倍音($2 \times \tfrac{3}{2} \times$ 基音 $= 3 \times$ 基音)が同じ高さになり、うなりが消えます。長3度なら $5/4$、オクターブなら $2/1$。こうして音程を単純な整数比でそろえる決め方が純正律で、うなりが最も少ない、いちばん澄んだ響きです。 一方、ピアノなどが使う平均律は、1オクターブ(周波数がちょうど2倍になる幅)を12の等しい比で割った実用的な妥協です。半音ひとつが $2^{1/12}$(およそ 1.0595)倍で、どの調へ移っても均一に弾ける代わりに、どの音程もわずかに整数比からズレます。平均律の5度は $2^{7/12} \approx 1.4983$ で純正の 1.5 にごく近く、うなりはゆっくり。3度は $2^{4/12} \approx 1.2599$ で純正の 1.25 より上ずっていて、はっきりしたうなりになります。純正律と平均律のこうした使い分けの事情は Q&A のほうに譲ります。 触ってみる 鳴らして聴くのが早いので、デモを用意しました。長3度や完全5度、ドミソの和音を鳴らしたまま、平均律と純正律を切り替えてみてください。平均律ではうなりが出て、純正律にした瞬間に止まって澄む——その違いが、下のスコープの音量の脈打ちとあわせて分かります。 うまく表示されないときは、デモを別タブで開く 。 ...

公開: 2026年7月4日 · Toshihiko Arai
ノイズを詰めた輪(リングバッファ)を一周ごとに平均すると、ギザギザの波がなめらかな波に整いながら減衰し、はじいた弦の音になる図

ノイズをひと吹き、輪に閉じ込めて回すだけで弦が鳴る ── カープラス・ストロング

プログラムで楽器の音を作ろうとすると、道はふたつ思い浮かびます。ひとつは本物をマイクで録って貼りつけるサンプリング。もうひとつは、エンベロープの回 でやったように、波形をいちから組み立てていくやり方です。どちらも「音の形」を外側から与える発想です。 ところが、これとはまるで違う第三の道があります。音の形をこちらから与えるのではなく、弦そのものの振る舞いをプログラムの中で回して、鳴るにまかせる。材料はあきれるほど少なくて、ほんのひと吹きのノイズだけ。それを輪に閉じ込めてぐるぐる回すと、はじいた弦の音が、ちゃんと減衰しながら鳴ります。カープラス・ストロングと呼ばれる、1983年に発表された古くて賢い方法です。 本題の前に、この連載について少しだけ。ここでは楽器の音をプログラムで作る仕組みを、少しずつ紹介しています。筆者は個人で音感トレーニングアプリ Harmonize を作っていて、その中で鳴る楽器の音は、録音の再生ではなく、鳴らすたびにプログラムが計算した合成音です。こうした音づくりの基礎は独学で、古いC言語のサウンドプログラミングの教科書から学びました(参考文献に挙げています)。今回のカープラス・ストロングも、その延長にある小さな一手です。 Harmonize 相対音感と純正律の感覚を鍛える音感トレーニングアプリ 今すぐ無料でダウンロード App StoreGoogle Play 弦をはじくと、何が起きているか 仕組みに入る前に、本物の弦を思い出してみます。ギターでも琴でも、弦をはじくというのは、弦を指でつまんで、でたらめな形にひしゃげさせてから、ぱっと離すことです。離された弦は、そのひしゃげをきっかけに行ったり来たり揺れはじめ、揺れは空気や熱に少しずつエネルギーを奪われて、やがて止まって静かになります。 ここで起きていることは、煎じ詰めるとふたつだけです。ひとつは、最初に一度きりの、でたらめな衝撃が与えられること。もうひとつは、その揺れが時間とともに薄れていくこと。カープラス・ストロングがまねるのは、まさにこのふたつです。でたらめな衝撃はノイズで、薄れていく揺れは、輪の上での平均が受け持ちます。 ノイズを輪に閉じ込めて回す 先に前提をひとつ確かめておきます。コンピューターが音を出すとき、スピーカーへは1秒あたり44100個の数が送られていて、その一つ一つが「その瞬間に膜をどれだけ押し出すか」を表しています。音の正体は、つまるところこの数の列です。サイン波もピアノの音も、毎秒4万個あまりの数の並びにすぎません。ここが分かっていると、これから話す仕組みが素直に飲み込めます。 カープラス・ストロングで用意するのは、その数を何十個か並べた短い列です。ただし端まで来たら先頭へ戻る、輪のようにつながった列を使います。データ構造としてはリングバッファ と呼ばれるもので、位置を指す針がぐるぐる回り、端に来たら先頭へ折り返します。 最初に、この輪の全部のマスをノイズ、つまりでたらめな数で満たします。これが弦をはじいた瞬間のひしゃげにあたります。あとは針を順に進めながら、いま指しているマスの数をそのまま音の1サンプルとして出力し、端まで行ったら先頭に戻ってまた出力していく。ここが肝心なのですが、鳴っているのはこの輪に入っている数そのものです。どこかに別のサイン波があって、それを掛けたり変調したりしているのではありません。輪から順に取り出した数の列が、そっくりそのまま音になります。 では音の高さはどこで決まるのか。輪は端まで行くと先頭へ戻るので、出てくる数の列は、輪の長さぶんの間隔で同じパターンをくり返します。数は1秒に44100個の速さで出ていくので、輪のマスが $L$ 個あれば、1秒あたり $44100 \div L$ 回だけそのパターンがくり返される。このくり返しの回数が、そのまま音の高さ(周波数)です。輪が長ければゆっくりくり返すので低い音、短ければ速くくり返すので高い音。出したい高さ $f_0$ が決まれば、輪の長さを $L = f_s / f_0$ マスにすればよい、というだけの話です。ドとラの違いは、輪を何マスにするか、それだけで決まります。 ただし、もし輪の中身を固定したまま回し続けたら、そのノイズが延々くり返す、ざらついたブザーのような音が同じ高さで鳴りっぱなしになるだけです。カープラス・ストロングが弦の音になるのは、針が通り過ぎるたびにマスの中身を書き換えるからです。数を出力すると同時に、そのマスを「自分と隣の平均」にして、ほんの少し小さくして書き戻す。すると輪の形は、一周ごとに少しずつ変わっていきます。 なぜ平均するだけでノイズが澄んだ音になるのか。隣どうしを平均するという操作は、値が細かく上下している部分ほど強くならします。細かい上下は高い音の成分ですから、平均を通すたびに高い成分が削られていく。これはローパスフィルタ、つまり高い音を通しにくくするフィルタそのものです。はじめのノイズには高い成分から低い成分までひととおり入っていますが、一周ごとに高いほうから消えていき、最後に生き残るのは輪の長さぶんの周期でくり返す成分だけ。それが澄んだ音の高さとして聞こえます。 そして高い成分が先に、低い成分があとに消えるということは、音がはじめは明るく、すぐ丸くなって、やがて消えていくということです。この「高い倍音から先に消える」という振る舞いは、本物の弦や、あとで触れるピアノの音の大事な特徴なのですが、カープラス・ストロングではそれを一つ一つ設計する必要がありません。輪の上で平均するという一手の、いわばおまけとして手に入ってしまいます。 触ってみる 言葉で追うより、鳴らして見たほうが早いので、デモを用意しました。上のドレミを押すと、その音程ぶんの長さの輪にノイズを詰めて鳴らします。真ん中の輪の絵は、いま輪の中に入っている値をそのまま描いたものです。押した直後はギザギザのノイズ、赤い針が一周するたびに角が取れて、波がなめらかな形に整いながら少しずつ縮んで消えていく ── さきほどの三段の図が、リアルタイムで動くのを見られます。 うまく表示されないときは、デモを別タブで開く 。 いちばん下のスペクトログラムを見ると、高いほうの成分から順に暗くなっていくのがわかります。これがさっきの「高い倍音から先に消える」です。それから、明るさのつまみを右いっぱいに回してみてください。一周ごとの平均をほとんどやめてしまうと、音は弦ではなく、金属的な反響のようになります。輪を平均する一手こそが、弦らしさの正体だったわけです。 このとき輪は、平均という味つけを失って、ただの遅延ライン(信号を一定時間ためて送り返す仕掛け)にフィードバックがかかっただけの状態に戻ります。これはギターアンプに載っているスプリングリバーブ ── バネに信号を通し、伝わって返ってくる音を拾う装置 ── とそっくり同じ構造です。あの金属的な「ボヨーン」が顔を出すのは、そのためです。 この素のままの音は、ギターともピアノとも少し違う、板に弦を張っただけのような、どこか金属質な響きに聞こえたかもしれません。実際この音は、昔から琴やハープシコードにたとえられてきました。共鳴する箱(ボディ)をまだ一切持っていない、弦の生の振動だからです。 そこで効いてくるのが、はじきの柔らかさのつまみです。真っ白なノイズをそのまま詰めると、はじいた瞬間に高い成分がびっしり入るので、硬いピックで弾いたような金属的なアタックになります。詰める前にノイズを少しならして角を丸めておくと、やわらかい所を指の腹ではじいたような音になり、金属質が抜けてナイロン弦のような丸みが出てきます。輪を回す仕組みはまったく同じまま、はじき方を変えるだけで、琴とナイロン弦のあいだを行き来できるのです。 どう作るか 仕組みが単純なだけあって、中身もほんの十数行です。輪をノイズで満たし、針を回しながら「出力して、隣と平均して書き戻す」を繰り返す。それだけです。 /* カープラス・ストロング(C風の擬似コード) */ int L = round(fs / f0); /* 輪の長さ=音程を決める */ float buf[L]; for (i = 0; i < L; i++) buf[i] = noise(); /* ノイズをひと吹き詰める */ int i = 0; for (n = 0; n < length; n++) { output[n] = buf[i]; /* いまの値を出力 */ int j = (i + 1) % L; /* 隣(輪なので端は先頭へ戻る) */ buf[i] = decay * 0.5f * (buf[i] + buf[j]); /* 隣と平均し、少し縮めて書き戻す */ i = j; /* 針をひとつ進める */ } 数式で書けば、いま鳴っている値 $y[n]$ は、輪の長さ $L$ だけ前の値とそのひとつ前の平均、 ...

公開: 2026年7月4日 · Toshihiko Arai