第1章 音響学:各節ごとの代表的な式一覧
1.1 純音(Sine Wave)
y(t) = A × sin(2πft)
-
A
:振幅(Amplitude)→ 音の大きさ -
f
:周波数(Frequency)→ 音の高さ -
t
:時間(Time)
➡ 単一周波数の正弦波。純粋な音色(例:音叉)
1.2 複合音(Complex Tone)
y(t) = ∑ Aₙ × sin(2πfₙt + φₙ)
-
Aₙ
:各成分の振幅 -
fₙ
:各成分の周波数(基本波 + 倍音) -
φₙ
:初期位相
➡ 複数の周波数成分の合成。音色の違いに影響
1.3 音の三要素(Three Elements of Sound)
-
音の高さ(Pitch):周波数
f
(Hz) -
音の大きさ(Loudness):振幅
A
、または音圧レベルL
- 音色(Timbre):波形の形=倍音構成=フーリエ成分
➡ 正式な式ではなく、各要素を物理的に分けて理解
🎵 音の三要素の数式定義
① 音の高さ(Pitch)
音の高さは周波数 $f$ [Hz] により定義されます:
y(t) = A * sin(2πft + φ)
- $f$:周波数 [Hz]
- $t$:時間 [s]
- $A$:振幅(音の大きさに関与)
- $φ$:初期位相
高い音 ⇒ 周波数 $f$ が大きい
低い音 ⇒ 周波数 $f$ が小さい
② 音の大きさ(Loudness)
音の大きさは振幅 $A$ または**音圧レベル(デシベル)**で表されます:
L = 20 * log₁₀(p / p₀)
- $L$:音圧レベル [dB]
- $p$:音の実効音圧 [Pa]
- $p₀$:基準音圧(通常 $20 \mu Pa$)
③ 音色(Timbre)
音色は**波形の形・倍音構成(フーリエ級数)**で定義されます:
y(t) = a₁ * sin(2πf t) + a₂ * sin(2π(2f)t) + a₃ * sin(2π(3f)t) + ...
- $aₙ$:n次倍音の振幅
- $f$:基本周波数
- 各倍音の構成が異なると、同じ高さ・大きさでも異なる音色に聞こえる
1.4 音の大きさ(Sound Level)
L = 20 × log₁₀(p / p₀) [dB]
-
L
:音圧レベル(デシベル) -
p
:実際の音圧 -
p₀
:基準音圧(通常は 2×10⁻⁵ Pa)
➡ 音の大きさは対数的に知覚される
1.5 音の高さ(Pitch and MIDI)
f = 440 × 2^((n - 69) / 12)
-
f
:周波数(Hz) -
n
:MIDIノート番号(A4 = 69)
➡ 音階・MIDIとの関係を示す式。12平均律に基づく
1.6 音色(Timbre = 周波数スペクトル)
X(f) = ∫ x(t) × e^(–j2πft) dt
-
X(f)
:周波数成分(フーリエ変換) -
x(t)
:時間領域の音 -
f
:周波数
➡ 音色は波形の周波数構造=倍音構成で決まる
第2章 サウンドプログラミング:数式と理論一覧
2.1 サンプリング(Sampling)
ナイキストの定理(Nyquist Theorem)
f_s ≥ 2 × f_max
-
f_s
:サンプリング周波数(Hz) -
f_max
:記録したい音の最大周波数(Hz)
➡ この条件を満たさないと**エイリアシング(折り返し)**が発生する
2.2 標本化(Discretization)
連続波形 x(t) を標本化して x[n] に:
x[n] = x(nT)
-
T = 1 / f_s
:サンプリング周期 -
x[n]
:離散信号(nサンプル目)
➡ 時間を等間隔に分けて記録する操作
2.3 量子化(Quantization)
連続値を有限ビットで表す操作:
Q(x) = Δ × round(x / Δ)
-
Δ
:量子化ステップ幅(例:16bitなら Δ ≈ 最大振幅 / 65536) -
Q(x)
:量子化された信号値
➡ 記録には誤差(量子化誤差)が生じる
2.4 WAVEファイル(PCMフォーマット構造)
WAVEファイルの典型的な構造:
[RIFFヘッダ] → [fmtチャンク] → [dataチャンク]
- データ部はPCM(Pulse Code Modulation):
x[n] ∈ {−32768, ..., +32767}(16bit PCM の場合)
➡ サンプリング・量子化された整数列が格納される
2.5 サウンドプログラミング(Digital Sound Synthesis)
例:サイン波合成(Python等で使用)
x[n] = A × sin(2πf n / f_s)
-
n
:サンプル番号 -
f_s
:サンプリング周波数 -
f
:再生したい周波数 -
A
:振幅
➡ 離散時間での波形生成が可能になる
第3章 コンピュータミュージック
3.1 五線譜(Staff Notation)
五線譜の音高とMIDI番号の対応式:
f = 440 × 2^((n - 69)/12)
-
n
:MIDIノート番号(A4 = 69) -
f
:音の周波数(Hz)
➡ 楽譜の高さ=周波数は指数関数的な関係
3.2 音階(Scale)
12平均律(Equal Temperament)における音階:
f_n = f₀ × 2^(n/12)
-
f₀
:基準音(例:C4) -
n
:半音数(相対的な位置)
➡ 隣接する音の比は 2^(1/12)
≈ 1.0595
3.3 音符(Note Duration)
音符の長さ(拍数に対する時間):
t = (4 / d) × (60 / bpm)
-
d
:音符の分母(例:4分音符→4、8分音符→8) -
bpm
:テンポ(拍数/分)
➡ 音符ごとの**演奏時間(秒)**が求まる
3.4 強弱(Dynamics)
MIDIベロシティの範囲:
Velocity ∈ [1, 127]
-
1
:極めて弱い -
127
:最大強度
➡ 実際には0(ノートオフ)を含む128段階の音量制御
3.5 拍子(Time Signature)
1小節の拍数と単位音符:
[分子]:1小節に含まれる拍数
[分母]:1拍あたりの音価(例:4=4分音符、8=8分音符)
➡ 例:4/4
は「4拍/1小節、1拍=4分音符」
3.6 テンポ(Tempo)
1拍の長さ(秒)を求める式:
1拍の長さ = 60 / bpm
-
bpm
:テンポ(beats per minute)
➡ MIDIタイミング制御やループ生成に使われる
3.7 音楽の三要素(要素間の非数式的関係)
- リズム(時間構造)→ 拍子・テンポ
- メロディ(音高の連なり)→ 音階・旋律
- ハーモニー(和音)→ 音程関係・和声進行
➡ 数式ではなく、時間軸・周波数軸の構造的捉え方
3.8 コンピュータミュージック
MIDIイベント(ノート情報)構造:
Event = [tick, note_on/off, note_number, velocity]
-
tick
:時間位置(単位:クロック) -
note_number
:音高 -
velocity
:強さ
➡ イベント列が曲を構成する
3.9 自動演奏(Algorithmic Playback)
時間制御:
実時間 = tick × (tempo / resolution)
-
tempo
:μs/四分音符 -
resolution
:PPQN(Pulse Per Quarter Note)
➡ MIDI演奏における再生タイミング計算に使用
第4章 MIDI
「第4章 MIDI」に対応する各項目の代表的な式・構造・概念モデルを示します。MIDI信号の仕組み、数値構造、タイミング制御に関する内容を中心に、音楽プログラミングやDTMへの応用にも活用できるよう設計されています。
4.1 MIDI(基本構造)
MIDIメッセージ基本フォーマット(3バイト構造):
[ステータスバイト] [データバイト1] [データバイト2]
例(ノートオン):
[1001nnnn] [0kkkkkkk] [0vvvvvvv]
-
nnnn
:チャンネル(0〜15) -
kkkkkkk
:ノート番号(0〜127) -
vvvvvvv
:ベロシティ(0〜127)
4.2 ノートオンとノートオフ
ノートオンとオフの時系列制御:
Note On: [0x90 + ch] [note_num] [velocity]
Note Off: [0x80 + ch] [note_num] [0]
-
ch
:チャンネル番号 -
note_num
:MIDIノート番号 -
velocity
:0~127(0 = ノートオフとしても解釈可能)
4.3 ノートナンバー(音高と周波数)
f = 440 × 2^((n - 69)/12)
-
n
:MIDIノート番号(A4 = 69) -
f
:周波数(Hz)
➡ MIDIノートと音の周波数の指数関数的対応
4.4 ベロシティ(音の強さ)
velocity ∈ [1, 127]
-
0
:ノートオフ(または無音) -
1〜127
:弱〜強
➡ 演奏の強弱、発音のアタック、フィルタ開度などに利用
4.5 プログラムチェンジ(音色切り替え)
構文:
[0xC0 + ch] [program_number]
-
program_number
∈ [0, 127](GM音源の128種類)
例:0 = Acoustic Grand Piano
, 25 = Nylon Guitar
4.6 プログラムナンバー(GM音色一覧)
例:
プログラムナンバー | 音色名 |
---|---|
0 | Grand Piano |
24 | Nylon Guitar |
40 | Violin |
73 | Flute |
➡ GM(General MIDI)音源の標準番号規格に準拠
4.7 パーカッションマップ(チャンネル10専用)
例(MIDIノート番号 → 打楽器):
ノート番号 | 打楽器 |
---|---|
35 | Acoustic Bass Drum |
38 | Acoustic Snare |
42 | Closed Hi-Hat |
46 | Open Hi-Hat |
49 | Crash Cymbal |
➡ チャンネル10は打楽器専用としてマッピングされる
4.8 MIDIファイル(SMF: Standard MIDI File)
基本構造:
[MThd] → ヘッダチャンク
[MTrk] → トラックチャンク(イベント列)
イベント例:
[デルタタイム] [ステータス] [データ1] [データ2]
➡ 時系列でノートイベントを記録するシーケンス構造
4.9 DTM(デスクトップミュージック)
MIDI + 音源 + DAW = DTM環境
➡ 明確な式ではなく、「MIDI信号の流れ+再生エンジン」という構成モデル
4.10 自動演奏(再生タイミングの計算)
タイミング式(MIDIクロック):
実時間 = tick × (tempo / resolution)
-
tick
:イベントのデルタタイム -
tempo
:1拍の長さ(μ秒/四分音符) -
resolution
:分解能(PPQN)
➡ 精密な自動演奏にはこの式で「秒数換算」が必要
第5章 ディジタル信号処理
5.1 周波数分析(Fourier Analysis)
連続時間フーリエ変換(CTFT):
X(f) = ∫ x(t) × e^(–j2πft) dt
離散時間フーリエ変換(DTFT):
X(ω) = ∑ x[n] × e^(–jωn)
➡ 音信号の周波数成分(=倍音、音色)を求める
5.2 スペクトログラム(Spectrogram)
時間ごとの短時間フーリエ変換(STFT):
STFT{x[n]} = ∑ x[m] × w[n–m] × e^(–j2πkn/N)
-
w[n]
:窓関数(ハミング、ハン等) -
N
:FFT点数 -
k
:周波数ビン番号
➡ 時間 vs 周波数の2次元可視化(Pythonでlibrosaなどが使用可能)
5.3 楽器音の周波数分析
周期波形のフーリエ級数展開:
x(t) = ∑ Aₙ × sin(2πnf₀t + φₙ)
-
f₀
:基本周波数 -
n
:倍音番号 -
Aₙ
:振幅 -
φₙ
:位相
➡ 倍音構造を解析することで、音色(楽器の違い)を理解できる
5.4 フィルタ(Filter)
離散時間フィルタの一般式(差分方程式):
y[n] = ∑ (b_k × x[n–k]) – ∑ (a_k × y[n–k])
-
b_k
:インパルス応答(フィルタ係数) -
a_k
:フィードバック係数(IIR型の場合) -
x[n]
:入力信号 -
y[n]
:出力信号
FIR(有限インパルス応答)フィルタの例:
y[n] = (1/3) × (x[n] + x[n–1] + x[n–2])
➡ 簡易ローパス(移動平均)としてノイズ除去や音質調整に使える
第6章 シンセサイザ:数式とモデル一覧
6.1 音響合成のアプローチ(Synthesis Overview)
合成の基本分類:
- 加算合成(Additive):波を「足す」
- 減算合成(Subtractive):波から「引く/削る」
- FM合成(Frequency Modulation):周波数を変調する
- 物理モデル合成:現象の物理法則を模倣する(例:弦、管)
① 加算合成(Additive Synthesis)
複数の正弦波を重ね合わせて音を作る手法:
y(t) = a₁ * sin(2πf₁t) + a₂ * sin(2πf₂t) + ... + aₙ * sin(2πfₙt)
- $a_i$:各成分の振幅
- $f_i$:各成分の周波数
- 倍音列(基本周波数とその整数倍)を足すことで音色を作る
② 減算合成(Subtractive Synthesis)
倍音を多く含む波形(ノコギリ波、矩形波など)を出発点にして、フィルターで削る:
y(t) = Filter[RichWave(t)]
例:ノコギリ波(Sawtooth)
RichWave(t) = ∑_{n=1}^N (1/n) * sin(2πnft)
ローパスフィルタ(例:一次RCフィルタ)
H(ω) = 1 / sqrt(1 + (ωRC)^2)
③ FM合成(Frequency Modulation)
キャリア波の周波数を変調波で揺らす:
y(t) = A * sin(2πf_ct + I * sin(2πf_mt))
- $f_c$:キャリア周波数
- $f_m$:変調周波数
- $I$:変調指数(モジュレーションの深さ)
④ 物理モデル合成(Physical Modeling)
例:カープラス・ストロング法(Karplus-Strong)
y[n] = 0.5 * (y[n - N] + y[n - (N + 1)])
- $N$:ディレイ長(弦の長さに相当)
- 初期波形にランダムノイズを使うことで、撥弦楽器の音を模倣できる
6.2 アナログシンセサイザ(Analog Synth)
基本波形(理想オシレータ):
- 正弦波:
y(t) = A × sin(2πft)
- 鋸波(ノコギリ波):周期的直線増加→折返し
- 矩形波(Square):
sgn(sin(2πft))
- 三角波(Triangle):絶対値波形を階段状に加工
➡ アナログ合成は電圧変調でこれらを操作
6.3 オシレータ(Oscillator)
離散時間での波形生成:
x[n] = A × sin(2πfn / f_s)
-
f_s
:サンプリング周波数 -
f
:発音周波数 -
n
:サンプル番号
➡ PythonやDAWで波形を直接合成可能
6.4 時間エンベロープ(Envelope)
ADSR(Attack, Decay, Sustain, Release)モデル:
E(t) = piecewise envelope of amplitude over time
- Attack:立ち上がり
- Decay:一時減衰
- Sustain:一定音量
- Release:放出
➡ 音の時間的な強度変化(実在楽器の特徴)
6.5 加算合成(Additive Synthesis)
複数の正弦波を足し合わせる:
y(t) = ∑ Aₙ × sin(2πfₙt + φₙ)
- 各
fₙ
:倍音(n × 基本周波数) -
Aₙ
:強さ、φₙ
:位相
➡ 音色を「倍音構成」として自由に設計可能
6.6 減算合成(Subtractive Synthesis)
豊かな波形(鋸波など)から周波数成分を削る:
y(t) = Filter(x(t))
-
x(t)
:元の波形(倍音を多く含む) -
Filter
:ローパス、バンドパスなど
➡ 音色を「ろ過」することで変える
6.7 FM合成(Frequency Modulation)
周波数を別の波で変調する:
y(t) = A × sin(2πf_ct + I × sin(2πf_mt))
-
f_c
:キャリア周波数(基本音) -
f_m
:モジュレーター(変調周波数) -
I
:変調指数(倍音の豊かさ)
➡ 鉄琴・ベル・金属的音色に最適(YAMAHA DX7等)
6.8 カープラス・ストロング合成(Karplus-Strong)
物理モデル的な離散時間シンセ:
y[n] = 0.5 × (x[n] + x[n–1])
- 初期波形
x[n]
:ノイズ or パルス列 - フィードバックして減衰と周期を形成
➡ 弦のような音響特性を簡単に模倣可能(ギター風)
6.9 音のリアリティ(Sound Realism)
複合モデル:
y(t) = Envelope(t) × [Additive + Filtered + FM + Reverb]
➡ 合成方式を組み合わせ、空間性(残響)・時間変化(エンベロープ)を加えることでリアリティを追求
第7章 エフェクタ:数式とモデル一覧
7.1 リバーブ(Reverb = 残響)
インパルス応答による畳み込み:
y[n] = ∑ h[k] × x[n - k]
-
x[n]
:入力信号 -
h[k]
:インパルス応答(IR) -
y[n]
:出力信号(残響付き)
➡ 実際の空間で録音されたIRを使うとリアルな残響になる(Convolution Reverb)
7.2 ディストーション(Distortion = 歪み)
非線形波形クリッピング:
y[n] = tanh(G × x[n])
-
G
:ゲイン(増幅率) -
tanh
:非線形関数(クリッピング代用)
➡ アナログアンプの飽和・真空管の歪みを模倣(sign(x)
や clip(x, –1, 1)
でも近似)
7.3 コンプレッサ(Compressor)
動的レンジ制御:
y[n] = x[n] × G(t)
ゲイン関数(例:ソフトニー)
G(dB) =
{ 1 (入力 < 閾値)
{ (1 / R) × (x – T) (入力 ≥ 閾値)
-
T
:スレッショルド(しきい値) -
R
:レシオ(圧縮比)
➡ 音量が一定値を超えると自動で抑える(例:声の飛び出し防止)
7.4 イコライザ(EQ)
周波数帯域ごとのゲイン調整(IIRフィルタ):
y[n] = ∑ b_k x[n–k] – ∑ a_k y[n–k]
- ローパス、ハイパス、バンドパスなどのフィルタ係数を設計
➡ 指定した周波数成分を強調・抑制できる(3バンドEQ、パラメトリックEQなど)
7.5 モジュレーション(Modulation Effects)
① トレモロ(音量変調)
y[n] = (1 + m × sin(2πf_m n / f_s)) × x[n]
-
m
:変調深度(0〜1) -
f_m
:変調周波数
② ビブラート(周波数変調)
y[n] = sin(2πf n / f_s + d × sin(2πf_m n / f_s))
-
d
:周波数変調の深さ(ディチューン幅)
➡ コーラス、フランジャーなどの基礎となる
7.6 デチューン(Detune)
わずかに異なる周波数の波を重ねる:
y(t) = sin(2πf₁t) + sin(2πf₂t)
-
f₁ ≈ f₂
(微小な差)
➡ うなり(ビート)を生み、音を太く・広がりのあるものにする
🎛 第8章 ミキシング(Mixing):式・モデル一覧
8.1 モノラル再生とステレオ再生
モノラル信号(1ch):
y[n] = x[n]
ステレオ信号(2ch):
L[n], R[n] = x[n] × (1 ± p)
-
p
:パン(定位)パラメータ(例:–1〜+1)
➡ ステレオ定位はパンニング制御で表現される
8.2 音像定位(Panning)
等電力パンニング(Equal-power panning):
L = cos(θ), R = sin(θ)
-
θ ∈ [0, π/2]
:パン角(定位の左右)
➡ 左右の出力エネルギーを均等に保ちながら定位調整する
8.3 ミキシング(重ね合わせ)
多トラック音の加算:
y[n] = x₁[n] + x₂[n] + ... + xₖ[n]
➡ 各チャンネルは音量調整(ゲイン)してから合成される
8.4 音楽制作(マスタリング前の調整)
- 正確な式よりもパン+フェーダー+エフェクト処理の連携
- マスタリング:ピーク制限、コンプ、EQ補正(→前章参照)
8.5 ボーカルキャンセル(センターキャンセル)
LとRの差分:
y[n] = L[n] – R[n]
➡ 中央定位(= 同位相)の成分がキャンセルされ、ボーカル除去が可能
🥁 第9章 打楽器の音をつくる:合成モデル・式一覧
9.1〜9.2 グロッケン・トライアングルなど
金属系打楽器のモード合成:
y(t) = ∑ Aₖ × sin(2πfₖt) × e^(–αₖt)
-
fₖ
:非整数倍の共振周波数(非調和) -
αₖ
:減衰率(音の消え方)
➡ グロッケン、トライアングル、チューブラーベルに使用
9.4〜9.6 マリンバ、シロフォン、ティンパニ
木・膜系:準整数倍の振動
fₖ ≈ k² × f₁(k = 1, 3, 5...)
➡ 板の形状による特定のモード合成が使われる
9.7 シンバル(非周期音)
ノイズベース+ランダム共振:
y(t) = noise(t) × ∑ sin(2πfₖt) × e^(–αₖt)
➡ 離散モードではなく連続スペクトルに近い
9.9〜9.12 バスドラム・タム・スネア等
Karplus-Strong法/鼓膜モデル:
y[n] = (x[n] + x[n–1]) / 2
または:
y[n] = comb-filter(x[n]) × ADSR
➡ 打面の反射・ノイズ・共鳴体の混合
第10章