Некоторые вопросы об API Java Sound
Я относительно новичок здесь и в использовании Java Sound API и аудио программирования в целом. Мне было интересно, можно ли сделать следующие вещи с помощью Java API Sound:
- извлечь значения отдельных частот, из которых состоит аудиофайл. (например: амплитуда для диапазона частот 20 Гц-20 кГц)
- на основе этих значений выполните манипуляции, а затем запишите новый измененный аудиофайл.
Если вам интересно, почему я спрашиваю об этом, я планирую создать собственный формат сжатия звука с использованием алгоритма оптимизации на основе роя. Так что для тех, кто может дать более простой ответ: возможно ли создание программы сжатия звука с использованием Java Sound API?
Благодарю.
2 ответа
Я планирую создать собственный формат сжатия звука. Будет ли возможно создание программы сжатия звука с использованием Java Sound API?
Цитата из информации о JavaSound. страница здесь на SO.
Интерфейс поставщика услуг
Java Sound API использует интерфейс Service Provider Interface для определения кодеров и декодеров для звуковых форматов и типов последовательностей. Таким образом, добавить поддержку нового формата или типа так же просто, как предоставить для него декодер и / или кодировщик, добавить файл SPI в манифест Jar, в котором он находится, а затем добавить Jar в класс времени выполнения. путь приложения.
Так что, если вы можете предоставить кодировщик / декодер, то да.
Вы, конечно, можете прочитать формы волны. То есть, для файла с частотой 44,1 кГц вы можете прочитать 44 100 различных значений выборки в секунду. Я не знаю, что Java Sound API рассчитает звуковые частоты для вас, но если вы уже собираетесь выполнять манипуляции, вы, вероятно, можете рассчитать все, что вам нужно.
Несколько лет назад я использовал нечто подобное для декодирования подозрительного сигнала временного кода SMPTE, распечатывая различные биты и поля. (По сути, мне просто нужно было отслеживать, когда значение пересекает 0 и как долго.)
Короче говоря, да, создание программы сжатия звука, безусловно, было бы возможно - хотя я знаю многих людей, которые были бы удивлены выбором сделать это на Java.