试图制作波表振荡器

时间:2014-06-01 23:36:22

标签: c signal-processing

我正在努力为我正在制作的音频项目制作一个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;
     }    
  }

这是无意义的嗡嗡声和噪音。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题似乎与BuildTable有关。 通常会使用完整的正弦波周期将表初始化为:

for(int i = 0; i < tableSize; i++)
{
    table[i] = sin(i * 2 * PI / tableSize);
}

而不是具体的频率和采样率。