LoginSignup
7
5

More than 5 years have passed since last update.

Karplus-Strong String Synthesis

Last updated at Posted at 2015-09-20

Karplus-Strong string synthesisとは

 擦弦楽器(ヴァイオリンやギター)の物理モデルの合成方法。電子音から生楽器のような音が出せる、物理モデルの基本的なもの。

弦楽器が音高を持つ仕組み

1.jpg
 弦楽器は、駒と駒に乗っていて、空中に浮いている部分を、指で弾くなり、弓で擦るなりで音を鳴らす。
2.jpg
 音の高さは駒と駒の距離の長さか、弦が引っ張られる強さで決まる。
 ではどのように音が鳴るのか?
3.jpg
 何らかの方法で演奏すると、弦に垂直の力がかかる。それに対して、引っ張る力が弦を元の位置に戻そうとする。戻ろうとするが行き過ぎて、また引っ張られる力で戻され、弦が震える。
4.jpg
 弦に伝わった振動は、駒まで伝わり跳ね返って反対の駒に伝わり、また跳ね返る。それが繰り返されることで弦楽器の音色ができる。
5.jpg
 これらを音響合成用に簡略したのがこの図。弾き始めのノイズを鳴らして、振動の移動で音の繰り返しを表したディレイ、ノイズのままでは高音域がうるさいのでローパスフィルターを入れておく。それがフィードバックしていく。

Maxで作る

ノイズ発生器

スクリーンショット 2015-09-21 4.35.23.png
 [adsr~]を使って、Bangを打てば短いノイズを鳴らすものを作る。[adsr~]のアーギュメントはそれぞれAttack 5ms、Decay 10ms、Sustain 0、release 5msにしている。Sustain以外はこれくらいの長さなら好きにアレンジしてください。

ショートディレイ(ローパス付き)

スクリーンショット 2015-09-21 4.39.28.png
 出てきたノイズは[tapin~]に繋いで[tapout~]で出力。そのあと[onepole~ 5000]がローパスフィルターとなって、5,000Hz以上の周波数をカットしてくれる。最後にその信号を[*~ 0.99]で音量を下げて、[tapin~]に繋げれば、フィードバックの長いショートディレイとなる。

ひとまず完成

スクリーンショット 2015-09-21 4.44.35.png
 あとはノイズと[onepole~]から出てきた信号をdacに繋げば完成。

音高を付ける

 現在[tapout~]に10の数値が入っている。これは、10ms遅らせて信号を出している。ここの数値を周期にしてあげれば、音高が生まれる。
スクリーンショット 2015-09-21 4.50.11.png
 [kslider]に[mtof]を繋いで周波数を出します。周波数とは1秒間に何回振動しているかなので、周波数を1秒(1,000ミリ秒)で割ってあげると1周あたりの周期が出てくる。この例だと440Hzは2.273...msになる。

完成

スクリーンショット 2015-09-21 4.54.36.png
 出てきた周期を[tapout~]に繋ぎ、[mtof]をノイズ発生用のBangに繋げば、キーボードの音程に対応した音高で物理モデルが演奏できる。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5