Как программно преобразовать 44100 стерео в 11025 моно?

Я использую ffmpeg (С++) для декодирования различных аудиофайлов в 44100 стерео или моно (согласно источнику). Я должен оставить это как есть, потому что я тоже играю в них. Между тем, мне также нужны 11025 моно версии этих. Поэтому я пытаюсь найти очень быстрый/простой способ конвертировать 44100 стерео PCM в 11025 моно без ffmpeg для экономии процессора.

Возможно ли это в java (android) или c++ (ndk)?

Я уже использую java и c++ в одном проекте.


person frankish    schedule 22.07.2013    source источник
comment
Мы говорим о простых файлах .wav или о каком-то другом аудиоформате (например, MP3 или что-то в этом роде)? В значительной степени преобразование из 44 кГц в 11 кГц — это просто усреднение значений. И я думаю, что стерео в моно тоже просто объединяет два значения путем усреднения...   -  person Mats Petersson    schedule 22.07.2013
comment
Я конвертирую MP3 или AAC в 44KHz Stereo/Mono PCM с помощью ffmpeg.   -  person frankish    schedule 22.07.2013
comment
Правильно, тогда понижение дискретизации до 11K — это всего лишь случай, когда берутся 4 выборки и усредняются в одну новую выборку.   -  person Mats Petersson    schedule 22.07.2013
comment
Нет, это не так. То, что вам предлагается, известно как фильтр скользящего среднего. Он имеет ужасные характеристики в качестве фильтра с пониженной частотой дискретизации и будет звучать ужасно. Что требуется, так это фильтр нижних частот с частотой среза 11,025 кГц и хорошим затуханием в полосе задерживания выше этой частоты.   -  person marko    schedule 23.07.2013


Ответы (1)


усреднение по семплам правильно для преобразования стерео в моно, но для преобразования частоты дискретизации, почему бы не использовать такую ​​библиотеку, как libsamplerate? Если даже это слишком тяжело, усреднение действительно быстрое, но это не правильный метод. Приемлемо это или нет, зависит от вашего приложения. Альтернативный метод описан в моем ответе на этот пост SO:

Как преобразовать выборки PCM в байтовый массив как числа с плавающей запятой в диапазоне от -1,0 до 1,0 и обратно?

person Bjorn Roche    schedule 22.07.2013
comment
Будет ли libsmaplerate работать быстро и использовать низкий процессор? Я постоянно загружаю байты в AudioTrack в Android, который принимает звук PCM в соответствии с моей настройкой (44100 и стерео или моно). Если я использую libsamplerate, я должен отправить эти байты в функцию libsamplerate при отправке их в аудиосистему Android (AudioTrack). В этом случае я думаю, что мне нужно количество кадров/окна/границы, которых у меня нет. Я просто проталкиваю байты, не зная границ, остальное берет на себя аудиосистема. Есть идеи? - person frankish; 22.07.2013
comment
libsamplerate должен быть достаточно быстрым для Android, а IIRC дает вам варианты производительности. Но, конечно, это зависит от того, что еще работает. Вам придется испытать себя. - person Bjorn Roche; 22.07.2013
comment
Как узнать и обрезать аудиоданные, чтобы узнать количество кадров и аудиоокно? В противном случае я могу не предоставить правильный ввод для функций libsamplerate. - person frankish; 22.07.2013
comment
Если у вас возникли проблемы с использованием libsamplerate, обратитесь к документации и/или задайте новый вопрос. - person Bjorn Roche; 22.07.2013
comment
Я создал новый вопрос, спасибо: stackoverflow.com/questions/17789917/ - person frankish; 22.07.2013