2017年7月3日月曜日

Karplus-Strong合成 初歩的なギター音の物理シミュレーション

シンセサイザの合成方式に,物理モデル音源という方式があるのをご存知でしょうか?(というより,シンセサイザの合成方式,いくつ挙げることができますか?)

名前から想像がつくと思いますが,手本にする音源(楽器である場合がほとんど)の発音原理を物理的にシミュレーションする方式です.この方式を初めてシンセサイザとして実装したのがヤマハです.



論理的に考えれば,この方式によってかなりリアルな音が得られそうな気がしますが,実際言うほどリアルな音は得られず(業界では分析が足りなかったと言われています),その後同社が物理モデル音源を前面に推した商品を出すことは無くなりました.しかし,エレクトーン等で管楽器の息遣いも含んだ質感のサウンドを演出したりするために使われるなど,物理モデル音源は今や電子楽器ではあって当たり前の技術となりました.

Rolandが数年前発表したV-Pianoは,ピアノの弦の振動からハンマー反響板に至るまで全ての要素をシミュレーションするだけでなく,パラメータ調整によって様々な物理的状態のピアノを作り出すことができます.


こうした物理モデル音源の名器達は,人間の優れた英知とそれを実装するに足る半導体の進歩によって可能になったものです.こうした物理的な分析に基づく音源合成は,1983年に発表されたKarplus-Strong合成が最初です.この合成法は,考案者の名前が元になっていて,KarplusさんとStrongさんによって考案されたことがわかります.Strongさんは何やら強そうです.

Karplus-Strong合成は,撥弦のシミュレーションです.「撥弦」とは,弦をはじく演奏法の事です.恐らく,この演奏法を使う最も知名度のある楽器はギターで,Karplus-Strong合成自体,撥弦の中でも「エレクトリック・ギター」のシミュレーションと紹介されることもあります.物理的にシミュレーションするというと,非常に難しそうな印象を受けますが,Karplus-Strong合成は,非常に簡単に作ることができます.まず,弦の振動について考えてみます.

皆さん既にご存知のように,音というのは振動現象です.音源の振動が波として空気を伝わって(例えば)耳まで届いて私たちは音を聞く訳です.波が伝わっていくもののことを「媒質」と言います.今の音の説明の場合,空気が媒質となっている訳です.ところで,この音の正体たる振動を伝える媒質は,空気に限らないことが知られています.例えば水や木の板等,振動を伝える媒質は空気以外にもたくさんあります.例えば,こういうものも媒質になります.

これ,学校にありませんでしたか?ウェーブマシーンと呼ばれる実験装置です.魚の骨のように,たくさんの棒が一本の軸で繋がっていて,棒の間を波が伝わっていきます.ここで重要なのは,「繋がっている」ということです.物凄く雑に言ってしまえば,それが何であれ,繋がっていれば,よほど凝集されていない限り,振動を伝える媒質として機能します.ですから,こんな風に「繋がった」物も波を伝える媒質になる訳です.


もう何が言いたいか分かりますね.私たちは弦の振動について考えるとき,大雑把に「弦が振動する」と考えてしまうかもしれません.でも,弦をはじく時のことを考えてみると,弦を指やピックで弾くとき,はじかれているのは,弦全体の局所的な部分です.そのときの振動が,弦という媒質を伝わって,やがて弦全体が振動するようになるのです.

この時,具体的にどのような現象が起きるのかを知るために,弦の振動をシミュレーションで図示してみましょう.

媒質を伝わる波の様子は,波動方程式


\[\frac{\partial^2u}{{\partial}t^2}=c^2\frac{\partial^2u}{{\partial}x^2}\]

で表現できます.この方程式をFDTD法で計算します.

尚,このシミュレーションは,神戸市立工業高等専門学校長谷芳樹准教授がwebで研究成果の一部を公開している

FDTD Simulation Movie & Demo

