Как улучшить качество звука на андроиде

Я делаю приложение для записи голоса на Android, используя класс AudioRecorder, и работал с разными частотами дискретизации 44100, 32000, 24000, 16000 и 8000. Частота дискретизации 44100 дает хорошее качество звука, но занимает очень большой размер, но другие частоты дискретизации дают плохой и очень аудио плохого качества с приемлемыми размерами файлов.

Прежде чем вы скажете, что возможно дублирование вопросов, я видел следующие ссылки:

Ссылка1

Link2

Но упомянутые ссылки отличаются от вопроса.

мои вопросы: как получить звук хорошего качества с небольшим размером файла для частот дискретизации, таких как 32000, 24000 и 8000?

или Есть ли способ сжать wav-файл из большого размера в маленький?

мой пример кода:

tempbufferSize = AudioRecord.getMinBufferSize(16000,AudioFormat.CHANNEL_CONFIGURATION_MONO,AudioFormat.ENCODING_PCM_16BIT);
........
mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,16000, AudioFormat.CHANNEL_CONFIGURATION_MONO,AudioFormat.ENCODING_PCM_16BIT,tempbufferSize);
mAudioRecord.startRecording();
.....

я указал ссылку.

пожалуйста, помогите мне.


person M.A.Murali    schedule 06.08.2012    source источник
comment
Как улучшить качество звука на андроиде - купите новые наушники.   -  person    schedule 06.08.2012
comment
@ H2CO3, пожалуйста, помогите с соответствующими комментариями. не пишите эти типы несвязанных комментариев. пожалуйста.   -  person M.A.Murali    schedule 06.08.2012


Ответы (2)


WAV — это чистые несжатые аудиоданные, поэтому без ущерба для качества размеры файлов будут довольно большими. Вы можете записывать в MPEG4, используя MediaRecorder и setOutputFormat()

Смотреть на:

MediaRecorder

Формат вывода MPEG4

Надеюсь, это помогло

person gcb    schedule 06.08.2012
comment
На самом деле, я вижу, что ссылка 2 в вашем вопросе использует MediaRecorder. Разве это не решает вашу проблему? - person gcb; 06.08.2012
comment
Мне нужны функции паузы и возобновления аудиозаписи, поэтому я не использую MediaRecorder. возможно ли объединить файлы mp4 во время паузы и возобновления?. если это возможно, пожалуйста, скажите мне несколько образцов?. пожалуйста - person M.A.Murali; 06.08.2012
comment
Я понимаю. У него есть функции Start и Stop, но после вызова Stop вам нужно перенастроить его, как будто вы начинаете заново. Вы можете объединять файлы после каждого сеанса. Другой вариант — записать в формате WAV, а затем, когда вы закончите, использовать JLayer для преобразования файла WAV в MP3. JLayer: javazoom.net/javalayer/javalayer.html - person gcb; 06.08.2012
comment
подскажите, пожалуйста, как конкатенировать файлы после каждого сеанса для файлов Mp4 с помощью MediaRecorder. это бы мне очень помогло. - person M.A.Murali; 06.08.2012
comment
спецификация mpeg-4: mpeg.chiariglione.org/standards/ mpeg-4/mpeg-4.htm#10.9 здесь. Вам нужно знать структуру заголовка файла, в чем я действительно не уверен. - person gcb; 06.08.2012
comment
Вы также можете использовать 3GPP, что, я думаю, может быть проще. Опять же, вам придется узнать формат заголовка. - person gcb; 06.08.2012

Вы понимаете, что когда вы увеличиваете частоту дискретизации, вы получаете больше выборок в секунду, и это эффективно увеличивает размер файла. Подход больше качества, больше данных.

Некоторые рекомендации по сжатию:


http://www.eetimes.com/design/analog-design/4017792/Audio-Compression-Algorithm-Overview

http://jspeex.sourceforge.net/index.php

http://flac.sourceforge.net/license.html ‹-- лицензия BSD / без потерь

http://jflac.sourceforge.net/ ‹‹ Лицензия Apache / без потерь

person JoxTraex    schedule 06.08.2012