Java Convert AudioFormat

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

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

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

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

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

1 ответ

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

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

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

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

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

Для ввода вы должны отправить [0] для выхода [0], а сумму в 1/2 и в [2]/2 для выхода 1.

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

Другие вопросы по тегам