Skip to content

シンセの音作りの基礎 ​

シンセサイザーは、録音を再生するのではなく、音をゼロから生成する楽器です。シンセのノートの裏側にはマイクも音声ファイルもありません。コンピューターが波形をサンプル単位で、リアルタイムに計算します。これが、録音を再生する サンプル音源 とシンセサイザーを分ける唯一の本質的な違いです。

本ページでは、あらゆるシンセに共通する構成要素を説明し、続いて選択できる 17 種類の音作り方式(エンジン)を紹介します。概念のみで、コードはありません。

なぜ録音せず生成するのか

生成されたノートは、どんな高さ・長さ・音色にもでき、録音データを保存する必要もありません。「録音を引き伸ばす」ことで起きる不自然さも避けられます。代わりに、音は設計する必要があります。誰かが波形を選び、整形し、どう変化させるかを決めます。その設計をパッチと呼びます。

古典的な 3 つのブロック ​

どれほど複雑でも、ほとんどのシンセ音は 3 段の連なりから生まれます。信号は左から右へ流れ、各段はより仕上がった信号を次の段へ渡していきます。オシレーターの生の音はフィルターで整形され、フィルターが整形した音にアンプが音量の形を与えます。

減算式の信号チェーン
生の音音色の整形音量オシレーターフィルターアンプ出力

1. オシレーター(生の音) ​

オシレーターは、ノートのピッチで連続して繰り返す波を作ります。その波形が音の生の色を決めます。波形ごとに、基音の上に積み重なる 倍音成分 の混ざり方が異なるからです。

波形聞こえ方理由
サイン波純粋で、空洞のような、フルートに近い音基音のみで倍音がない
ノコギリ波明るく、ブザーのように厚い音すべての倍音を含む。定番のシンセリード/ベース
矩形波空洞のような、木質の、リード楽器的な音奇数倍音のみ
三角波柔らかくまろやかな音奇数倍音だが弱く、サイン波に近い
ノイズピッチのないノイズすべての周波数が同時に鳴る。打楽器・風・息に使う
SIGNAL · HARMONICSIDLE
波形とスペクトル — 倍音はどこから生まれるか

上段は時間波形、下段はそのスペクトル。サイン波は基音だけ、ノコギリ波はすべての倍音、矩形波は奇数倍音だけが立つ。波形を切り替えると倍音の櫛が現れる。

波形
周波数
220 Hz

倍音、部分音、インハーモニシティ

音に含まれる周波数成分の 1 つ 1 つを部分音と呼びます。部分音が基音のちょうど整数倍(f、2f、3f…)に並ぶとき、それを倍音と呼び、耳には 1 つのはっきりした音高が聞こえます。上の表の音高を持つ波形は、どれもこの形で作られています。実際の弦や棒や鐘には硬さがあるので、部分音は整数倍から、たいていは高い側へずれます。このずれがインハーモニシティ(非調和性)です。硬い弦では n 番目の部分音が fₙ = n · f₀ · √(1 + B·n²) に来ます。B は小さな硬さの係数で、ピアノの A4 ではおよそ 0.0008 です。これだけでも 10 番目の部分音は 10 × f₀ より約 64 セント高くなります。この伸びはピアノらしさの一部で、内蔵のピアノモデルはこれを再現しています。

デジタルのノコギリ波に注意が要る理由:エイリアシング

ノコギリ波や矩形波は倍音を際限なく含みますが、デジタル信号が保持できるのはサンプルレートの半分(ナイキスト周波数。48 kHz なら 24 kHz)より下の周波数だけです。素朴に計算したノコギリ波はそこで止まらず、ナイキストより上の倍音が下へ折り返してエイリアシングになります。音符に従わない非調和な音で、高い音ほど目立ちます。NativeSynth の減算式オシレーターはこれを避けるために帯域制限されています。ノコギリ波と矩形波は、跳躍のたびに短い多項式の補正(PolyBLEP。多項式で帯域制限したステップ)でなめらかにし、三角波はその補正済み矩形波を積分して作ります。出力段の sampleHoldHz と bitDepth は、ローファイ効果として意図的にエイリアシングを持ち込みます。

