Una 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 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 sono intesi solo come 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 equivale a una codifica audio. Un formato di file
diffuso 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 esamini 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 di 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, allora Speech-to-Text restituisce un errore.
Codifiche audio supportate per Speech-to-Text
L'API Speech-to-Text supporta diversi tipi di codifica. La tabella seguente elenca i codec audio supportati:
Codec | Nome | Senza perdita | Note sull'utilizzo |
---|---|---|---|
MP3 |
MPEG Audio Layer III | No | La codifica MP3 è una funzionalità beta e disponibile solo nella versione v1p1beta1. Per informazioni dettagliate, consulta la documentazione di riferimento di RecognitionConfig . |
FLAC |
Codec audio senza perdita di dati | Sì | 16 bit o 24 bit richiesti per gli stream |
LINEAR16 |
PCM lineare | Sì | Codifica PCM (Pulse-Code Modulation) lineare a 16 bit. L'intestazione deve contenere la frequenza di campionamento. |
MULAW |
μ-law | No | Codifica PCM a 8 bit |
AMR |
Adaptive Multi-Rate Narrowband | No | La frequenza di campionamento deve essere di 8000 Hz |
AMR_WB |
Adaptive Multi-Rate Wideband | No | La frequenza di campionamento deve essere di 16.000 Hz |
OGG_OPUS |
Frame audio codificati con Opus in un container Ogg | No | La frequenza di campionamento deve essere 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 di 16.000 Hz |
WEBM_OPUS |
WebM Opus | No | La frequenza di campionamento deve essere 8000 Hz, 12000 Hz, 16000 Hz, 24000 Hz o 48000 Hz |
Per saperne di più sui codec audio 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 lossless
come FLAC
o LINEAR16
per un migliore riconoscimento vocale. Per linee guida sulla
selezione del codec appropriato per la tua attività, consulta
Best practice.
Perché codificare?
L'audio è costituito da forme d'onda, ovvero dalla sovrapposizione di onde di frequenze e ampiezze diverse. Per rappresentare queste forme d'onda all'interno dei media digitali, devono essere campionate a velocità che possano (almeno) rappresentare i suoni della frequenza più alta che vuoi replicare e devono anche memorizzare una profondità di bit sufficiente a rappresentare l'ampiezza corretta (volume alto e basso) delle forme d'onda nel 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 un volume e una morbidezza adeguati è nota come gamma dinamica. Questi termini vengono spesso indicati come 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, nonché per archiviare e trasportare questi dati in modo efficiente.
Frequenze di campionamento
Il suono esiste come forma d'onda analogica. Un segmento di audio digitale approssima questa onda analogica campionando l'ampiezza di questa onda analogica a una velocità sufficientemente elevata 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 è necessario campionare più del doppio della frequenza più alta di qualsiasi onda sonora che vuoi acquisire digitalmente. Per rappresentare l'audio nell'intervallo dell'udito umano (20-20.000 Hz), ad esempio, un formato audio digitale deve campionare almeno 40.000 volte al secondo (che è uno dei motivi per cui l'audio del CD utilizza una frequenza di campionamento di 44.100 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 in uno stesso campione audio sono presenti molti suoni forti e deboli, 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 campioni audio. L'audio musicale del CD viene fornito utilizzando 16 bit di profondità di bit. DVD Audio utilizza 24 bit di profondità di bit, mentre la maggior parte delle apparecchiature telefoniche utilizza 8 bit di profondità di bit. (Alcune tecniche di compressione possono compensare profondità di bit più piccole, 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 archiviare i dati audio in modo semplice. Una delle tecniche di audio digitale più diffuse (rese popolari 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à di bit del campione.
Linear PCM (che indica che la risposta di ampiezza è uniformemente
lineare nel campione) è lo standard utilizzato nei CD e nella codifica
LINEAR16
dell'API Speech-to-Text. Entrambe le codifiche producono un flusso di byte non compresso
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,che è
adatta alla ricomposizione della musica; tuttavia, una frequenza di campionamento di 16.000 Hz è
più adatta alla ricomposizione del parlato.
PCM lineare (LINEAR16
) è un esempio di audio non compresso in quanto i dati digitali vengono archiviati esattamente come implicano gli standard sopra indicati. Leggendo un
flusso di byte a un canale codificato utilizzando 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 possono manipolare questi dati digitali in modo nativo. Puoi
persino ritagliare i file audio PCM lineare 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. La compressione lossless può essere decompressa per ripristinare i dati digitali nella loro forma originale. La compressione con perdita di dati rimuove necessariamente alcune informazioni durante la compressione e la decompressione ed è parametrizzata per indicare la tolleranza da concedere alla tecnica di compressione per rimuovere i dati.
Compressione lossless
La compressione lossless comprime i dati audio digitali utilizzando riarrangiamenti complessi dei dati archiviati, ma non comporta un peggioramento della qualità del campione digitale originale. Con la compressione senza perdita, quando i dati vengono decompressi nella loro forma digitale originale, non vengono perse informazioni.
Allora perché le tecniche di compressione lossless 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ù veloce) a 8
(dimensioni file più piccole). La compressione FLAC di livello superiore non comporta la perdita di informazioni
rispetto alla compressione di livello inferiore. L'algoritmo di compressione
dovrà invece consumare più energia di calcolo durante la costruzione o
la decostruzione dell'audio digitale originale.
L'API Speech-to-Text supporta due codifiche lossless: FLAC
e LINEAR16
.
Tecnicamente, LINEAR16
non è una "compressione lossless" 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
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, anche se dovresti evitarli se hai il controllo dell'audio, perché la perdita di dati potrebbe influire sull'accuratezza del riconoscimento.
Il popolare codec MP3 è un esempio di tecnica di codifica con perdita. Tutte le tecniche di compressione MP3 rimuovono l'audio al di fuori della normale gamma audio umana e regolano la quantità di compressione modificando il bitrate effettivo del codec MP3, ovvero la quantità di bit al secondo per archiviare la data audio.
Ad esempio, un CD stereo che utilizza Linear PCM a 16 bit ha un velocità in bit effettivo 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 conseguente degrado della qualità audio. MP3 supporta anche bit rate variabili, che possono comprimere ulteriormente l'audio. Entrambe le tecniche perdono informazioni e possono influire sulla qualità. La maggior parte delle persone riesce a distinguere la differenza tra musica MP3 codificata a 96 kbps o 128 kbps, ad esempio.
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 la gamma dinamica effettiva dell'audio
così compresso. Sebbene uLaw sia stato introdotto per ottimizzare specificamente la codifica del parlato rispetto ad altri tipi di audio, LINEAR16
(PCM non compresso) a 16 bit è 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 nel campione audio sorgente.
Sebbene l'API Speech-to-Text supporti diversi formati con perdita, dovresti evitarli se hai il controllo sull'audio sorgente. Sebbene la rimozione di questi dati tramite la compressione con perdita non influisca in modo evidente sull'audio percepito dall'orecchio umano, la perdita di questi dati per un motore di riconoscimento vocale può ridurre significativamente l'accuratezza.