Introduzione alla codifica audio per Speech-to-Text

La codifica audio si riferisce al modo in cui i dati audio vengono archiviati e trasmessi. La documentazione seguente descrive come funzionano queste codifiche in relazione all'API Speech-to-Text.

Per le linee guida sulla scelta della codifica migliore per la tua applicazione, consulta le best practice.

La codifica audio digitale è un argomento complesso e in genere non è necessario conoscere i dettagli per elaborare l'audio all'interno dell'API Speech. I concetti qui forniti hanno solo lo scopo di fornire una panoramica generale. Alcune di queste informazioni di base possono essere utili per capire come funziona l'API e come l'audio deve essere formulato ed elaborato nelle tue applicazioni.

Formati audio e codifiche

Tieni presente che un formato audio non equivale a una codifica audio. Un formato file molto utilizzato come .WAV, ad esempio, definisce il formato dell'intestazione di un file audio, ma non è di per sé una codifica audio. I file audio .WAV spesso, ma non sempre, utilizzano una codifica PCM lineare. Non dare per scontato che un file .WAV abbia una codifica particolare finché non ne controlli l'intestazione.

FLAC, tuttavia, è sia un formato file sia una codifica, il 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 i dati audio per includere un'intestazione; tutte le altre codifiche audio specificano dati audio senza intestazione. Quando facciamo riferimento a FLAC nell'API Speech-to-Text, facciamo sempre riferimento al codec. Quando facciamo riferimento a un formato file FLAC, utilizziamo 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 per Speech-to-Text

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 maggiori dettagli, consulta la documentazione di riferimento di RecognitionConfig.
FLAC Codec audio senza perdita di dati gratuito 16 bit o 24 bit obbligatoria per gli stream
LINEAR16 PCM lineare Codifica PCM (Linear Pulse-code Modulation) a 16 bit. L'intestazione deve contenere la frequenza di campionamento.
MULAW diritto-μ No Codifica PCM a 8 bit
AMR Banda stretta a più velocità adattiva No La frequenza di campionamento deve essere di 8000 Hz
AMR_WB Banda larga adattiva a più velocità No La frequenza di campionamento deve essere 16.000 Hz
OGG_OPUS Frame audio codificati Opus in un container Ogg No La frequenza di campionamento deve essere una delle seguenti: 8000 Hz, 12000 Hz, 16000 Hz, 24000 Hz o 48000 Hz
SPEEX_WITH_HEADER_BYTE Speex a banda larga No La frequenza di campionamento deve essere 16.000 Hz
WEBM_OPUS Opus WebM No La frequenza di campionamento deve essere una delle seguenti: 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 AudioEncoding.

Se puoi scegliere di codificare il materiale di origine, utilizza una codifica senza perdita di dati come FLAC o LINEAR16 per migliorare il riconoscimento vocale. Per le linee guida sulla selezione del codec appropriato per l'attività, consulta le best practice.

Perché codificare?

L'audio è costituito da forme d'onda, l'interposizione di onde di frequenze e ampiezze diverse. Per rappresentare queste forme d'onda nei media digitali, le forme d'onda devono essere campionate a velocità che possano (almeno) rappresentare i suoni con la frequenza più alta che intendi replicare. Devono inoltre memorizzare una profondità di bit sufficiente a rappresentare l'ampiezza (intensità e morbidezza) corretta delle forme d'onda sul campione sonoro.

La capacità di un dispositivo di elaborazione del suono di ricreare le frequenze è nota come risposta in frequenza, mentre la sua capacità di creare volume e volume adeguati è nota come intervallo dinamico. Insieme, questi termini vengono spesso denominati fedeltà di un dispositivo audio. Nella sua forma più semplice, la codifica è un mezzo con cui ricostruire il suono utilizzando questi due principi di base, oltre a essere in grado di archiviare e trasportare tali dati in modo efficiente.

Frequenze di campionamento

Il suono esiste come forma d'onda analogica. Un segmento di audio digitale si avvicina a questa onda analogica campionando l'ampiezza di questa onda analogica a una velocità abbastanza veloce da imitare le frequenze intrinseche dell'onda. La frequenza di campionamento di un segmento audio digitale specifica il numero di campioni da estrarre dal materiale di origine di un audio (al secondo); una frequenza di campionamento elevata aumenta la capacità dell'audio digitale di rappresentare fedelmente le alte frequenze.

Come conseguenza del teorema di Niquist-Shannon, di solito devi campionare più del doppio della frequenza più alta di qualsiasi onda sonora che vuoi acquisire digitalmente. Per rappresentare l'audio nel raggio d'azione dell'udito umano (20-20.000 Hz), ad esempio, un formato audio digitale deve campionare almeno 40.000 volte al secondo (questo è uno dei motivi per cui i CD audio utilizzano una frequenza di campionamento pari a 44.100 Hz).

Profondità di bit

La profondità di 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 forti e deboli nello stesso campione audio, avrai bisogno di una maggiore profondità di bit per rappresentare correttamente questi suoni.

Una profondità di bit maggiore riduce anche il rapporto segnale-rumore nei campioni audio. L'audio dei CD musicali viene fornito con 16 bit di profondità. L'audio dei DVD utilizza una profondità di 24 bit, mentre la maggior parte delle apparecchiature di telefonia utilizza una profondità di bit di 8 bit. (Alcune tecniche di compressione sono in grado di compensare piccole profondità di bit, ma tendono a generare perdite.)