を参考にしました.上記ページで紹介されているのは2次元以上の波動方程式ですが,媒質の違いによって速度が変化する様子等が分かりやすく実装されているので非常に勉強になります.私のような現代のゆとり世代にも馴染みやすいツールで実装されているのも非常にありがたいです.

とりあえずやってみます.尚,上記の式では,減衰が考慮されていません.弦に限ったことではありませんが,現実的な環境で物が振動する時,何かが(地球上では大抵空気)抵抗となって,振動が時間の経過とともに減衰していきます.今回のシミュレーションでは,無理やり減衰をつけました.厳密な物理的解析に基づく結果ではありませんが,何が起きているか視覚的に伝われば幸いです.


何やら弦が振動してるっぽい動きをしてますね.初期状態(シミュレーション開始時点で弦がどういう形をしていたか)によって振動の仕方が様々に変化します.



ただ,これではよく分からないので,初期状態での変位(波の盛り上がり)をもう少し局所的にしてみます.

お分かりいただけますでしょうか?中央付近で発生した波が弦の左右へ伝わっていきます.山が両端まで到達したら,進行方向を逆にして跳ね返ってきます.跳ね返った波はいずれ再び中央付近へ戻ることになります.そして中央付近へ戻ったらまた両端まで伝わっていく・・・これを何度も繰り返しているのが弦の振動です.これを弦全体ではなく中央付近のみに注目して考えると,同じ波が両端の反射によって何度も到達することになります.この,同じ波が何度も到達する様子をシミュレーションしたのが,Karplus-Strong合成です.

MaxでKarplus-Strong合成をやってみましょう.

まず,撥弦を作ります.撥弦という動作は,弦にほんの一瞬だけ力学的刺激を与える行為だと考えることができます.ですから,パルスでこそないものの,パルスのような短い時間で変化する信号が適しています.


3 msだけ持続するホワイトノイズを撥弦とします.この時点でButtonをクリックすると,そのままですが,非常に時間の短いノイズが聞こえると思います.

次に撥弦によって弦に与えた刺激が,両端の跳ね返りによって何度も到達する様子をシミュレーションします.これは,ディレイを使います.

Maxのディレイのためのオブジェクトtapin~とtapout~は,tapin~のアーギュメントによって,ディレイの最大時間(ディレイのために確保するメモリ容量)を変えられます.今回はそんなに長いディレイタイムは必要としないので,100(ms)としておきます.「何度も到達する」訳なので,ディレイにフィードバックもかけます.とりあえず,ゲインは0.99にしておきます.

この画像のようにディレイタイムを10.msにして,Buttonをクリックするとどうでしょうか?先ほどのノイズがディレイとフィードバックによって何度も繰り返されているのがわかると思います.ここで更にディレイタイムを短くすると,徐々にピッチがはっきりと感じられると思います.勘の良い方はお気づきと思いますが,3msのノイズが周期的に繰り返されることによって,音源がノイズであったにもかかわらずピッチが生じているのです.これがKarplus-Strong合成です.

最後に,KSliderもつけて,少しばかり演奏インフェースっぽくしてみましょう.MIDIのNote Numberから周波数へはmtofで変換することができます.周波数からmsへの変換は,1000msに何回振動するかというのが周波数の定義なのですから,1000を周波数で割り算すれば求めることができます.



いかがでしょうか?物理モデリングといってもかなりシンプルに実装できることがわかります.初歩的な物理モデリングといえば,Karplus-Strong合成が最も有名ですが,実はこの考え方を応用したかなりたくさんの種類の物理モデリング音源が提案されています.色々な場所でサンプルとして見かけることができますから,ぜひ探してみてください.

※番外編

tapout~で設定するディレイタイムはsignalとして入力することで,「連続的」にディレイタイムを変化させることが出来ます.これを利用することで,チョーキングやビブラートのような効果を作ることが出来ます.


0 件のコメント:

コメントを投稿