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.
Дублируйте значение для преобразования из моно в стерео.