2. フィルター(音色を整える) ​

フィルターは周波数成分の一部を削ったり持ち上げたりします。最も一般的なのはローパスフィルターで、低域を残して高域を落とします。重要なつまみは 2 つです。

  • カットオフ:フィルターがエネルギーを削り始める周波数です。下げると音は暗くこもり、上げると明るくなります。
  • レゾナンス:カットオフ周波数の直上を持ち上げる量です。少量で声のような「ワウ」の強調が加わり、多量だとフィルターが共鳴して口笛のように鳴ります。

カットオフを時間とともにスイープさせる動きは、最もシンセらしい音の動きです。その動きをどう作るかは エンベロープとモジュレーション を参照してください。

SYNTH · SUBTRACTIVEIDLE
ローパスフィルター — カットオフ・レゾナンス・モデル

ノコギリ波をローパスフィルターに通します。シンセで最も象徴的な操作です。カットオフを下げると高次の倍音が削れて音色が暗くなり、レゾナンスを上げるとフィルターがカットオフ付近で共振して「ワウ」がかかります。モデルは模倣するフィルター回路を選びます。SVF はクリーンなまま、ラダーや Sallen-Key はサチュレーションがかかり、高いレゾナンスでは自己発振します。下段のスコープは波形です。再生して聞いてください。

カットオフ
2200 Hz
レゾナンス
3
フィルターモデル

3. アンプ(時間にわたる音量) ​

アンプは、キーを押した瞬間から音が完全に消えるまでのノートの音量を制御します。生のオシレーターは延々と鳴り続けるだけですが、エンベロープで制御されたアンプがノートに始まり・本体・終わりを与えます。弾いた瞬間のアタック、ゆっくりとした立ち上がり、長い余韻です。

エンベロープそのもの(4 つの段階とその聴き方)は エンベロープとモジュレーション で扱います。

SYNTH · SUBTRACTIVEIDLE
ADSR エンベロープ — 音の立ち上がりと減衰

同じ A3 を、振幅エンベロープで形づくります。アタックとディケイは音がピークへ到達し離れる速さを、サステインはキーを押している間に保つレベルを、リリースはキーを離した後の減衰を決めます。上段の輪郭がそのエンベロープです。コントロールを動かして形を見て、再生で確かめてください。(サステインを 0 まで下げると、キーを押したままでも音が減衰しきって無音になります。持続する音ではなく、弾いて減衰するだけの形です。)

アタック
8 ms
ディケイ
140 ms
サステイン
0.75
リリース
280 ms

17 種類の音作り方式 ​

上記のブロックは減算式の音作りを説明したものですが、音の作り方はそれだけではありません。libsonare 内蔵の楽器エンジンである NativeSynth は 17 種類のエンジンを備え、それぞれ異なる楽器に向いています。

