PsycleにSpeedというものがあります。
これはサンプルを再生速度のことで、64ビットの固定小数点値になっています。
このスピードはNoteとチューニング値、そしてOutPutのサンプリングレートによって以下の数式で求められます。
Speed = 2 ^ (((note + wavetune) - 48.0f + finetune) / 12.0f) 0x100000000 (44100 / outputRate)
この値はC4でoutputRateが44.1KHzの場合0x100000000となり、サンプルそのままのレートで再生されます。
XMにはPeriodというものがあります。
これは、下記のような数式でもとめられます。
Period = 1012164 - Note164 - FineTune/2
これは、1音階を64に分解したものといえます。
さらにPeriodから、再生周波数をもとめるには、
Freq = 83632^((612164 - Period) / (12164))
これはC4(48)の場合、8363Hzとなります。
その後Freq値を「ごにょごにょ」として再生されるようですが。
XMの場合、ポルタメント系のEffectはPeriodをAdd,Subすることで行います。
Psycleの場合はPeriodはないので、トーンポルタメントなどを行うときにXMと同じようにするためには、どうすればよいか考えました。
今までは適当な値を実際のSpeedに足したり引いたりしてましたが、それではXMと同じ(まったく同じは私にはムリですが、それなりに同じ)に再生できません。
やはりPeriodをエミュレートする必要があるのではないかと最初考えましたが、よくよく考えたら 2^(1/(1264)) - 1.0の値をTick毎に変化量に加算して、それを最終スピードにかければよいのでは...と思いやってみようと思っているところです。