Introduzione alla codifica audio

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. Per 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 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.

Decodifica configurazione

I parametri necessari per decodificare l'audio trasmesso sono specificati in decoding_config oneof.

Se l'audio è in uno dei formati supportati da AutoDetectDecodingConfig ti consigliamo vivamente di impostare il auto_decoding_config campo per consentire a Speech-to-Text di determinare i parametri corretti per te.

In caso contrario, devi specificare esplicitamente i parametri di decodifica impostando il campo explicit_decoding_config. In genere, questi parametri si trovano esaminando le impostazioni utilizzate per registrare l'audio.

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, devono essere campionate a frequenze che possano (almeno) rappresentare i suoni della frequenza più alta che vuoi replicare e devono anche memorizzare una profondità di bit sufficiente per rappresentare l'ampiezza corretta (intensità e dolcezza) delle forme d'onda nel campione audio.

La capacità di un dispositivo di elaborazione del suono di ricreare le frequenze è nota come risposta in frequenza, mentre la sua capacità di creare un livello di volume e una morbidezza 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 analoga campionando l'ampiezza di questa onda analoga 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 all'interno dello stesso sample audio sono presenti molti suoni forti e silenziosi, 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. DVD Audio utilizza una profondità di 24 bit, mentre la maggior parte delle apparecchiature di telefonia utilizza una profondità di 8 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 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 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 è un esempio di audio non compresso in quanto i dati digitali vengono memorizzati esattamente come implicano gli standard precedenti. Se leggi uno stream 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 un normale essere umano e regolano la quantità di compressione modificando il bitrate effettivo del codec MP3 o 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.