エンジン音の作り方向いている用途
減算式/バーチャルアナログオシレーター → フィルター → アンプ(上記の古典的な連なり)リード、ベース、パッド
FM1 つのオシレーターが別のオシレーターのピッチを変調する金属的な音、ベル、エレクトリックピアノ、クラビ系の鍵盤音
Karplus-Strong短いフィードバックディレイのループで弦の振動を模す撥弦楽器、ギター、ベース、ハープ
モーダル同調した共鳴器のバンクで打たれた物体を模すマリンバ、グロッケンシュピール、打たれたバーやベル
加算式/ドローバー倍音のサイン成分を足し合わせる(オルガンのドローバーのように)トーンホイールオルガン、倍音パッド
膜鳴(膜)打楽器太鼓の膜の振動モードを模すドラム、タム、打楽器
拡張導波路ピアノ打弦されたピアノ弦の物理モデルアコースティックピアノ
パイプオルガン風圧とランク挙動を持つ持続型フルーパイプ導波路教会オルガンのストップ
擦弦摩擦励起の弦導波路ヴァイオリン、ヴィオラ、チェロ、コントラバス
リード木管リードと管体の導波路クラリネット、サックス、オーボエ、ファゴット
金管リップリード金管導波路トランペット、トロンボーン、チューバ、ホルン
フルートエアジェットが開管導波路を励起するフルート、リコーダー、パンフルート、笛
バジングブリッジ撥弦駒を弦に触れさせて、エネルギーを上側の倍音へ撒き散らせる撥弦。buzz が 0 なら終端はクリーンなまま(ハープ、箏)シタール、箏、ハープ
ソース・フィルター声声門音源(ブザー的なノコギリ波)を母音の フォルマント(母音の違いを生む共鳴のピーク)を再現した共鳴器バンクで整形する合唱・独唱の母音
フリーリード空気流に駆動され、スロット内で振動する金属の舌。数セント高い 2 枚目の舌を加えると、揺らめくミュゼットのうなりが生まれるアコーディオン、ハーモニカ、バンドネオン
ハープシコードジャック&プレクトラムの機構が、独立した弦のレジストレーションを弾く。2 組の 8′ ユニゾンと 1 組の 4′ オクターブは、ミックスつまみ付きの 1 本の弦ではなく 3 本の独立した弦ハープシコード
サンプル利用者が用意した PCM 音声を鍵盤上にマッピングして再生し、他のエンジンと同じフィルター・エンベロープ・モッドマトリクスを通す自前の録音、ワンショットのドラム

FM を一言で

FM(周波数変調)では、倍音豊かな波形をフィルターで削る代わりに、2 つの単純なサイン波オシレーターを使い、一方にもう一方のピッチを高速で揺らさせます。その結果、減算式では作りにくい、複雑で金属的・ベル的な音色が得られます。

FM:オペレーター、比率、インデックス、アルゴリズム ​

FM には独自の小さな語彙があり、fm エンジンのパラメータはそのすべてを使います。

  • オペレーターは、自分のエンベロープと出力レベルを持つ 1 つのサイン波オシレーターです。NativeSynth の fm エンジンは最大 4 つ(ops0〜ops3)を持ちます。
  • キャリアは耳に聞こえるオペレーターです。モジュレーターは直接は聞こえないオペレーターで、その出力がキャリアの位相を前後に揺らし、その動きが部分音を増やします。
  • 比率は、オペレーターの周波数をノートの何倍にするかです。キャリアとモジュレーターが整数比(1 : 1、1 : 2、1 : 3)なら、増えた部分音は倍音の位置に乗り、音高のはっきりした音になります。高めの整数比(たとえば e-piano プリセットがティンに使う 14 : 1)では高い倍音が足され、すぐに消えるので、叩いたティンの「ピン」という音になります。1 : 1.41 のような整数でない比率なら部分音が倍音の間に入り、ベルのような音になります。
  • モジュレーションインデックスは、モジュレーターがどれだけ強く揺らすかで、位相の振れ幅をラジアンで表します。モジュレーターでは、オペレーターの level がこのインデックスです。0 ならキャリアはただのサイン波で、インデックスが上がるほどエネルギーが多くの高い部分音へ広がり、音が明るくなります。モジュレーターはそれぞれ自分のエンベロープに従うので、明るさをノートの途中で下げられます。FM エレクトリックピアノの、明るいアタックと柔らかいテールはこれで作られます。
  • アルゴリズムは配線です。どのオペレーターがどれを変調し、どれがキャリアかを決めます。エンジンの algorithm フィールドで 6 種類(0〜5)から選びます。オペレーターは feedback で自分自身を変調することもでき、サイン波をノコギリ波に近づけます。

