Многопоточный синтезатор Wavetable щелкает. Это вызвано разрывом чтения? - PullRequest
0 голосов
/ 18 марта 2020

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

У меня есть одиночная форма сигнала поиска с 4096 точками, которая дискретизируется аудиопотоком. В общем, однако, один генератор имеет несколько форм волны, которые могут быть изменены с помощью параметра position. Например, давайте возьмем две синусоидальные волны, где вторая имеет половину периода первой. Когда мы воспроизводим их на frequency = 440Hz и position = 0.5, мы слышим два одинаково громких тона на 440 Гц и 880 Гц. Вот ссылка на аудио (см. Sidenote 2).

Frequency spectrum of the 440Hz and 880Hz sine waves

По соображениям производительности я создаю таблицу поиска на другом нить всякий раз, когда изменяется параметр позиции. И в этом заключается моя проблема. Даже когда я не меняю положение таблицы и просто периодически генерирую свою таблицу поиска, у меня появляются странные, непредсказуемые сбои. Поскольку в этом случае аудиоданные в таблице не меняются, я могу объяснить это только разорванными чтениями. Это верно? И если так, как я могу обойти это? Должен ли я использовать двойной буфер с заменой указателя атома c после того, как я закончу генерацию данных sh?

Same frequency spectrum, but with glitches

Опять же, вот аудио для этой записи (см. Sidenote 2). Кроме того, некоторые данные осциллографа:

Oscilloscope Image where such a glitch is visible

Sidenote 1 : заполнение моей справочной таблицы занимает ~50,000ns без оптимизации и ~10,000ns с оптимизацией. Но, похоже, глюки случаются с той же вероятностью.

Sidenote 2 : Сайт, на который я загрузил аудио, похоже, содержит некоторые странные гармоники, которые не слышны в моем видео. Просто чтобы ты знал.

1 Ответ

1 голос
/ 18 марта 2020

Нашли это! Я случайно установил старое положение сканера после создания таблицы поиска. Если последний занимал слишком много времени, моя позиция в основном сбрасывалась на несколько микросекунд раньше, что объясняет визуальный спад в осциллографе.

...