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 riportata di seguito descrive il funzionamento di queste codifiche in relazione all'API Speech-to-Text.

Per linee guida sulla scelta della codifica migliore per la tua applicazione, consulta 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 forniti qui hanno solo lo scopo di fornire una panoramica generale. Alcune di queste informazioni di base possono essere utili per comprendere il funzionamento dell'API e come l'audio deve essere formulato ed elaborato nelle tue applicazioni.

Formati audio e codifiche

Tieni presente che un formato audio non è equivalente a una codifica audio. Un formato di file popolare come .WAV, ad esempio, 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 un file .WAV abbia una codifica particolare finché non ne ispezioni l'intestazione.

FLAC, tuttavia, è sia un formato file che una codifica, il che a volte porta a confusione. Un file FLAC deve contenere la frequenza di campionamento nell'intestazione FLAC per poter 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 dati audio senza intestazione. Quando facciamo riferimento a FLAC all'interno dell'API Speech-to-Text, ci riferiamo sempre al codec. Quando facciamo riferimento a 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 per Speech-to-Text

L'API Speech-to-Text supporta diverse codifiche. Nella tabella che segue sono elencati i codec audio supportati:

Codec Nome Senza perdita di dati Note sull'utilizzo
MP3 MPEG Audio Layer III No La codifica MP3 è una funzionalità beta disponibile solo nella versione v1p1beta1. Per informazioni dettagliate, consulta la documentazione di riferimento di RecognitionConfig.
FLAC Codec audio senza perdita di dati 16 bit o 24 bit obbligatori per gli stream
LINEAR16 PCM lineare Codifica PCM (Pulse-Code Modulation) lineare a 16 bit. L'intestazione deve contenere la frequenza di campionamento.
MULAW Legge di μ No Codifica PCM a 8 bit
AMR Narrowband multi-rate adattivo No La frequenza di campionamento deve essere 8000 Hz
AMR_WB Adaptive Multi-Rate Wideband No La frequenza di campionamento deve essere 16000 Hz
OGG_OPUS Frame audio codificati in Opus in un contenitore 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 wideband No La frequenza di campionamento deve essere 16000 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 saperne di più sui codec audio di Speech-to-Text, consulta la documentazione di riferimento di AudioEncoding.

Se hai la possibilità di scegliere la codifica del materiale di origine, utilizza una codifica senza perdita di dati come FLAC o LINEAR16 per un riconoscimento vocale migliore. Per 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 diverse frequenze e ampiezze. Per rappresentare queste forme d'onda nei media digitali, le forme d'onda devono essere campionate a frequenze che possono rappresentare (almeno) i suoni della frequenza più elevata che vuoi riprodurre e devono anche memorizzare una profondità di bit sufficiente per rappresentare la corretta ampiezza (intensità e dolcezza) delle forme d'onda nel campione audio.

La capacità di un dispositivo di elaborazione audio di ricreare le frequenze è nota come risposta in frequenza, mentre la sua capacità di creare un volume e una dolcezza adeguati è nota come gamma dinamica. Insieme, questi termini sono spesso indicati come fedeltà di un dispositivo audio. Una codifica, nella sua forma più semplice, è un mezzo per ricostruire il suono utilizzando questi due principi di base, nonché per archiviare e trasportare questi dati in modo efficiente.

Frequenze di campionamento

Il suono esiste sotto forma di forma d'onda analogica. Un segmento di audio digitale approssima questa onda analogica campionando l'ampiezza di questa onda analogica a una frequenza sufficientemente elevata da imitare le frequenze intrinseche dell'onda. La frequenza di campionamento di un segmento audio digitale specifica il numero di campioni da acquisire dal materiale di origine audio (al secondo); una frequenza di campionamento elevata aumenta la capacità dell'audio digitale di rappresentare fedelmente le frequenze elevate.

Come conseguenza del teorema di Nyquist-Shannon, in genere è necessario campionare più del doppio della frequenza più alta di qualsiasi ampiezza di suono che vuoi acquisire digitalmente. Ad esempio, per rappresentare l'audio nell'intervallo di frequenza udibile dall'orecchio umano (20-20000 Hz), un formato audio digitale deve campionare almeno 40000 volte al secondo (questo è uno dei motivi per cui l'audio dei CD utilizza una frequenza di campionamento di 44100 Hz).

Profondità di bit

La profondità di bit influisce sulla gamma dinamica di un determinato campione audio. Una profondità di bit più elevata consente di rappresentare ampiezze più precise. Se hai molti suoni forti e deboli nello stesso sample audio, avrai bisogno di una maggiore profondità di bit per rappresentarli correttamente.

