A partire dal 27 marzo 2025, ti consigliamo di utilizzare android-latest-release
anziché aosp-main
per compilare e contribuire ad AOSP. Per ulteriori informazioni, vedi Modifiche ad AOSP.
Ingresso microfono
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Durante l'acquisizione dell'audio, l'HAL audio riceve una chiamata openInputStream
che include un argomento AudioSource
per indicare come deve essere elaborato l'input del microfono.
L'origine VOICE_RECOGNITION
prevede uno stream del microfono stereo con un effetto di cancellazione dell'eco (se disponibile), ma nessuna altra elaborazione.
Per acquisire l'audio da un dispositivo con più di due canali (stereo), utilizza una maschera di indice di canale anziché una maschera di indice di posizione (ad esempio CHANNEL_IN_LEFT
).
Ad esempio:
final AudioFormat audioFormat = new AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(44100)
.setChannelIndexMask(0xf /* 4 channels, 0..3 */)
.build();
final AudioRecord audioRecord = new AudioRecord.Builder()
.setAudioFormat(audioFormat)
.build();
audioRecord.setPreferredDevice(someAudioDeviceInfo);
Quando sono impostati sia setChannelMask
sia setChannelIndexMask
, AudioRecord
utilizza
solo il valore impostato da setChannelMask
(massimo due canali).
Acquisizione simultanea
A partire da Android 10, il framework Android supporta la acquisizione simultanea degli input, ma con limitazioni per proteggere la privacy dell'utente. Nell'ambito di queste limitazioni,
le sorgenti virtuali come AUDIO_SOURCE_FM_TUNER
vengono ignorate e possono essere acquisite contemporaneamente insieme a un input normale (ad esempio il microfono).
HwAudioSource
non è considerato parte delle limitazioni di acquisizione simultanea.
Le app progettate per funzionare con dispositivi AUDIO_DEVICE_IN_BUS
o con dispositivi AUDIO_DEVICE_IN_FM_TUNER
secondari devono basarsi sull'identificazione esplicita di questi dispositivi e sull'utilizzo di AudioRecord.setPreferredDevice()
per bypassare la logica di selezione della sorgente predefinita di Android.
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-07-09 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-07-09 UTC."],[],[],null,["# Microphone input\n\nWhen capturing audio, the Audio HAL receives an `openInputStream` call that\nincludes an `AudioSource` argument to indicate how microphone input should be\nprocessed.\n\nThe `VOICE_RECOGNITION` source expects a stereo microphone stream that has an\necho cancellation effect (if available) but no other processing applied to it.\n\nMulti-channel microphone input\n------------------------------\n\nTo capture audio from a device with more than two channels (stereo), use a\nchannel index mask instead of positional index mask (such as `CHANNEL_IN_LEFT`).\nFor example: \n\n final AudioFormat audioFormat = new AudioFormat.Builder()\n .setEncoding(AudioFormat.ENCODING_PCM_16BIT)\n .setSampleRate(44100)\n .setChannelIndexMask(0xf /* 4 channels, 0..3 */)\n .build();\n final AudioRecord audioRecord = new AudioRecord.Builder()\n .setAudioFormat(audioFormat)\n .build();\n audioRecord.setPreferredDevice(someAudioDeviceInfo);\n\nWhen both `setChannelMask` and `setChannelIndexMask` are set, `AudioRecord` uses\nonly the value set by `setChannelMask` (maximum of two channels).\n\nConcurrent capture\n------------------\n\nAs of Android 10, the Android framework supports\n[Concurrent capture](/docs/core/audio/concurrent) of inputs, but with\nrestrictions to protect the user's privacy. As part of these restrictions,\nvirtual sources such as `AUDIO_SOURCE_FM_TUNER` are ignored, and are allowed to\nbe captured concurrently along with a regular input (such as the microphone).\n`HwAudioSource` is not considered part of the concurrent capture restrictions.\n\nApps designed to work with `AUDIO_DEVICE_IN_BUS` devices or with secondary\n`AUDIO_DEVICE_IN_FM_TUNER` devices must rely on explicitly identifying those\ndevices and using `AudioRecord.setPreferredDevice()` to bypass the Android\ndefault source selection logic."]]