Audio non compresso

La maggior parte dell'elaborazione dell'audio digitale utilizza queste due tecniche (frequenza di campionamento e profondità di bit) per memorizzare i dati audio in modo diretto. Una delle tecniche di audio digitale più popolari (molte apprezzate nell'uso dei Compact Disc) è nota come Pulse Code Modulation (o PCM). L'audio viene campionato a intervalli prestabiliti e l'ampiezza dell'onda campionata in quel punto viene memorizzata come valore digitale utilizzando la profondità in bit del campione.

PCM lineare (che indica che la risposta di ampiezza è lineare in tutto il campione) è lo standard utilizzato nei CD e all'interno della codifica LINEAR16 dell'API Speech-to-Text. Entrambe le codifiche producono un flusso non compresso di byte corrispondenti direttamente ai dati audio ed entrambi gli standard contengono 16 bit di profondità. Il PCM lineare utilizza una frequenza di campionamento di 44.100 Hz all'interno dei CD,appropriata per la ricomposizione della musica; tuttavia, una frequenza di campionamento di 16.000 Hz è più appropriata per la ricomposizione del parlato.

Il PCM lineare (LINEAR16) è un esempio di audio non compresso in cui i dati digitali vengono archiviati esattamente come implicano gli standard sopra indicati. Leggendo un flusso a un canale di byte codificati mediante PCM lineare, potresti conteggiare ogni 16 bit (2 byte), ad esempio per ottenere un altro valore di ampiezza della forma d'onda. Quasi tutti i dispositivi possono manipolare questi dati digitali in modo nativo; 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 trasportare o archiviare l'audio digitale. Per questo motivo, la maggior parte dei contenuti audio utilizza tecniche di compressione digitale.

Audio compresso

I dati audio, come tutti i dati, vengono spesso compressi per semplificarne l'archiviazione e il trasporto. La compressione all'interno della codifica audio può essere senza perdita di dati o con perdita di dati. La compressione senza perdita di dati può essere decompressa per ripristinare i dati digitali alla loro forma originale. La compressione con perdita di dati rimuove necessariamente alcune di queste informazioni durante la compressione e la decompressione ed è parametrizzata per indicare la tolleranza da assegnare alla tecnica di compressione per la rimozione dei dati.

Compressione senza perdita di dati

La compressione senza perdita di dati comprime i dati audio digitali utilizzando complessi riorganizzazioni dei dati archiviati, ma non riduce la qualità del campione digitale originale. Con la compressione senza perdita di dati, durante l'estrazione dei dati nel formato digitale originale, le informazioni non andranno perse.

Perché a volte le tecniche di compressione senza perdita di dati hanno parametri di ottimizzazione? Questi parametri spesso scambiano le dimensioni del file per il tempo di decompressione. Ad esempio, FLAC utilizza un parametro del livello di compressione da 0 (più veloce) a 8 (dimensione minima del file). Una compressione FLAC di livello superiore non comporta la perdita di informazioni rispetto a una compressione di livello inferiore. Al contrario, l'algoritmo di compressione dovrà solo spendere più energia di calcolo durante la creazione o la distruzione dell'audio digitale originale.

L'API Speech-to-Text supporta due codifiche senza perdita di dati: FLAC e LINEAR16. Tecnicamente, LINEAR16 non è una "compressione senza perdita di dati" perché non prevede alcuna compressione. Se le dimensioni del file o la trasmissione dei dati sono importanti per te, scegli FLAC come codifica audio.

Compressione con perdita

La compressione con perdita di dati, d'altra parte, comprime i dati audio eliminando o riducendo alcuni tipi di informazioni durante la creazione dei dati compressi. L'API Speech-to-Text supporta diversi formati con perdita di dati, ma dovresti evitarli se hai il controllo dell'audio, poiché la perdita di dati potrebbe 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 rimuovono l'audio al di fuori del normale intervallo audio umano e regolano la quantità di compressione regolando la velocità in bit effettiva del codec MP3 o la quantità di bit al secondo per memorizzare la data audio.

Ad esempio, un CD stereo che utilizza PCM lineare a 16 bit ha una velocità in bit effettiva pari a:

44100 * 2 channels * 16 bits = 1411200 bits per second (bps) = 1411 kbps

La compressione MP3 rimuove questi dati digitali utilizzando, ad esempio, velocità in bit come 320, 128 o 96 kbps, con un conseguente peggioramento 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 la musica MP3 codificata a 96 kbps o quella a 128 kbps.

Altre forme di compressione parametrizzano un altro vincolo.

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 stata introdotta per ottimizzare specificamente la codifica del parlato a differenza di altri tipi di audio, LINEAR16 (PCM non compresso) a 16 bit è 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.

Sebbene l'API Speech-to-Text supporti diversi formati con perdita di dati, dovresti evitarli se hai il controllo dell'audio di origine. Anche se la rimozione di questi dati tramite compressione con perdita di dati potrebbe non incidere in modo significativo sull'audio rilevato dall'orecchio umano, la perdita di questi dati verso un motore di riconoscimento vocale potrebbe ridurre significativamente la precisione.