Плохое качество звука при записи / воспроизведение звуков - Android SDK
-
08-10-2019 - |
Вопрос
У меня проблема, когда я пытаюсь записать, а затем играть в файл, который был только что записан. Я могу оба записывать и играть на звук, но качество воняет. Это не просто плохо, действительно трудно слушать и звучать немного, как его компьютер сгенерированный голос. Я использую 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);