#include <iris_sp/snd/snd.h>
#define SND_PITCH_DIVISION_BIT 6 #define SND_PITCH_DIVISION_RANGE ( 1 << SND_PITCH_DIVISION_BIT ) u16 SND_CalcTimer
(
u16 base_timer, s32 pitch
);
| base_timer | 元となるタイマー値です。 |
| pitch | ピッチ変化の値です。 |
ピッチ変化を施した後のタイマー値を返します。
結果は、チャンネルタイマーに設定できる値、すなわち、SND_CHANNEL_TIMER_MIN(0x10) から SND_CHANNEL_TIMER_MAX(0xffff) の範囲に切りつめられます。
ピッチ変化したときのタイマー値を再計算します。
pitch は、0x40 を1半音とする相対的なピッチ変化量を表します。 例えば、0x40 * 12 は、12半音すなわち1オクターブを表します。 負値は、元より低い音程を表します。0x40は、SND_PITCH_DIVISION_RANGE として定義されています。 また、半音の分解ビット数 6 が、SND_PITCH_DIVISION_BIT として定義されています。
計算式で表すと、次のようになります。
timer = base_timer * ( 2 ** ( pitch/(64*12) ) )
2004/01/19 初版