Звуковой щелчок при изменении высоты тона в OpenAL - PullRequest
1 голос
/ 02 марта 2010

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

alSourcef(source, AL_PITCH, aPitch);

Я заметил, однако, слышимый щелчок, когда я делаю это. За исключением этого, идеальный шаг, правильный шаг и т. Д. Есть идеи, что может быть причиной этого?

Ответы [ 2 ]

0 голосов
/ 06 марта 2010

У меня есть опыт в этом вопросе, в основном это потому, что вы смещаете высоту тона слишком высоко или слишком низко, смещение тона растягивает или сжимает длину волны, например, если у ваших данных недостаточно выборки, чтобы растянуть их,звучит «странно», в случае сокращения длины (повышения высоты звука), если в вашем буфере воспроизведения не хватает сэмпла для подачи во времени, он будет отставать или дрожать, потому что концептуально скорость воспроизведения увеличивается из-за сокращения длины аудио,в основном вы слышали щелчки или щелчки.

, чтобы предотвратить это, вы должны ограничить диапазон смещения, в основном это значение от 0,5 до 2,0 для большинства звуковых карт, и оно варьируется в зависимости от звуковой карты, так как смещение высоты тонаможет быть улучшено с помощью некоторого расширенного сглаживания и обработки в DSP, поэтому для такой обработки будет зависеть вычислительная мощность вашего DSP или процессора.я пробовал с помощью встроенного Intel HDA, что ограничение в основном составляет 0,5-2,0, но с использованием звуковой карты X-Fi лучше, переход на 0,1 .. 5,0 не имеет проблемы

0 голосов
/ 03 марта 2010

Я не использовал OpenAL, но в других звуковых библиотеках я видел этот «артефакт». При работе с генератором тона и т. Д. Обычно существует переменная для времени, в течение которого тон достигает 100% уровня громкости, я могу на всю жизнь не помнить, как он называется:)

как это:

playTone(400 Hz, 40 dB, 50 ms, 3000 ms).

, где 400 - это Гц, 40 дБ - громкость, 3000 миллисекунд - это длительность, а 50 миллисекунд - это время, которое требуется от запуска тембра с громкости 0 (или + 100 дБ) до достижения 40 дБ. Я просто не могу найти слово прямо сейчас.

В любом случае, если у вас есть возможность установить эту переменную, попробуйте сделать это, просто установите ее примерно на 10 мс. Вы не сможете его услышать, но он убрал для меня звуки щелчков как в библиотеке звуков с открытым исходным кодом, которую я использовал для iPhone, так и в некоторых библиотеках Java / Processing, которые я использовал в прошлом.

Может быть, это связано с тем, как базовый код запускает какое-то оборудование, подключенное к динамику?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...