Je l'ai fait:
me@riverbrain:~/sgf$ echo "test" | text2wave -otype raw -F 16000 >> test.raw
qui a produit un fichier audio sans en-tête. La chose merveilleuse à propos de ce fichier est qu'il peut être concaténé (en utilisant cat
, comme du texte) avec un autre fichier audio brut.
Bien sûr, j'ai un problème. Le problème est que je ne peux pas encore y jouer.
me@riverbrain:~/sgf$ play test.raw
play FAIL formats: bad input format for file `test.raw': sampling rate was not specified
et aussi, lors de la spécification de la fréquence d'échantillonnage
me@riverbrain:~/sgf$ play -r 16000 test.raw
play FAIL formats: bad input format for file `test.raw': data encoding was not specified
Lorsque j'ai recherché des informations sur l'encodage, j'ai eu l'impression que cela avait beaucoup à voir avec l'architecture de votre processeur, mais je me trompe peut-être. Quoi qu'il en soit, je ne trouve aucune documentation sur la façon de «demander» à l'ordinateur quel est l'encodage des données du fichier audio brut. Et je sais aussi quel est le taux d'échantillonnage, en raison du réglage moi-même, mais c'est aussi loin que je peux obtenir.
Réponses:
Cela peut varier, mais au moins pour moi, text2wave produit un PCM entier signé à 1 canal, 16 bits. Ce sont assez normaux - et ce sera très clair lorsque vous les aurez correctement (par exemple, si vous ne signez pas un entier par erreur, vous obtiendrez un son extrêmement déformé)
Avec le jeu, cela ressemble à:
Je suppose que ces paramètres sont configurés dans Festival quelque part. Certains d'entre eux peuvent également être codés en dur.
La seule chose dépendante de l'architecture que vous pouvez rencontrer est gros vs petit endian; sur ma machine Little Endian, le Festival écrit Little Endian; si je déplaçais ce fichier vers une machine big-endian, j'aurais probablement besoin d'ajouter
-L
. Si ellestext2wav
étaient exécutées sur une machine big-endian, je ne sais pas si elle écrirait des données big-end ou little-endian.la source
Vous pouvez probablement créer votre propre en-tête RIFF. Un peu de dénigrement devrait le faire .. et cat juste l'en-tête à votre autre pièce (s) ...
Ce lien montre la disposition de l'en-tête: le format de fichier Canonical WAVE
Il existe également un lien connexe sur SO: Conversion des données audio RAW en WAV avec des scripts , mais les réponses mplayer / mencoder ont un nombre de marqueurs nul. Cependant, il semble que SoX fonctionne.
SoX obtient une mention dans les deux liens ci-dessus et est disponible dans le référentiel d'Ubuntu; Je suppose que c'est aussi dans d'autres.
PS ... J'ai juste essayé d'utiliser
play
(je ne savais pas qu'il existait) et j'ai découvert que c'était SoX! ... Le lien SO donne un exemple, copié ici:sox -r 44100 -e unsigned -b 8 -c 1 <RAW_FILE> <TARGET_FILE>
Si vous ne pouvez pas le faire fonctionner avec sox , peut-être que mplayer / mencoder ou l'en-tête RIFF le feront fonctionner pour vous.
la source
Utilisez
aplay
au lieu deplay
pour lire un fichier brut, de cette façon, vous pouvez spécifier qu'il s'agit d'un audio brut par le commutateur -t:la source