🎹 ピアノ音の再現式(加算合成+エンベロープ付き)
✅ 基本構造(加算合成)
ピアノの音は、基音と多数の倍音の重ね合わせです:
x(t) = Σ A_n * sin(2π * n * f₀ * t + φ_n)
- f₀: 基音(例:A4=440Hz)
- A_n: 第n倍音の振幅(通常A₁ > A₂ > A₃…と減衰)
- φ_n: 各倍音の位相(ランダム or 0)
- n: 倍音番号(1〜20程度)
✅ 時間変化(エンベロープ)
ピアノの音は「立ち上がりが鋭く」「減衰が自然」です。これをエンベロープ関数 E(t) で表します:
E(t) = A * exp(-α * t)
- A: 最大音量(通常1.0)
- α: 減衰係数(鍵盤の強さによって変わる)
したがって、実際の音は以下のように表せます:
y(t) = E(t) * Σ A_n * sin(2π * n * f₀ * t + φ_n)
✅ 例:A4(ラ、440Hz)ピアノ音の近似(5倍音まで)
y(t) = e^(-αt) * [1.0 * sin(2π * 440 * t)
+ 0.5 * sin(2π * 880 * t)
+ 0.3 * sin(2π * 1320 * t)
+ 0.2 * sin(2π * 1760 * t)
+ 0.1 * sin(2π * 2200 * t)]
- α ≈ 3〜5 程度(秒⁻¹)で減衰速度調整
✅ ピアノらしさの追加要素(上級)
| 要素 | 技術的補足 |
|---|---|
| 打鍵ノイズ | 立ち上がり時にノイズ(ホワイトノイズ)を少量加算 |
| 弦の共鳴 | 他弦の共鳴を追加: + β * sin(2π * f_res * t)
|
| ハンマー非線形性 | 倍音ごとに微妙な位相・音量ゆらぎを入れる |
| サンプリング再生 | 実音を録音し、ピッチ変換で再現(WAVテーブル) |
🔉 Pythonや音響合成ソフトとの接続例
- Python + NumPy:上記の式をループで合成可能(Waveファイル生成も可)
- PureData / MaxMSP:エンベロープ×加算合成パッチで再現可
- Audacity:「生成→トーン→カスタム倍音」で手入力も可能