Introduzione alla codifica audio

La codifica audio fa riferimento al modo in cui i dati audio vengono archiviati e trasmessi. La documentazione di seguito descrive come funzionano queste codifiche. Per le linee guida sulla scelta della migliore codifica 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. 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 dovrebbe 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 popolare 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 esamini l'intestazione.

Configurazione di decodifica

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

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

Altrimenti, devi specificare esplicitamente i parametri di decodifica impostando il campo explicit_decoding_config. Questi parametri sono generalmente reperibili nelle impostazioni utilizzate per registrare l'audio.

Perché codificare?

L'audio è composto da forme d'onda, composte dall'interposizione di onde di frequenze e ampiezze diverse. Per rappresentare queste forme d'onda all'interno di supporti digitali, le forme d'onda devono essere campionate a velocità che possano rappresentare almeno i suoni alla frequenza più alta che vuoi replicare. Inoltre, devono archiviare una profondità di bit sufficiente a rappresentare l'ampiezza (rumore e morbidezza) adeguata 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 morbidezza appropriati è nota come intervallo dinamico. Questi termini insieme vengono spesso definiti la fedeltà di un dispositivo audio. Nella sua forma più semplice, la codifica è un mezzo con cui ricostruire il suono seguendo questi due principi di base, oltre a essere in grado di archiviare e trasportare questi 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à sufficientemente 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 Nyquist-Shannon, in genere devi campionare più del doppio della frequenza più alta di qualsiasi onda sonora che vuoi acquisire digitalmente. Per rappresentare l'audio nella portata dell'udito umano (20-20.000 Hz), ad esempio, un formato audio digitale deve campionare almeno 40.000 volte al secondo (e questo è uno dei motivi per cui l'audio dei CD utilizza una frequenza di campionamento di 44100 Hz).

Profondità di bit

La profondità in bit influisce sull'intervallo dinamico di un determinato campione audio. Una maggiore profondità di bit consente di rappresentare ampiezze più precise. Se nello stesso campione audio sono presenti molti suoni forti e delicati, avrai bisogno di una profondità maggiore per rappresentarli correttamente.

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

Audio non compresso

La maggior parte dell'elaborazione audio digitale utilizza queste due tecniche (frequenza di campionamento e profondità di bit) per memorizzare i dati audio in modo semplice. Una delle tecniche audio digitali più diffuse (popolare nell'uso dei Compact Disc) è nota come Pulse Code Modulation (o PCM). L'audio viene campionato a intervalli impostati 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 è linearmente uniforme 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 corrispondente direttamente ai dati audio e entrambi gli standard contengono 16 bit di profondità. La 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 è 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 utilizzando 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 sono in grado di 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 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 o con perdita di dati. La compressione senza perdita di dati può essere decompressa per ripristinare la forma originale dei dati digitali. La compressione con perdita di dati rimuove necessariamente alcune di queste informazioni durante la compressione e la decompressione ed è parametrizzata per indicare l'entità della tolleranza da applicare 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 riorganizzazioni complesse dei dati archiviati, ma non comporta alcuna degradazione della qualità del campione digitale originale. Con la compressione senza perdita di dati, quando si decomprime i dati nel formato digitale originale, le informazioni non andranno perse.

Allora perché le tecniche di compressione senza perdita di dati a volte 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ù rapido) a 8 (dimensione di file minima). Una compressione FLAC di livello superiore non comporta la perdita di informazioni rispetto a una compressione di livello inferiore. Invece, l'algoritmo di compressione dovrà solo spendere più energia di calcolo per la creazione o la scomposizione 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 per te la trasmissione dei dati o la dimensione del file è importante, 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 degli MP3 rimuovono l'audio dal 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 di:

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

La compressione MP3 rimuove, ad esempio, i dati digitali utilizzando velocità in bit quali 320, 128 o 96 kbps, con conseguente peggioramento della qualità audio. Gli MP3 supportano 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 degli utenti è in grado di rilevare la differenza tra la musica MP3 codificata a 96 kbps o a 128 kbps.

Altre forme di compressione parametrizzano altri vincoli.

MULAW è una codifica PCM a 8 bit in cui l'ampiezza del campione viene modulata logaritmicamente anziché in modo 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, il 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 sull'audio di origine. Sebbene la rimozione di questi dati tramite compressione con perdita di dati possa non influire notevolmente sull'audio rilevato dall'orecchio umano, la perdita di questi dati tramite un motore di riconoscimento vocale può ridurre significativamente la precisione.