Как мне смешать два аудиофайла в разное время?

#java #audio #mixer

#java #Аудио #микшер

Вопрос:

У меня есть два аудиофайла, один из которых длится 20 секунд, а другой — 10 секунд. Я хочу микшировать два сэмпла, чтобы второй клип начал воспроизводиться со секунды 5 по секунду 15. Как мне это сделать с помощью Java Mixer?

Ответ №1:

Многое зависит от уровня точности, к которому вы стремитесь.

Относительно простой в программировании задачей было бы воспроизвести первый звук через a SourceDataLine из an AudioInputStream . С помощью этого, в отличие от Clip объекта, вы можете подсчитывать прошедшие кадры. Включите количество целевых кадров, соответствующее количеству времени, которое вы хотите пропустить до запуска второго звука. Когда этот кадр достигнут, вызовите start метод второго звука Clip , который может быть полностью готов к работе (не добавляйте задержку при загрузке или открытии, это должно быть сделано заранее).

Тем не менее, может быть небольшая разница в точном моменте начала второго звука относительно первого. Единственный известный мне способ добиться точности на уровне кадра — это обработать оба входных сигнала в одном while цикле, вручную преобразуя байты в PCM, добавляя значения, затем преобразуя обратно в байты и отправляя в один SourceDataLine .