Самая быстрая и эффективная процедура повышения частоты дискретизации для аудио в Java

Мне нужно преобразовать аудиосэмплы из 11025 и 22050 в 44100; Я ищу самую быструю и лучшую процедуру преобразования звука. Я требую, чтобы ответ был дан на чистой Java, без необходимости использования внешних процедур или библиотек. Источник представляет собой массив коротких значений, представляющих левый и правый каналы, чередующихся вот так LRLRLRLR
Я слышал, что гауссовское преобразование является лучшим, но оно убивает процессор.

Обновление
Чтобы добавить больше деталей, я бы хотел, чтобы было сочетание лучшего и самого быстрого. Ответ дал бы великолепно звучащий звук, подходящий для общения почти в реальном времени.
Обновление 2
Я ищу несколько коротких примеров кода для этого, должно быть ez баллов для вас аудио гуру


person Paul Gregoire    schedule 14.09.2010    source источник
comment
Я думаю, что формула, которая мне нужна, находится на этой странице, но я не математик. Кто-нибудь из математиков хочет прокомментировать? particle.kth.se/~lindsey/ JavaCourse/Book/Part1/Tech/Chapter07/   -  person Paul Gregoire    schedule 14.09.2010
comment
Вам придется сделать выбор между самым быстрым или лучшим. Самым быстрым решением было бы что-то вроде простого дублирования образцов, в то время как для лучшего вы можете представить любое количество вычислений, возможно, даже ИИ, который понимает, что происходит. слышал и знает, как это должно звучать :) Нельзя требовать и того, и другого одновременно. Разумное ограничение (например, подходящее для реального времени), вероятно, даст вам больше ответов. Если вы настроены на определенный алгоритм, измените заголовок вопроса, чтобы отразить это.   -  person Durandal    schedule 11.10.2010


Ответы (2)


вы можете (в конечном счете) просто использовать ель после заполнения каждого второго образца 0 - вы повышаете дискретизацию на 2 или 4. Это будет достаточно быстро для реального времени. качество звука будет хорошим для большинства приложений.

person justin    schedule 11.10.2010
comment
Я не уверен, но заполнение каждой второй выборки нулем, вероятно, прозвучало бы очень странно... Возможно, значения должны дублироваться. - person Frank; 16.10.2010
comment
Даже после применения КИХ-фильтра (en.wikipedia.org/wiki/Finite_impulse_response) к встроенному нули, разве это не звучит странно? - person Roland Illig; 17.10.2010
comment
@Frank и Roland Illing, вы можете не осознавать, что дублирование выборок (при условии, что сигнал увеличен до целочисленного значения, которое было заполнено нулями) может быть идеально достигнуто с помощью очень простой пихты: все значения = 1, длина = количество передискретизации (2 или 4 в данном случае). на практике лучше использовать более длинную оконную функцию (например, sinc или Hamming). фильтр заполняет пробелы и служит интерполятором. какая функция является «лучшей», зависит от сигнала и характеристик, которые вы хотите (или не хотите). - person justin; 19.10.2010

Что ж, трудно передискретизировать его достаточно медленно, чтобы он не работал в реальном времени :-) Одно из лучших и все еще быстрых решений - выполнить прямое БПФ, а затем обратное БПФ с любой необходимой вам частотой дискретизации.

Вы можете реализовать это самостоятельно или скопировать и вставить любую реализацию БПФ.

Это может работать как в 100 раз в реальном времени или быстрее, не уверен, что вам нужно в 1000 раз быстрее (в этом случае вы можете использовать линейную или бикубическую интерполяцию) :-)

person BarsMonster    schedule 11.10.2010