厳密には、NativeSynth はモジュレーターの出力をキャリアの周波数ではなく位相に足しています(位相変調、PM)。サイン波のオペレーター同士なら、2 つは同じ系統のスペクトルを生むので、PM も一般に FM と呼ばれます。インデックスがどう動いてもノートの音高がずれないため、実装では PM を使うのが普通です。

FM · RATIO × INDEXIDLE
FM — 比率とインデックスがサイドバンドを作る

fm エンジンで A3(220 Hz)を 1 音伸ばし、オペレーター 1 でオペレーター 0 を変調します。インデックス 0 ではスペクトルはサイン波の部分音 1 本だけです。インデックスを上げると、キャリア周波数からモジュレーター周波数の整数倍だけ上下した位置にサイドバンドが広がります。比率 1 : 1 でインデックス 3 にすると、最も強い部分音から 40 dB 以内に 7 本の部分音が立ちます。整数比ではすべての部分音が倍音のグリッドに乗り(琥珀色の点)、1 : 2 では奇数倍音だけが残ります。3.5 のような非整数比では部分音がグリッドの間に入り(ローズ色の点)、ベルのような音色になります。上段の帯は波形です。再生すると音を聞けます。

モジュレーター比率
1
モジュレーションインデックス
1.5 rad

このうち Karplus-Strong・モーダル・ピアノ・パイプオルガン・擦弦・リード・金管・フルート・バジングブリッジ撥弦・ソース・フィルター声・フリーリード・ハープシコードは物理モデリングです。波形を積むのではなく、振動する物体(弦、金属バー、管、リード、声道、エアジェット)のふるまいを近似します。現在の NativeSynth で録音に対して較正済みなのは、ピアノモデルだけです。完成済みの楽器シミュレーションではなく、データ不要のプレビュー/フォールバック音色として扱ってください。

サンプルエンジンだけは性格が異なり、音を生成しません。ホスト側がすでに持っている PCM フレームを受け取り、ノートオン時にノート番号とベロシティの範囲を解決して、減算式チェーンのオシレーターの位置に差し込みます。つまり、自前の音声が合成音とまったく同じ共鳴フィルターとモッドマトリクスの手前に届きます。SoundFont リーダーではありません。解析するファイル形式はなく、マッピングは自分で記述します。

フィルターのキャラクター ​

フィルター自体のキャラクターも変えられます。フィルターのスロープは、カットオフより上をどれだけ急に削るかを表し、ポール(共振段 1 つ)が 1 つ増えるごとにオクターブあたり 6 dB 急になります。2 ポールなら 1 オクターブで 12 dB、4 ポールなら 24 dB です。NativeSynth は 5 つのフィルターモデルを備え、それぞれレゾナンスとサチュレーションの性格が異なります。

  • svf:クリーンで柔軟なステートバリアブルフィルター(中庸な既定値)。
  • transistor-ladder:4 ポールのトランジスタラダー。太く温かい音で、レゾナンスを極端に上げると自己発振し、カットオフ周波数のサイン波として勝手に鳴り続けます。
  • diode-ladder:ダイオードで組んだラダー。よりざらついた、攻撃的な音です。
  • sallen-key:2 ポールの Sallen-Key 回路。なめらかで音楽的な、傾きの緩いフィルターです。
  • svf-4-pole:ステートバリアブルの段を 2 つ直列にした 4 ポールのローパス。飽和しないので、2 つのオシレーターを通しても相互変調が起きません。

パッチフィールドとエンジンパラメータ ​

NativeSynth の音はパッチで記述します。パッチには、設定の仕方が異なる 2 つの層があります。

パッチフィールドは最上位の操作子です。エンベロープ、フィルター、LFO、ドリフト、グライド、ボディ共鳴、ステレオの広がり、ゲイン、ポリフォニーなどがこれに当たります。どのエンジンの出力もこれらを通るので、ほとんどはどのエンジンでも同じ意味を持ちます。一部は 1 つのエンジン専用で、waveform・unison・detuneCents は減算式エンジンだけが、sample* のフィールドはサンプルエンジンだけが読み、ほかのエンジンは無視します。

