Понижение частоты дискретизации звука с 44,1 кГц до 16 кГц в Java

У меня есть приложение, которое записывает образец речи с микрофона пользователя и загружает его на сервер, который затем выполняет с ним некоторые действия. Кажется, я должен записывать со следующими параметрами, чтобы избежать IllegalArgumentException:

Encoding encoding = AudioFormat.Encoding.PCM_SIGNED;
float sampleRate = 44100.0F;
int sampleSizeInBits = 16;
int channels = 2;
int frameSize = 4;
float frameRate = 44100.0F;
boolean bigEndian = false;

Но мне нужно, чтобы он был записан с частотой 16 кГц, а не 44,1 (я полагаю, что частота дискретизации и частота кадров), и он должен быть в моно (1 канал). Подпись PCM также является обязательной, так что это хорошо. (Сервер ОЧЕНЬ разборчив, и я не могу вносить в него какие-либо изменения.) Как я могу преобразовать это с помощью Java?

Я отправляю аудиофайл через HttpClient как Filebody сервлету, сохраняю его на сервере, а затем обрабатываю.


person Woobie    schedule 10.07.2012    source источник
comment
Я думаю, вы имеете в виду 44 100 Гц для вашей частоты дискретизации, а не 41 000 Гц, что было бы очень странно.   -  person Brad    schedule 11.07.2012
comment
Да, это то, что я имел в виду, извините.   -  person Woobie    schedule 11.07.2012
comment
@DavidKroukamp Извини, меня не было за столом.   -  person Woobie    schedule 11.07.2012


Ответы (1)


Вот несколько хороших ссылок, чтобы начать работу самостоятельно:

В качестве альтернативы (для быстрого использования) эта БЕСПЛАТНАЯ библиотека - это то, что вам нужно:

person David Kroukamp    schedule 10.07.2012
comment
Я использовал SampleRateConverter.java, который позволил мне преобразовать в 16 кГц, однако он по-прежнему выдает исключения, когда я пытаюсь перейти в моно из стерео. Я ищу в библиотеке Tritonus, но не знаю, что делать. Я бы предпочел не конвертировать файл дважды, хотя, похоже, это может быть то, что мне нужно сделать. - person Woobie; 11.07.2012
comment
Как только вы достигнете стерео 16 кГц, вы можете суммировать две дорожки и разделить их на два. Это вопрос перебора аудиофайла, преобразования LittleEndian или BigEndian в целые числа, выполнения математических вычислений и обратного преобразования в байтовый формат в новом файле. - person Phil Freihofner; 11.07.2012