##Karplus-Strong string synthesisとは
擦弦楽器(ヴァイオリンやギター)の物理モデルの合成方法。電子音から生楽器のような音が出せる、物理モデルの基本的なもの。
##弦楽器が音高を持つ仕組み
弦楽器は、駒と駒に乗っていて、空中に浮いている部分を、指で弾くなり、弓で擦るなりで音を鳴らす。
音の高さは駒と駒の距離の長さか、弦が引っ張られる強さで決まる。
ではどのように音が鳴るのか?
何らかの方法で演奏すると、弦に垂直の力がかかる。それに対して、引っ張る力が弦を元の位置に戻そうとする。戻ろうとするが行き過ぎて、また引っ張られる力で戻され、弦が震える。
弦に伝わった振動は、駒まで伝わり跳ね返って反対の駒に伝わり、また跳ね返る。それが繰り返されることで弦楽器の音色ができる。
これらを音響合成用に簡略したのがこの図。弾き始めのノイズを鳴らして、振動の移動で音の繰り返しを表したディレイ、ノイズのままでは高音域がうるさいのでローパスフィルターを入れておく。それがフィードバックしていく。
##Maxで作る
###ノイズ発生器
[adsr~]を使って、Bangを打てば短いノイズを鳴らすものを作る。[adsr~]のアーギュメントはそれぞれAttack 5ms、Decay 10ms、Sustain 0、release 5msにしている。Sustain以外はこれくらいの長さなら好きにアレンジしてください。
###ショートディレイ(ローパス付き)
出てきたノイズは[tapin~]に繋いで[tapout~]で出力。そのあと[onepole~ 5000]がローパスフィルターとなって、5,000Hz以上の周波数をカットしてくれる。最後にその信号を[*~ 0.99]で音量を下げて、[tapin~]に繋げれば、フィードバックの長いショートディレイとなる。
###ひとまず完成
あとはノイズと[onepole~]から出てきた信号をdacに繋げば完成。
###音高を付ける
現在[tapout~]に10の数値が入っている。これは、10ms遅らせて信号を出している。ここの数値を周期にしてあげれば、音高が生まれる。
[kslider]に[mtof]を繋いで周波数を出します。周波数とは1秒間に何回振動しているかなので、周波数を1秒(1,000ミリ秒)で割ってあげると1周あたりの周期が出てくる。この例だと440Hzは2.273...msになる。
###完成
出てきた周期を[tapout~]に繋ぎ、[mtof]をノイズ発生用のBangに繋げば、キーボードの音程に対応した音高で物理モデルが演奏できる。