Una codifica audio si riferisce al modo in cui i dati audio vengono memorizzati e trasmessi. La seguente documentazione descrive il funzionamento di queste codifiche. Per le linee guida su come scegliere la codifica migliore per la tua applicazione, consulta le best practice.
La codifica dell'audio digitale è un argomento complesso e in genere non è necessario conoscere i dettagli per elaborare l'audio all'interno dell'API Speech. Le nozioni fornite qui sono da intendersi solo come panoramica generale. Alcune di queste informazioni di base potrebbero essere utili per capire come funziona l'API e come formulare ed elaborare l'audio nelle tue applicazioni.
Formati audio e codifiche
Tieni presente che un formato audio non equivale a una codifica audio. Ad esempio, un formato file popolare come .WAV
definisce il formato dell'intestazione di un file audio, ma non è una codifica audio. I file audio .WAV
spesso, ma non
sempre, utilizzano una codifica PCM lineare. Non dare per scontato che il file .WAV
abbia una determinata
codifica finché non controlli l'intestazione.
FLAC
, tuttavia, è sia un formato file sia una codifica, che a volte genera confusione. Un file FLAC
deve contenere la frequenza di campionamento nell'intestazione FLAC
per essere inviato all'API Speech-to-Text. FLAC
è l'unica codifica che richiede che i dati audio includano un'intestazione; tutte le altre codifiche audio specificano i dati audio senza intestazione. Quando parliamo di FLAC
nell'API Speech-to-Text, facciamo sempre riferimento al codec. Quando parliamo di un formato file FLAC, utilizzeremo il formato "un file .FLAC
".
Non è necessario specificare la codifica e la frequenza di campionamento per i file WAV o FLAC. Se omesso, Speech-to-Text determina automaticamente la codifica e la frequenza di campionamento per i file WAV o FLAC in base all'intestazione del file. Se specifichi un valore di codifica o frequenza di campionamento che non corrisponde al valore nell'intestazione del file, Speech-to-Text restituisce un errore.
Codifiche audio supportate
L'API Speech-to-Text supporta una serie di codifiche diverse. La seguente tabella elenca i codec audio supportati:
Codec | Nome | Senza perdita | Note sull'utilizzo |
---|---|---|---|
MP3 |
Livello audio MPEG III | No | La codifica MP3 è una funzionalità beta ed è disponibile solo in v1p1beta1. Per informazioni dettagliate, consulta la documentazione di riferimento di RecognitionConfig . |
FLAC |
Codec audio senza perdita di dati | Sì | Richiesto a 16 bit o 24 bit per gli stream |
LINEAR16 |
PCM lineare | Sì | Codifica di modulazione di codice a impulsi (PCM) lineare a 16 bit. L'intestazione deve contenere la frequenza di campionamento. |
MULAW |
μ-law | No | Codifica PCM a 8 bit |
AMR |
Banda reattiva multi-adattiva | No | La frequenza di campionamento deve essere 8000 Hz |
AMR_WB |
Banda larga a banda multipla adattiva | No | La frequenza di campionamento deve essere 16.000 Hz |
OGG_OPUS |
Frame audio codificati in Opus in un container Ogg | No | La frequenza di campionamento deve essere compresa tra 8000 Hz, 12000 Hz, 16000 Hz, 24000 Hz o 48000 Hz |
SPEEX_WITH_HEADER_BYTE |
Banda larga Speex | No | La frequenza di campionamento deve essere 16.000 Hz |
WEBM_OPUS |
WebM Opus | No | La frequenza di campionamento deve essere compresa tra 8000 Hz, 12000 Hz, 16000 Hz, 24000 Hz o 48000 Hz |
Per ulteriori informazioni sui codec audio Speech-to-Text, consulta la documentazione di riferimento di AudioEncoding.
Se hai scelto di codificare il materiale di origine, usa una codifica senza perdita di dati, ad esempio FLAC
o LINEAR16
, per migliorare il riconoscimento vocale. Per le linee guida su come selezionare il codec appropriato per la tua attività, consulta le best practice.
Perché codificare?
L'audio è costituito da forme d'onda, costituite dall'interposizione di onde di frequenze e ampiezze diverse. Per rappresentare queste forme d'onda all'interno dei media digitali, le forme d'onda devono essere campionate a frequenze che possono (almeno) rappresentare la frequenza più alta che vuoi replicare; inoltre devono memorizzare una profondità di bit sufficiente per rappresentare l'ampiezza corretta (alto e morbidezza) delle forme d'onda sul campione audio.
La capacità di un dispositivo di elaborazione del suono di ricreare le frequenze è nota come reazione di frequenza e la sua capacità di creare un volume e una morbidezza adeguati è nota come gamma dinamica. Insieme, questi termini sono spesso definiti fedeltà di un dispositivo audio. Una codifica, nella sua forma più semplice, è un mezzo con cui ricostruire il suono utilizzando questi due principi di base e essere in grado di archiviare e trasferire tali dati in modo efficiente.
Frequenze di campionamento
Il suono esiste come forma d'onda analogica. Un segmento di audio digitale è simile a questa onda analogica campionando l'ampiezza di questa onda analogica a una frequenza sufficiente per imitare le frequenze intrinseche dell'onda. La frequenza di campionamento di un segmento audio digitale specifica il numero di campioni da estrarre dal materiale sorgente di un audio (al secondo); una frequenza di campionamento elevata aumenta la capacità dell'audio digitale di rappresentare fedelmente le frequenze elevate.
In conseguenza del teorema di Nyquist-Shannon, di solito devi campionare più del doppio della frequenza più alta di qualsiasi onda sonora che vuoi acquisire in digitale. Per rappresentare l'audio nell'intervallo di udito umano (20-20000 Hz), ad esempio, un formato audio digitale deve campionare almeno 40000 volte al secondo (che fa parte del motivo per cui l'audio CD utilizza una frequenza di campionamento di 44100 Hz).
Profondità in bit
La profondità in bit influisce sull'intervallo dinamico di un determinato campione audio. Una profondità di bit maggiore consente di rappresentare ampiezze più precise. Se hai molti suoni deboli e deboli all'interno dello stesso campione audio, avrai bisogno di una maggiore profondità per rappresentare correttamente tali suoni.
Profondità di bit più elevate riducono anche il rapporto segnale/rumore all'interno dei campioni audio. L'audio musicale del CD viene fornito utilizzando una profondità di bit di 16 bit. DVD Audio utilizza una profondità di bit di 24 bit, mentre la maggior parte delle apparecchiature di telefonia utilizza 8 bit di profondità. Alcune tecniche di compressione possono compensare le profondità di bit più ridotte, ma tendono a essere perse.
Audio non compresso
La maggior parte delle elaborazioni audio digitali utilizza queste due tecniche, la frequenza di campionamento e la profondità di bit, per archiviare i dati audio in modo diretto. Una delle tecniche audio digitali più popolari (popolate nell'uso del disco compatto) è nota come modulazione del codice a impulsi (o PCM). L'audio viene campionato a intervalli impostati e l'ampiezza dell'onda campionata viene memorizzata come valore digitale utilizzando la profondità in bit del campione.
Il parametro PCM lineare (che indica che la risposta dell'ampiezza è lineare in modo lineare nell'esempio) è lo standard utilizzato all'interno dei CD e all'interno della codifica LINEAR16
dell'API Speech-to-Text. Entrambe le codifiche producono uno stream non compresso di byte corrispondenti direttamente ai dati audio ed entrambi gli standard contengono 16 bit di profondità. La metrica PCM lineare utilizza una frequenza di campionamento di 44.100 Hz all'interno dei CD,il che è appropriata per la ricomposizione della musica; tuttavia, una frequenza di campionamento di 16.000 Hz è più appropriata per ricomporre il parlato.
Un PCM lineare (LINEAR16
) è un esempio di audio non compresso in quanto i dati digitali vengono archiviati esattamente come gli standard sopra indicati. Leggendo uno stream di byte a un canale codificato con PCM lineare, puoi contare ogni 16 bit (2 byte), ad esempio, per ottenere un altro valore di ampiezza della forma d'onda.
Quasi tutti i dispositivi sono in grado di manipolare in modo nativo tali dati digitali: puoi persino ritagliare i file audio PCM lineari utilizzando un editor di testo, ma (ovviamente) l'audio non compresso non è il modo più efficiente per trasferire o archiviare audio digitale. Per questo motivo, la maggior parte degli audio utilizza tecniche di compressione digitale.
Audio compresso
I dati audio, come tutti i dati, sono spesso compressi per semplificarne l'archiviazione e il trasferimento. La compressione all'interno della codifica audio può essere perdita o perdita. La compressione senza perdita di dati può essere decriptata per ripristinare i dati digitali nella loro forma originale. La compressione lenta rimuove necessariamente alcune di queste informazioni durante la compressione e la decompressione ed è parametrizzata per indicare il livello di tolleranza da concedere alla tecnica di compressione per rimuovere i dati.
Compressione senza perdita
La compressione senza perdita di dati comprime i dati audio digitali utilizzando riorganizzazioni complesse dei dati archiviati, ma la qualità del campione digitale originale non diminuisce. Con la compressione senza perdita di dati, quando discomprimi i dati nella loro forma digitale originale, non perderai alcuna informazione.
Perché le tecniche di compressione senza perdita di dati a volte hanno parametri di ottimizzazione? Questi parametri spesso scambiano le dimensioni del file con il tempo di decompressione. Ad esempio, FLAC
utilizza un parametro del livello di compressione da 0 (più rapido) a 8 (dimensione file più piccola). La compressione FLAC di livello superiore non perderà alcuna informazione rispetto alla compressione di livello inferiore. Al contrario, l'algoritmo di compressione dovrà solo consumare più energia di calcolo quando si costruisce o scompone l'audio digitale originale.
L'API Speech-to-Text supporta due codifiche senza perdita: FLAC
e LINEAR16
.
Tecnicamente, LINEAR16
non è una "compressione senza perdita di dati" perché non viene eseguita alcuna compressione in primo luogo. Se le dimensioni dei file o la trasmissione dei dati sono importanti per te, scegli FLAC
come scelta di codifica audio.
Compressione non soddisfacente
La compressione lenta, invece, comprime i dati audio eliminando o riducendo determinati tipi di informazioni durante la creazione dei dati compressi. L'API Speech-to-Text supporta diversi formati con perdita di dati, ma è meglio evitarli se hai il controllo dell'audio, perché la perdita di dati può influire sulla precisione del riconoscimento.
Il popolare codec MP3 è un esempio di tecnica di codifica con perdita di dati. Tutte le tecniche di compressione MP3 vengono rimosse dall'esterno dell'intervallo audio umano normale e regolano la quantità di compressione regolando la velocità in bit effettiva del codec MP3, o la quantità di bit al secondo per archiviare la data dell'audio.
Ad esempio, un CD stereo che utilizza un PCM lineare di 16 bit ha una velocità in bit effettiva di:
44100 * 2 channels * 16 bits = 1411200 bits per second (bps) = 1411 kbps
La compressione MP3 rimuove tali dati digitali utilizzando velocità in bit quali 320, 128 o 96 kbps, ad esempio con riduzione della qualità audio. MP3 supporta anche velocità in bit variabili, che possono comprimere ulteriormente l'audio. Entrambe le tecniche perdono informazioni e possono influire sulla qualità. Ad esempio, la maggior parte delle persone è in grado di rilevare la differenza tra 96 kbps o 128 kbps di musica MP3 codificata.
Altre forme di compressione parametrizzeranno altri vincoli.
MULAW è una codifica PCM a 8 bit in cui l'ampiezza del campione viene modulata in modo logaritmico anziché lineare. Di conseguenza, uLaw riduce l'intervallo dinamico effettivo dell'audio compresso. Sebbene ULaw sia stato introdotto per ottimizzare specificamente la codifica della voce in contrasto con altri tipi di audio, LINEAR16
a 16 bit (PCM non compresso) è comunque di gran lunga superiore all'audio compresso di uLaw a 8 bit.
AMR e AMR_WB modulano il campione audio codificato introducendo una velocità in bit variabile sul campione audio di origine.
Anche se l'API Speech-to-Text supporta diversi formati con perdita di dati, dovresti evitarli se hai il controllo sull'audio di origine. Sebbene la rimozione di tali dati attraverso una compressione perdita potrebbe non avere un impatto significativo sull'audio rilevato dall'orecchio umano, la perdita di tali dati da parte di un motore di riconoscimento vocale può ridurre significativamente la precisione.