Если у вас есть истинные точки данных PCM, не должно быть проблем с простым сложением.Единственная проблема заключается в том, что в редких случаях (при условии, что ваш звук не слишком горячий для начала) значения выходят за пределы диапазона.Это будет иметь тенденцию создавать резкое искажение, а не белый шум.Тот факт, что вы получаете белый шум, подсказывает мне, что, возможно, вы не конвертируете свои суммы PCM обратно в байты для формата, который вы выводите.
Вот код, который я использую в AudioCue для преобразования PCM обратно в байты.Предполагается, что формат будет 16-битный, 44100 кадров в секунду, стерео, little-endian.Я работаю с PCM как нормализованные поплавки.Этот алгоритм выполняет преобразование для данных буфера за раз.
for (int i = 0, n = buffer.length; i < n; i++)
{
buffer[i] *= 32767;
audioBytes[i*2] = (byte) buffer[i];
audioBytes[i*2 + 1] = (byte)((int)buffer[i] >> 8 );
}
Иногда такая функция, как Math.min (Math.max (audioval, -1), 1) или Math.min (Math.max (audioval, -32767), 32767) используется для сохранения значений в диапазоне.Более сложные лимитеры или алгоритмы компрессора масштабируют объем, чтобы соответствовать.Но, тем не менее, если это не обрабатывается, результатом должно быть искажение, а не белый шум.
Если ошибка происходит на другом этапе, нам нужно будет увидеть больше вашего кода.
Все это говорит, я желаю вам удачи с ревербератором массива эхо-сигналов в 1000 точек.Я не слышал об этом подходе, работающем.Может быть, есть процессоры, которые могут справиться с вычислительной нагрузкой сейчас?(Вы пытаетесь сделать это в реальном времени?) Мой единственный успех в кодировании реверберации в реальном времени состоял в том, чтобы использовать метод Шредера, подключая структуру и значения из CCMRA Freeberb , отрабатывая код отКрэйг Линдли, ныне древняя (авторское право 2001) книга "Цифровое аудио с Java".Большая часть этой книги посвящена устаревшему коду GUI (pre-Swing!), Но код, который он дает для фильтров AllPass и Comb, все еще действителен.
Я вспоминаю, когда работал над этим, что отслеживал ссылкилучше реверберацию, чтобы попытаться написать код, но мне нужно было бы немного покопаться, чтобы попытаться найти мои заметки.В то время я чувствовал себя не в своей тарелке, так как алгоритм был представлен в виде блок-схем, а не деталей кода или даже псевдокода.Хотелось бы снова поработать над этим и получить лучшую реверберацию, чем у типа Шредера.Schoeder был пригоден для звуков, которые не были слишком ударными.
Получение решения для трассировки лучей в реальном времени было бы ценным достижением.Много приложений в AR / VR и играх.