Cosa e come è la codifica di un file audio grezzo (senza intestazione)?


8

Ho fatto questo:

me@riverbrain:~/sgf$ echo "test" | text2wave -otype raw -F 16000 >> test.raw

che ha prodotto un file audio senza intestazione. La cosa meravigliosa di questo file è che può essere concatenato (usando cat, come il testo) con un altro file audio non elaborato.

Certo, ho un problema. Il problema è che non posso ancora giocarci.

me@riverbrain:~/sgf$ play test.raw 

play FAIL formats: bad input format for file `test.raw': sampling rate was not specified

e anche, quando si specifica la frequenza di campionamento

me@riverbrain:~/sgf$ play -r 16000 test.raw 
play FAIL formats: bad input format for file `test.raw': data encoding was not specified

Quando ho cercato alcune informazioni sulla "codifica" ho avuto la sensazione che avesse molto a che fare con l'architettura del tuo processore, ma forse mi sbaglio. Ad ogni modo, non riesco a trovare alcuna documentazione su come "chiedere" al computer quale sia la codifica dei dati del file audio non elaborato. E so anche qual è la frequenza di campionamento, a causa della mia impostazione, ma è quanto posso ottenere.


2
Non esiste un formato raw standard. Devi scoprire quali parametri ha usato l'applicazione che l'ha prodotta. Sfortunatamente, non è sempre ben documentato.
Gilles 'SO- smetti di essere malvagio' il

Risposte:


8

Può variare, ma almeno per me text2wave produce PCM interi con segno a 1 canale, 16 bit. Questi sono abbastanza normali — e sarà molto chiaro quando li hai corretti (ad esempio, se per errore hai un intero senza segno, otterrai un suono estremamente distorto)

Con il gioco, sembra che:

play -r 16000 -b 16 -c 1 -e signed-integer /tmp/foo.raw
play -r 16000 -2 -s -c 1 /tmp/foo.raw # obsolete way for older versions of Sox

Sospetto che questi parametri siano configurati in Festival da qualche parte. Alcuni di essi possono anche essere codificati.

L'unica cosa dipendente dall'architettura che potresti incontrare è big vs. little endian; sulla mia macchina little-endian Festival sta scrivendo little-endian; se avessi spostato quel file su una macchina big-endian probabilmente avrei bisogno di aggiungerlo -L. Se text2wavfossero eseguiti su una macchina big-endian, non sono sicuro che scriverebbe dati big o little-endian.


grazie. tutte queste risposte sono state fantastiche, ma questa è la soluzione che ho finito per usare.
ixtmixilix,

2

Probabilmente puoi creare la tua intestazione RIFF. Un po 'di bashing dovrebbe farlo ... e basta gettare l'intestazione sugli altri tuoi pezzi ...

Questo collegamento mostra il layout dell'intestazione: il formato di file WAVE canonico

Esiste anche un collegamento correlato su SO: conversione di dati audio RAW in WAV con scripting , ma le risposte di mplayer / mencoder hanno un conteggio di markup pari a zero. Tuttavia, sostiene che SoX funzioni .

SoX viene menzionato in entrambi i collegamenti precedenti ed è disponibile nel repository di Ubuntu; Suppongo che lo sia anche negli altri.

PS ... ho appena provato a usare play(non sapevo che esistesse) e ho scoperto che è SoX! ... Il link SO fornisce un esempio, copiato qui:sox -r 44100 -e unsigned -b 8 -c 1 <RAW_FILE> <TARGET_FILE>

Se non riesci a farlo funzionare con Sox , forse mplayer / mencoder o l'intestazione RIFF lo faranno funzionare per te.


2

Utilizzare aplayinvece di playriprodurre un file non elaborato, in questo modo è possibile specificare che è un audio non elaborato mediante l'opzione -t:

aplay -q -c 2 -t raw -f s16 test.raw
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.