Un microfono nei dispositivi mobili è un trasduttore acustico-elettrico che converte le onde sonore in un segnale elettrico per la successiva digitalizzazione ed elaborazione. Gli smartphone moderni utilizzano microfoni MEMS con principio di funzionamento capacitivo e ADC integrato. Secondo Yole Group, 2025, vengono spediti annualmente più di 6 miliardi di microfoni MEMS, di cui il 35% viene installato negli smartphone — 3–4 microfoni per dispositivo.
Punti chiave
Microfono è un dispositivo elettroacustico che converte le oscillazioni della pressione sonora in un segnale elettrico. In base al principio di funzionamento, si dividono in dinamici (bobina in un campo magnetico), a condensatore (variazione di capacità) e piezoelettrici. Nei dispositivi mobili, la stragrande maggioranza sono microfoni MEMS a condensatore grazie alle dimensioni miniaturizzate (2,5 × 1,5 mm) e alla compatibilità con il montaggio superficiale (SMD).
Un microfono è costituito da una membrana che vibra sotto la pressione sonora e da un elettrodo fisso, formando un condensatore. Il cambiamento della distanza tra le piastre modifica la capacità, che modula la tensione di uscita. Nei microfoni MEMS, la membrana è realizzata in polisilicio mediante fotolitografia — ciò garantisce caratteristiche identiche di tutti i microfoni in un lotto.
Il segnale di uscita di un microfono MEMS è PDM (Pulse Density Modulation) — un flusso a un bit con frequenza di campionamento di 1–4 MHz. I codec dello smartphone decodificano il PDM in PCM (Pulse Code Modulation) attraverso un filtro di decimazione digitale, ottenendo un formato audio standard di 16–24 bit a 44,1–96 kHz per l'elaborazione dell'applicazione.
Prima dell'avvento dei MEMS, i dispositivi mobili utilizzavano microfoni a condensatore electret (ECM). In questi, la membrana aveva una carica elettrica permanente (elettrete), e le vibrazioni della membrana creavano una tensione alternata. I microfoni ECM sono più grandi (4–6 mm) e richiedono un preamplificatore separato, aumentando l'area sul PCB.
| Parametro | Microfono MEMS | Elettrete (ECM) |
|---|---|---|
| Dimensioni del package | 2,5 × 1,5 × 1,0 mm | 4 × 2,5 × 1,5 mm |
| Sensibilità | −26 ± 1 dB (FS) | −38 ± 3 dB (FS) |
| SNR (tipico) | 64–69 dBA | 58–64 dBA |
| AOP (SPL max) | 125–135 dB | 115–125 dB |
| Consumo di corrente | 150–300 µA | 300–500 µA |
| Intervallo di temperatura | −40…+105 °C | −20…+70 °C |
I microfoni MEMS dominano grazie alle dimensioni ridotte, alle caratteristiche stabili e alla saldabilità sulle linee SMD standard. Tuttavia, gli ECM continuano a essere utilizzati nei dispositivi economici a causa del costo inferiore del componente ($0,15–0,30 contro $0,25–0,60 per i MEMS).
Gli smartphone moderni contengono da 3 a 4 microfoni, la cui posizione determina la qualità di registrazione e la cancellazione del rumore. Il microfono principale (inferiore) si trova sul bordo inferiore accanto alla porta USB-C — registra la voce dell'utente durante le chiamate e la registrazione video. Il microfono anteriore (superiore) si trova sul bordo superiore per i comandi vocali e un secondo canale nella registrazione stereo.
Il microfono posteriore (retro) viene solitamente posizionato vicino alla fotocamera sul pannello posteriore e viene utilizzato esclusivamente per la cancellazione del rumore. Il suo segnale non viene registrato nel file audio — viene solo sottratto dal processore digitale dal segnale del microfono principale. In alcuni flagship (iPhone 16 Pro, Samsung Galaxy S25), viene installato un quarto microfono — nel notch della fotocamera frontale per migliorare la registrazione durante le videochiamate.
La registrazione video stereo viene realizzata attraverso una combinazione dei microfoni inferiore e superiore. iOS seleziona automaticamente la coppia di microfoni in base all'orientamento del dispositivo — in modalità orizzontale, il canale sinistro proviene dal bordo sinistro, il destro dal bordo destro. Su Android, questa logica dipende dall'implementazione del produttore OEM e può differire tra i modelli.
val recorder = AudioRecord(
MediaRecorder.AudioSource.CAMCORDER,
44100,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT,
bufferSize
)
recorder.startRecording()
val buffer = ShortArray(bufferSize)
while (recorder.recordingState == AudioRecord.RECORDSTATE_RECORDING) {
recorder.read(buffer, 0, buffer.size)
// Elaborazione buffer PCM
}
AudioSource.CAMCORDER seleziona il microfono ottimale per la registrazione video — solitamente il microfono principale inferiore con controllo automatico del guadagno. Per la registrazione vocale, viene utilizzato VOICE_RECOGNITION — questa sorgente disabilita tutti i filtri e la cancellazione del rumore per un segnale pulito per il riconoscimento vocale.
La cancellazione attiva del rumore (ANC) negli smartphone si basa sul metodo differenziale: un secondo microfono (di riferimento) registra principalmente il rumore di fondo, mentre il microfono principale cattura una miscela di voce e rumore. Un processore di segnale digitale (DSP) sottrae il segnale di riferimento da quello principale, lasciando solo la voce pulita.
La qualità della cancellazione del rumore dipende dalla distanza tra i microfoni e dalla loro direttività. La soppressione tipica del rumore uniforme (aereo, ventilatore) è di 20–35 dB. Per i rumori impulsivi (chiusura di porta, urto di stoviglie), viene utilizzato un blocco aggiuntivo di soppressione dei transitori che sostituisce il segmento distorto con un segnale approssimato dai campioni vicini.
Gli sviluppatori possono influenzare gli algoritmi di cancellazione del rumore solo attraverso i parametri della sessione audio: su Android — AudioManager.setParameters("noise_suppression=on/off"), su iOS — categoria AVAudioSession .playAndRecord con opzione .allowBluetoothA2DP. Durante la registrazione per il riconoscimento, la cancellazione del rumore viene solitamente disattivata — gli algoritmi STT funzionano più accuratamente con il segnale originale.
AudioRecord (Android) è un'API di basso livello per la registrazione diretta di dati PCM dal microfono. L'applicazione riceve buffer con dati audio grezzi che possono essere elaborati in tempo reale: analisi del volume, analisi di frequenza (FFT), VAD (Voice Activity Detection). Il buffer minimo viene calcolato tramite AudioRecord.getMinBufferSize() — l'uso di una dimensione inferiore causa ritardi o errori di registrazione.
AVAudioEngine (iOS) è un grafo modulare di elaborazione audio in cui il nodo di ingresso (AVAudioInputNode) si collega al mixer principale o direttamente a un gestore tap. Il motore consente l'analisi in tempo reale di RMS (Root Mean Square) — un indicatore del volume del segnale — e dello spettro di frequenza tramite AVAudioUnitEQ.
Differenze chiave tra le piattaforme: su iOS, la registrazione richiede l'attivazione obbligatoria di AVAudioSession con categoria .playAndRecord o .record; su Android, sono necessari l'autorizzazione RECORD_AUDIO (autorizzazione runtime) e una sorgente audio microfono. Flutter utilizza il plugin record per astrarre queste differenze.
import AVFoundation
let engine = AVAudioEngine()
let inputNode = engine.inputNode
let format = inputNode.outputFormat(forBus: 0)
inputNode.installTap(onBus: 0, bufferSize: 1024,
format: format) { buffer, time in
guard let channelData = buffer.floatChannelData else { return }
let frameLength = Int(buffer.frameLength)
var sumSquares: Float = 0
for i in 0..<frameLength {
sumSquares += channelData[0][i] * channelData[0][i]
}
let rms = sqrt(sumSquares / Float(frameLength))
print("Volume RMS: \(rms)")
}
try engine.start()
Il codice imposta un tap sul nodo di ingresso di AVAudioEngine. Ogni buffer audio contiene dati float del segnale monofonico dal microfono. L'RMS viene calcolato come radice quadrata media dell'ampiezza — un indicatore standard del volume sonoro nell'intervallo da 0,0 (silenzio) a ~0,5–1,0 (voce alta).
Parametri chiave vengono utilizzati per valutare la qualità del microfono. SNR (Signal-to-Noise Ratio) è il rapporto tra il livello del segnale e il rumore proprio del microfono, misurato in dBA. Più alto è l'SNR, più silenzioso è il rumore di fondo nella registrazione. Per le chiamate vocali, 62–64 dBA sono sufficienti; per la registrazione musicale, sono necessari 68+ dBA.
AOP (Acoustic Overload Point) è il livello massimo di pressione sonora (SPL) che un microfono può convertire senza clipping. Per un microfono MEMS tipico, AOP = 125 dB. Ai concerti (110–120 dB), la registrazione sarà pulita, ma a 130+ dB (fuochi d'artificio vicini), apparirà distorsione non lineare (THD > 10%).
La gamma di frequenza determina quali frequenze il microfono registra senza attenuazione. Per la voce, 300–3400 Hz (standard telefonico, POTS) è sufficiente. Per musica e video — 20–20000 Hz. I microfoni MEMS negli smartphone di ultima generazione (Knowles SPH9855) forniscono una gamma di 30–18000 Hz con una planarità di ±3 dB.
Domande frequenti
Gli smartphone moderni contengono da 3 a 4 microfoni: principale (bordo inferiore, per chiamate e registrazione video), anteriore (bordo superiore, comandi vocali), posteriore (pannello posteriore, cancellazione del rumore). I flagship (iPhone 16 Pro, Galaxy S25) aggiungono un quarto microfono vicino alla fotocamera frontale per migliorare la registrazione durante le videochiamate.
Su Android — richiedere l'autorizzazione runtime RECORD_AUDIO e utilizzare AudioRecord o MediaRecorder. Su iOS — attivare AVAudioSession con categoria .playAndRecord e utilizzare AVAudioEngine o AVAudioRecorder. Entrambe le piattaforme richiedono il consenso esplicito dell'utente tramite un dialogo di sistema.
SNR (Signal-to-Noise Ratio) è il rapporto tra il segnale utile e il rumore proprio del microfono. Un valore di 64 dBA significa che durante la registrazione vocale, il livello di rumore sarà 64 dB al di sotto del livello della voce. Un SNR di 62–64 dBA è considerato buono per le chiamate e 68+ dBA per la registrazione musicale.
Ragioni tipiche: l'autorizzazione runtime RECORD_AUDIO non è stata richiesta (Android 6+); non è stato specificato AudioSource (ad esempio, CAMCORDER invece di VOICE_RECOGNITION); il dispositivo non ha microfono (Android TV); un altro processo ha già catturato il microfono. Verificare lo stato di inizializzazione tramite AudioRecord.getState().
Su Android — ottenere un buffer PCM tramite AudioRecord.read(), calcolare l'RMS come sqrt(sum(campioni²) / count). Su iOS — impostare un tap su AVAudioInputNode tramite installTap(forBus:) e calcolare similarmente l'RMS da floatChannelData. L'RMS è normalizzato: 0,0 (silenzio) a circa 1,0 (massimo ADC).
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche