Генерация синусоиды: неверный вывод

Я пытаюсь создать простую синусоидальную волну в rtaudio, чтобы убедиться, что я понимаю, что происходит. Тем не менее, это выходит не так.

У меня есть глобальный float timecи обратный вызов, вызванный с openStream который должен заполнить буфер с образцами.

float freq = 440; // center frequency
int SAMPLE_RATE = 44100;
for (int i = 0; i < numFrames; i++) {
    float v = sin(2 * M_PI * freq * (timec / SAMPLE_RATE));
    outputbuffer[i] = v;
    timec++;
}

Что я сделал не так? Вместо синусоидальной волны я слышу низкий звук.

1 ответ

Отвечая на мой собственный вопрос.

Rtaudio хитро обрабатывает выходной буфер. Массив с плавающей запятой предназначен не для одного моноканала, он содержит слоты, представляющие один кадр для каждого канала, за которыми следуют несколько слотов для следующего кадра и т. Д. Корректировка ключа, поскольку этот выход имеет 2 канала:

outputbuffer[2 * i] = v;

выводить только на один канал.

Другие вопросы по тегам