Преобразование аудиоформата в Java

что я пытаюсь сделать, так это захватить звук с микрофона через класс TargetDataLine, отправить его с помощью сокета и воспроизвести на другой стороне через SourceDataLine. Проблема в том, что микрофон, которым я записываю, поддерживает только:

AudioFormat format = new AudioFormat(48000, 16, 1, true, true);

и динамик, на который я играю, поддерживает только:

AudioFormat format = new AudioFormat(32000, 16, 2, true, true);

Когда я напрямую получаю 48 кГц и нажимаю его на аудиоформат 32 кГц, звук меняется, есть ли способ преобразовать монофонический звук 48 кГц в стерео 32 кГц?


person Mikheil Pailodze    schedule 27.03.2017    source источник


Ответы (1)


Если в Java есть встроенное преобразование формата аудиофайлов, вы можете узнать об этом из "Использование конвертеров файлов и форматов" в ветке аудиоуроков.

Если это нужно сделать вручную, посмотрите первый пример кода на этой странице, особенно отметив пункт с комментарием

  // Here, do something useful with the audio data that's 
  // now in the audioBytes array...

Если вы запускаете линии ввода и вывода параллельно, вы можете использовать линейную интерполяцию, чтобы взять данные из строки 48000 и отправить их в строку 32000. Соотношение 3:2.

Таким образом, для 3 точек данных ИКМ на входе вычислите 2 точки данных ИКМ для вывода.

Для ввода вы должны отправить in[0] в out[0] и сумму in1/2 и in[2]/2 на out1.

Дублируйте значение для преобразования из моно в стерео.

person Phil Freihofner    schedule 28.03.2017