VirusTIの音色を、Spireにコピーしてみる Part.6 OSC3編

DTM

Part.1をご覧になってない方はこちらへ。

スポンサーリンク

VirusTIのOSCILLATOR 3を、Spireに反映させる

OSCILLATOR 3の値を反映させていきます。

オシレーターを反映させる系はこれで一段落でしょうか。
ノイズはあるのですが、あれはちょっと調査がいりそうなので、楽しみです。

OSCILLATORのGoogle スプレッドシート

OSCILLASTOR 3 (入力側)

Spire OSC (出力側)

OSCILLATOR3の特殊な設定は、Slaveです。

Slaveは、OSCILLATOR 2の値を引き継ぐ仕様のようです。
ただし、detuneの値だけ反転するようです。

Spireのパラメータ計算式
octave=IF(REGEXMATCH(Oscillator 3 Model,"Slave"),
if(REGEXMATCH(Oscillator 2 Model,"Classic"),
 Classic時のOSC2のoctave値,
HyperSaw時のOSC2のoctave値),
QUOTIENT(Oscillator 3 Detune In Semiton,12))

Slaveの時
Oscillator 2 ModelがClassicのときは
Classic時のOSC2のoctave値の値。
HyperSaw時のOSC2のoctave値の値。
Slave以外の時
Oscillator 3 Detune In Semitonを12で割った商の値
note=IF(REGEXMATCH(Oscillator 3 Model,"Slave"),
if(REGEXMATCH(Oscillator 2 Model,"Classic"),
 Classic時のOSC2のnote値,
HyperSaw時のOSC2のnote値),
IF(Oscillator 2 Detune In Semiton > 0,
MOD(ABS(Oscillator 2 Detune In Semiton),12),
UMINUS(MOD(ABS(Oscillator 2 Detune In Semiton),12))))


Slaveの時
Oscillator 2 ModelがClassicのときは
Classic時のOSC2のnote値の値。
HyperSaw時のOSC2のnote値の値。
Slave以外の時
Oscillator 3 Detune In Semitonを12で割った余の値

(Semitonが負の値の場合は、Spireの値も負になる)
fine=IF(REGEXMATCH(Oscillator 3 Model,"Slave"),
if(REGEXMATCH(Oscillator 2 Model,"Classic"),
 1000 - Classic時のOSC2のfine値,
1000 - HyperSaw時のOSC2のfine値),
Oscillator 3 Fine Detune *500/128+500)

Slaveの時
Oscillator 2 ModelがClassicのときは
1000 – Classic時のOSC2のfine値の値。
1000 – HyperSaw時のOSC2のfine値の値。
Slave以外の時
Oscillator 3のDetuneの値を反映
ctrlA=IF(REGEXMATCH(Oscillator 3 Model,"Slave"),
if(REGEXMATCH(Oscillator 2 Model,"Classic"),
 Classic時のOSC2のctrlA値,
HyperSaw時のOSC2のctrlA値),
if(REGEXMATCH(Oscillator 3 Model,"Pluse"),1000,0)

Slaveの時
Oscillator 2 ModelがClassicのときは
Classic時のOSC2のctrlA値の値。
HyperSaw時のOSC2のctrlA値の値。
Slave以外の時
Pluseかそれ以外かの値を設定
phase=IF(REGEXMATCH(Oscillator 3 Model,"Slave"),
if(REGEXMATCH(Oscillator 2 Model,"Classic"),
 Classic時のOSC2のphase値,
HyperSaw時のOSC2のphase値),
IF(Oscillator Section Inital Phase > 0,
(970-QUOTIENT((Oscillator Section Inital Phase-1) *970,126))+30,
0))

Slaveの時
Oscillator 2 ModelがClassicのときは
Classic時のOSC2のphase値の値。
HyperSaw時のOSC2のphase値の値。
Slave以外の時
VirusTIのPhaseの値が0より大きい(1〜127)時は、
Phase値を-1して0〜126の値にしてから、970/126倍にします。
Spireのphase値は30が最小値になるので、最後に+30します。
VirusTIのPhaseの値が0のときは、Spireもそのまま0にします。
wt-mix=IF(REGEXMATCH(Oscillator 3 Model,"Slave"),
if(REGEXMATCH(Oscillator 2 Model,"Classic"),
 Classic時のOSC2のctrlA値,
HyperSaw時のOSC2のctrlA値),
if(REGEXMATCH(Oscillator 3 Model,"Pluse"),0,1000)

Slaveの時
Oscillator 2 ModelがClassicのときは
Classic時のOSC2のwt-mix値の値。
HyperSaw時のOSC2のwt-mix値の値。
Slave以外の時
Pluseかそれ以外かの値を設定

実際に変換してみた

どんな音になるか、違いがどれぐらいでるか、
Slaveを使った確認をしてみました。

それを受けてのSpireはこんな感じです。

音を比較してみます。

VirusTIの音

Spireの音

うーん。
矩形波の音自体の質感が違うのか、やっぱり差を感じますが、、、これでいきます。

次回

ノイズの反映をしていきます。

コメント

タイトルとURLをコピーしました