Intereting Posts
Кнопка не вызывает OnClickListener с первого щелчка Альтернативные способы покупки приложений для Android Как настроить кнопку «вверх» при расширении searchView? RETROFIT & AUTH COOKIE Вращение ImageView подобно компасу (с «северным полюсом», установленным в другом месте) Как предотвратить быстрый двойной щелчок по кнопке Предупреждение: компоновщик: app_process имеет перемещение текста. Это трата памяти и представляет угрозу безопасности. Пожалуйста исправьте. Разрешения запрещены Что такое Android Pre-Dexing и как повысить производительность? Как подключиться к локальному хосту от VS Android Emulator Декомпиляция DEX в исходный код Java Android-запрос sqlite для соответствия столбцу, содержащему текст Поместить appbarLayout в нижней части экрана Java.lang.NoClassDefFoundError: в dalvik.system.NativeStart.main (собственный метод) Программная деятельность по закрытию Android В конечном итоге деятельность по салфетки вправо?

Android AudioRecord, какие настройки для записи вызова

Я использую класс AudioRecord для записи голоса во время разговора.

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

Android имеет следующие параметры AudioSources:

  • MediaRecorder.AudioSource.VOICE_CALL
  • MediaRecorder.AudioSource.MIC
  • MediaRecorder.AudioSource.VOICE_UPLINK
  • MediaRecorder.AudioSource.VOICE_DOWNLINK

Можете ли вы объяснить, каковы различия между ними. ОК MIC очевидна, но VOICE_CALL против VOICE_UPLINK против VOICE_DOWNLINK?

Также я должен выбрать частоту дискретизации (8000 Гц, 16000 Гц, 2250 Гц, 44100 Гц). Не могли бы вы рассказать мне, какую выборку выбрать и почему?

Для аудиоформата я выбрал AudioFormat.ENCODING_PCM_16BIT, но он также имеет: – AudioFormat.ENCODING_DEFAULT – AudioFormat.ENCODING_INVALID – AudioFormat.ENCODING_PCM_8BIT

Наконец, сколько каналов я должен использовать и почему? (AudioFormat.CHANNEL_IN_STEREO или AudioFormat.CHANNEL_IN_MONO)

Solutions Collecting From Web of "Android AudioRecord, какие настройки для записи вызова"

Вы всегда должны стремиться использовать 44100 в качестве частоты дискретизации, так как это единственная частота дискретизации, которая, как гарантируется, будет работать в соответствии с Google.

«Частота дискретизации, выраженная в герцах 44100 Гц, в настоящее время является единственной нормой, которая гарантирована для работы на всех устройствах, но другие скорости, такие как 22050, 16000 и 11025, могут работать на некоторых устройствах». Сайт Dev

Что касается стерео или моно, используйте моно.

»Описывает конфигурацию аудиоканалов. См. CHANNEL_IN_MONO и CHANNEL_IN_STEREO. Гарантируется, что CHANNEL_IN_MONO будет работать на всех устройствах." Сайт Dev

Наконец: 8bit pcm vs 16bit pcm: используйте 16bit pcm,

«Формат аудиоданных: PCM 16 бит на образец. Гарантируется поддержка устройств». Сайт Dev

Не забудьте использовать короткий буфер [] вместо байтового буфера при использовании 16 бит. Поскольку 16 бит – это 2 байта, вам придется объединить две записи в буфере за раз:

Byte] [] {sample_1_upper, sample_1_lower, sample_2_upper, sample_2_lower, …, sample_n_lower} Однако, если вы будете использовать короткий [] буфер:
Short [] {sample1, sample2, …, sample3}

Я никогда не пытался записать вызов, но если ОС не связывает источник MIC, вы, вероятно, можете записать его. Поскольку вы записываете с микрофона, вы должны получать голос только от пользователей.

Можете ли вы объяснить, каковы различия между ними. ОК MIC очевидна, но VOICE_CALL против VOICE_UPLINK против VOICE_DOWNLINK?

VOICE_UPLINK: аудио, переданное с вашего конца другой стороне. IOW, что вы говорите в микрофон (плюс окружающий шум в зависимости от того, используется ли подавление шума и насколько хорошо он работает).

VOICE_DOWNLINK: аудио передается от другой стороны до конца.

VOICE_CALL: VOICE_UPLINK + VOICE_DOWNLINK.

Немного поздно, но вы можете запросить звуковое устройство, чтобы узнать, что он может сделать;

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); String sampleRate = audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE); String sampleBufferSize = audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER); int bufferSize = AudioRecord.getMinBufferSize(Integer.parseInt(sampleRate), AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);