我正在尝试为正在处理的音频项目制作一个波表振荡器,但由于某种原因,我似乎无法正确地做到这一点。这是我公认的幼稚实现。
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;
}
}
其输出是无意义的嗡嗡声和噪音。
我究竟做错了什么?
最佳答案
问题似乎出在BuildTable
上。
人们通常会使用完整的正弦波周期来初始化表格,如下所示:
for(int i = 0; i < tableSize; i++)
{
table[i] = sin(i * 2 * PI / tableSize);
}
而不是使用特定的频率和采样率。
关于c - 试图做一个波表振荡器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23985569/