Я пытаюсь создать простую синусоидальную волну в 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++;
}
Что я сделал не так? Вместо синусоидальной волны я слышу низкий звук.
Отвечая на мой собственный вопрос.
Rtaudio хитро обрабатывает выходной буфер. Массив с плавающей запятой предназначен не для одного моноканала, он содержит слоты, представляющие один кадр для каждого канала, за которыми следуют несколько слотов для следующего кадра и т. Д. Корректировка ключа, поскольку этот выход имеет 2 канала:
outputbuffer[2 * i] = v;
выводить только на один канал.
Других решений пока нет …