hex_music

jazzとかdtmとかcsoundとか

Cabbageを使ってトランペットシンセを作る②

一応いい感じの音になったので仮完成。

 

  • ウェーブフォームの設定

・ウェーブフォームはsine波の和によって得られるGen10関数で作成しました。

 

Gen10関数:giwave ftgen 1,0, 4096,10,str1,... ,str20

 

・str値はそれぞれの倍音成分の相対的な比で、今回はstr値は20まで設定しました。

・元の音源は第23倍音くらいまで視認できたのでもう少しモデルの精度は上げられるかと。

ダイナミクスによって、倍音成分は変化していくため、str1~20を一つのダイナミクスの変数とし、その変数に掛かる係数を回帰分析で推定しました。str10~20については、線形モデルがあてはまりにくそうだったので、二次曲線に回帰させました。

 

waveguideは管楽器を再現するのにふさわしいらしいです。理論的にはよく理解していませんが、試行錯誤していく上で、確かにこれは管楽器っぽいわぁとなったのでそういうことなのでしょう。

・先ほど得られたGen10関数をwguide2関数のオシレーターに使用します。

wguide2関数はdelay-lineという方法により、元のウェーブフォームを変形させてwaveguide化するもの(wguide2はディレイが二つある)で、以下のような構文になっています。(waveguide化という表現が正しいのかは分かりませんが)

 

wguide2関数:asig wguide2 aout, afreq1, afreq2, kcutoff1, kcutoff2, kfeedback1, kfeedback2

 

・afreqはマニュアルには、the frequency (i.e. the inverse of delay time)とあり、ディレイされたフィルターの濃度的な感じに理解しています。afreqにline関数を用いることで、時間とともに濃度を濃くし、出音の荒い音(高い周波数)から、滑らかな音を伸ばしている音へと変化させることができます。

・kcutoffはフィルターのカットオフの周波数

・kfeedbackは公式マニュアルには、the feedback factorとだけ書かれていてよく分かりませんが、数値を上げすぎると爆発するのでどれだけの量フィードバックさせるかという感じかと。

 

  • 結果

 

まぁまぁ上手くいきました。

サンプルを使用していないので、どのキーでも綺麗になってくれて、一つでブラス全体の音源っぽく使用できるのは便利です。ただ処理がえらいことになっているので、バッファサイズ最大にしないとえらいこっちゃなるのが難点ですね。妥協できるところを妥協する必要がありそうです。

 

大変だったのは、wguide2関数を試行錯誤しながらあーでもないこーでもないといじっているときでした。ネットであまり情報を得られなかったのと、waveguideの理論そのものをあまり理解していないので完全手探りでした。

後、書き上げたコードをAudio UnitのComponentに書き出してもLogicがなかなか読み込んでくれないのが困りました。なんとか解決はしましたが、何が効いたのか特定できていないので、早いところ特定したいです。

 

ソロ音源、またはソロ音源付きのブラス音源を買おうとすると1万は飛ぶので、自作できたのは嬉しいです。今後も色々な楽器を簡単に作れそうですしね。タダで済ませたい、というのは十分なモチベになり得ますね。

 

もう少し、改善の余地がありそうなので、それは次の機会に。