Плохое качество звука при записи / воспроизведение звуков - Android SDK

StackOverflow https://stackoverflow.com/questions/3950353

Вопрос

У меня проблема, когда я пытаюсь записать, а затем играть в файл, который был только что записан. Я могу оба записывать и играть на звук, но качество воняет. Это не просто плохо, действительно трудно слушать и звучать немного, как его компьютер сгенерированный голос. Я использую Andriod SDK-эмулятор. Код, который устанавливает запись, выглядит так;

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(path);
recorder.prepare();
recorder.start();

И код, играющий в файл позже выглядит так;

MediaPlayer mp = new MediaPlayer();
mp.reset();
mp.setDataSource(path);
mp.prepare();
mp.start();

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

Это было полезно?

Решение

Вы говорите о двух разных объектах, audiorecords и MediareCarder.

Другие советы

Попробуйте эти

recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);   
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);     
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);   
recorder.setAudioChannels(2);
recorder.setAudioEncodingBitRate(128);
recorder.setAudioSamplingRate(44100);

Incase Если вы найдете этот код кода на устройствах Android с низким уровнем секунды, попробуйте удалить SetaudioChannels и setaudiosamplingrate.

Это не просто эмулятор; Звучит плохо на моем Nexus 10 тоже.

Подобно ответу Мохита Марвала, вы можете установить скорость дискретизации и скорость битов. 44100 - это стандарт, частота дискретизации качества CD. Большинство коммерческих звуковых загрузок кодируются не менее 128000 бит в секунду (а не килобит в секунду, как показано в ответе Моит). Так что это были бы хорошие стартовые ценности. Кроме того, вы должны использовать только один канал, чтобы разрезать размер вашего файла пополам, если у вас есть стереофонический микрофон и не нужно записывать в стерео.

recorder.setAudioChannels(1);
recorder.setAudioEncodingBitRate(128000);
recorder.setAudioSamplingRate(44100);

Когда я устанавливаю эти значения, размер файла и качество увеличился, но все еще не на уровне я бы предпочел. Возможно, оставшийся шум из плохого микрофона на моем устройстве, но я не тестировал с внешним микрофоном или сравниваемым другими устройствами.

AudioRecord принимает различные аргументы, которые будут влиять на качество записи.

Попробуйте установить их в конструкторе:

  • Аудио Источник: MIC
  • Образец: 16000
  • Количество каналов: channel_configuration_mono
  • Формат: encoding_pcm_16bit.
  • Размер буфера: 16000 * 30 (30 секунд буфер)

Пример кода:

recorder = new AudioRecord(
                          MediaRecorder.AudioSource.MIC,
                          16000,
                          AudioFormat.CHANNEL_CONFIGURATION_MONO,
                          AudioFormat.ENCODING_PCM_16BIT,
                          16000*30);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top