Profondità di bit più elevate riducono anche il rapporto segnale/rumore all'interno dei sample audio. L'audio musicale dei CD viene fornito con una profondità di 16 bit. L'audio DVD utilizza 24 bit di profondità di bit, mentre la maggior parte delle apparecchiature di telefonia utilizza 8 bit di profondità di bit. Alcune tecniche di compressione possono compensare profondità di bit inferiori, ma tendono a essere con perdita di dati.

Audio non compresso

La maggior parte dell'elaborazione audio digitale utilizza queste due tecniche, ovvero la frequenza di campionamento e la profondità di bit, per archiviare i dati audio in modo semplice. Una delle tecniche di audio digitale più diffuse (resa popolare dall'uso del 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.

Il PCM lineare (che indica che la risposta in termini di ampiezza è uniformemente lineare nel campione) è lo standard utilizzato nei CD e nella codifica LINEAR16 dell'API Speech-to-Text. Entrambe le codifiche producono uno stream non compresso di byte corrispondente direttamente ai dati audio e entrambi gli standard contengono 16 bit di profondità. Il PCM lineare utilizza una frequenza di campionamento di 44.100 Hz nei CD,che è appropriata per la ricomposizione della musica. Tuttavia, una frequenza di campionamento di 16000 Hz è più appropriata per la ricomposizione della voce.

Il PCM lineare (LINEAR16) è un esempio di audio non compresso in quanto i dati digitali vengono archiviati esattamente come implicano gli standard precedenti. Se leggi un flusso di byte monocanale codificato utilizzando PCM lineare, puoi contare ogni 16 bit (2 byte), ad esempio, per ottenere un altro valore di ampiezza dell'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 memorizzare l'audio digitale. Per questo motivo, la maggior parte dell'audio utilizza tecniche di compressione digitale.

Audio compresso

I dati audio, come tutti i dati, vengono spesso compressi per facilitarne 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 scompattata per ripristinare i dati digitali nella 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 concedere alla tecnica di compressione per rimuovere i dati.

Compressione senza perdita di dati

La compressione senza perdita di dati comprime i dati audio digitali utilizzando riordinamenti complessi degli stessi, ma non comporta alcun degrado della qualità del campione digitale originale. Con la compressione senza perdita di dati, quando i dati vengono decompressi nella forma digitale originale, non viene persa alcuna informazione.

Perché allora le tecniche di compressione senza perdita di dati a volte hanno parametri di ottimizzazione? Spesso questi parametri scambiano le dimensioni del file per il tempo di decompressione. Ad esempio, FLAC utilizza un parametro di livello di compressione da 0 (più veloce) a 8 (dimensioni file più piccole). La compressione FLAC di livello superiore non perde alcuna informazione rispetto alla compressione di livello inferiore. L'algoritmo di compressione dovrà solo spendere più energia di calcolo durante la costruzione o la decostruzione 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 è prevista alcuna compressione. Se le dimensioni del file o la trasmissione dei dati sono importanti per te, scegli FLAC come codifica audio.

Compressione con perdita di dati

La compressione con perdita, 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, anche se dovresti evitarli se hai il controllo sull'audio, perché la perdita di dati potrebbe influire sull'accuratezza 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 dell'intervallo audio di una persona normale e regolano la quantità di compressione modificando il bitrate effettivo del codec MP3, ovvero la quantità di bit al secondo per memorizzare i dati audio.

Ad esempio, un CD stereo che utilizza PCM lineare a 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 questi dati digitali utilizzando velocità in bit come 320 kbps, 128 kbps o 96 kbps, ad esempio, con un conseguente peggioramento della qualità audio. L'MP3 supporta anche le velocità in bit variabili, che possono comprimere ulteriormente l'audio. Entrambe le tecniche perdono informazioni e possono influire sulla qualità. La maggior parte delle persone, ad esempio, riesce a distinguere la differenza tra musica MP3 codificata a 96 Kbps o 128 Kbps.

Altre forme di compressione parametrizzano un altro vincolo.

MULAW è una codifica PCM di 8 bit, in cui l'ampiezza del campione è modulata in modo logaritmico anziché lineare. Di conseguenza, uLaw riduce l'intervallo dinamico effettivo dell'audio così compresso. Sebbene uLaw sia stato introdotto per ottimizzare specificamente la codifica della voce rispetto ad altri tipi di audio, LINEAR16 a 16 bit (PCM non compresso) è ancora di gran lunga superiore all'audio compresso 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 sull'audio di origine. Sebbene la rimozione di questi dati tramite compressione con perdita non possa influire in modo significativo sull'audio ascoltato dall'orecchio umano, la perdita di questi dati per un motore di riconoscimento vocale può ridurre notevolmente l'accuratezza.