2016-06-02 1 views
1

J'ai un fichier WAV 8 bits que je voudrais convertir en un fichier TXT ordinaire. Il est important que le fichier TXT résultant ne contienne que des nombres compris entre 0 et 255, représentant la valeur de chaque échantillon.Convertir un fichier WAV en fichier TXT

Bien sûr, quelque chose comme -128 à 128 serait également bien, car cela ne devrait pas être un gros problème pour convertir/normaliser tout le nécessaire.

J'ai essayé d'exporter dans différents formats RAW sans en-tête en utilisant Audacity, mais les encodages disponibles ne sont tout simplement pas ce que je recherche.

Même si cette question peut être un peu étrange (j'ai besoin de ce fichier pour un projet artistique) j'apprécierais toute aide!

Répondre

0

d'abord un exemple de fichier:

sox -n -r 8k -b 8 test.wav synth 0.02 sine 400 fade t 0 0 0.02 norm 

Cela crée une sinusoïde 0,02 secondes à long 400Hz qui se fane linéairement du début à la fin. Il est stocké sous la forme d'un fichier WAV monocanal de 8 bits avec une fréquence d'échantillonnage de 8 kHz.

Comme pour convertir cela en une chaîne de valeurs d'échantillon dans l'intervalle [0, 255] vous êtes sur la bonne voie avec un format de entete brut, qui peut être produit avec sox comme ceci:

sox -V test.wav -e unsigned test.raw 

Mais si vous ouvrez le fichier .raw résultant dans un éditeur de texte, il ressemble à un tas de bêtises. Pour corriger cela, nous pouvons envoyer si, par l'utilitaire hexdump pour traduire les données sous une forme plus lisible:

hexdump -v -e '1/1 "%03u "' test.raw > test.txt 

Pour autant que je peux dire (je n'appris hexdump hier, alors ne prenez pas mes mots gospel): -v garantit que toutes les sorties sont écrites explicitement (sinon les répétitions sont représentées par un astérisque), -e vous permet de créer votre propre chaîne de format (whats dans les guillemets simples): 1/1 ordonne les données en «paquets» de un, un octet par Le groupe "%03u " veille à ce que chaque «groupe» soit représenté par un nombre décimal non signé, à trois chiffres et sans chiffre. Un espace blanc unique est également ajouté pour séparer chaque 'groupe'.

Alternativement, la première commande peut être canalisé directement dans le second comme celui-ci:

sox -V test.wav -t raw -e unsigned - | hexdump -v -e '1/1 "%03u "' > test.txt 

Avec le contenu de la recherche test.txt quelque chose comme ceci:

head -c 64 test.txt 
# 132 169 205 233 251 255 250 230 203 167 128 090 057 030 014 009 

enter image description here

Pour supprimer le remplissage de zéro, supprimez simplement '03' de la commande hexdump.

Je devrais ajouter que hexdump est un programme BSD, et en tant que tel est assez omniprésent sur les systèmes * NIX, mais je n'ai aucune idée de ce que son équivalent serait sur Windows.

+0

Merci, je pense que c'est exactement ce dont j'ai besoin! – lysigk