64サンプルの長さの波形があります。サンプリングレートが44100Hzの場合、この波形を再生(ループ)して任意の周波数を再生するにはどうすればよいですか?
周波数=サンプルレート/サンプルの波形持続時間
したがって、周波数は689hz(44100/64)である必要があります。65.41hz(C-2)と言いたい場合は、次のようにする必要があります。
65.41 = 44100 / x
xを解くと、約が得られます。674.208。したがって、この周波数を取得するには、波形を再生する速度を把握する必要があります。したがって、この方程式を解くことができます。
64 * x = 674.208
約10.5を取得します。したがって、波形は元の速度の10.5%で再生する必要があります。
これが私のコードです:
double smp_index = 0;
double freq = .105;
void callback(void *data, Uint8 *buf, int len){
int i;
s8 *out;
out = (s8*) buf;
if(smp_index < waveform_length){
for(i = 0; i < len; i ++){
out[i] = smpdata[(int)smp_index];
smp_index +=freq;
if(smp_index >= waveform_length)
smp_index = 0;
}
}
}
したがって、結果のオーディオはノートC-2に関するものになりますが、それはD-2に近いものになります。キャストですか
(int)smp_index
問題を引き起こしていますか?私はこれを達成する他の方法を見つけることができませんでした...