エンジンパラメータは、選んだエンジン自身のモデルです。擦弦なら弓圧と弓の位置、FM ならオペレーターの比率とレベル、ピアノならハンマーと弦のデータ、パーカッションなら膜のモード比です。これらは持ち主のエンジンにしか存在しません。設定は engineParams という 1 つのフィールドで行い、フィールド名をキーにしたレコードで渡します({ bowForce: 0.6 }、{ 'ops0.level': 0.8 })。

どちらの層も厳密に検査されます。範囲外の値、有限でない値、整数フィールドへの小数、(エンジンパラメータでは)別のエンジンに属するキーは拒否され、エラーはフィールド名を示します(synth patch field 'ampSustain': out of range [0, 1]、engine param 'bowForce': out of range [0, 1]、engine param 'algorithm': not a field of the bowed_string engine)。黙って補正された値は頼んでいない音になってしまうので、補正はされません。2 つの層の違いは性質にあります。パッチフィールドはどのエンジンも通る大まかな操作子で、エンジンパラメータは 1 つのモデルの物理量です。

どちらの層もベースから始まり、指定したものだけが変わります。省略したパッチフィールドは名前付きプリセットの値を保ちます。省略したエンジンパラメータは、そのプリセットのエンジンセクションを保ちます。名前付きプリセットが別のエンジンを使っている場合は、そのエンジン自身のベースプリセットの値になります。engineMode を選ぶとほかのエンジンのセクションはすべて空になるので、エンジンパラメータが効くのは鳴っているエンジンだけです。

libsonare での実装

NativeSynth は SynthPatch で設定します。engineMode フィールドが 17 種類のエンジンのいずれか('subtractive'・'fm'・'karplus-strong'・'modal'・'additive'・'percussion'・'piano'・'pipe-organ'・'bowed-string'・'reed'・'brass'・'flute'・'plucked-string'・'vocal'・'free-reed'・'harpsichord'・'sample')を選び、waveform がオシレーター波形('sine'・'saw'・'square'・'triangle'・'noise')を、filterModel がフィルターのキャラクター('svf'・'transistor-ladder'・'diode-ladder'・'sallen-key'・'svf-4-pole')を cutoffHz・resonanceQ とともに選びます。パッチを手で組む代わりに、synthPresetNames() で用意済みのカタログを一覧し、synthPresetPatch(name) で 1 つ読み込めます。内蔵プリセットはすべてこの 17 エンジンに基づいており、各プリセットは実体としては上記いずれかの方式にパラメータを埋めたものです。データを利用者側から渡す必要があるのは 'sample' エンジンだけで、PCM は自分で構築してバインドする SampleBank から読み出されます。バンクを持たない 'sample' パッチは無音をレンダリングします。各方式固有の深いデータ(FM のオペレーター構成、モーダルのモード表、ドローバーのレジストレーション、キットの各ピース、ピアノの弦、パイプランク、ボウイング摩擦、リード/金管の管体、フルートのジェット形状)は、名前付きプリセットそれぞれが持つエンジンセクションで、engineParams でキーごとに上書きできます。synthPatchParamInfo() は数値のパッチフィールドすべてを範囲、単位、初期パッチの既定値とともに返し、synthEngineParamInfo(engineMode) はエンジンのパラメータをそのエンジンのベースプリセットの値とともに返します。数は 'fm' が 50、'bowed-string' が 30、'piano' が 14、'percussion' が 93、'subtractive' が 13 で、セクションを持たない 'default' と 'sample' は 0 です。synthPresetPatch(name) はプリセットのパッチフィールドを返しますが、エンジンセクションは返しません。

関連: 内蔵シンセサイザー(NativeSynth)、エンベロープとモジュレーション、オーディオの基礎、SoundFont とサンプル音源