我正在努力为我正在制作的音频项目制作一个wavetable振荡器,但出于某种原因,我似乎无法做到正确。这是我公认的天真实施。
void BuildTable()
{
table = (float*)malloc(tableSize * sizeof(float));
for(int i = 0; i < tableSize; i++)
{
table[i] = sin((i * 2 * PI * frequency) / samplerate);
}
}
void Process(float* buffer, int count, float frequency, int elapsedSamples)
{
float increment = tableSize * (frequency / samplerate);
float position = fmodf(elapsedSamples * increment, tableSize);
for (int i = 0; i < count; i++)
{
float sample = table[(int)floorf(position)];
buffer[i] = sample;
position += increment;
if (position > tableSize) position -= tableSize;
}
}
这是无意义的嗡嗡声和噪音。
我做错了什么?
答案 0 :(得分:0)
问题似乎与BuildTable
有关。
通常会使用完整的正弦波周期将表初始化为:
for(int i = 0; i < tableSize; i++)
{
table[i] = sin(i * 2 * PI / tableSize);
}
而不是具体的频率和采样率。