Bonjour Ma première série d'articles visera à étudier les méthodes de compression et de stockage d'images / son, telles que JPEG (image) et WAVE (son), et ils comprendront également des exemples de programmes utilisant ces formats (.jpg, .wav) dans la pratique. Dans cette partie, nous considérerons WAVE.
L'histoire
WAVE (Waveform Audio File Format) est un format de fichier conteneur pour stocker des enregistrements de flux audio. Ce conteneur est généralement utilisé pour stocker le son non compressé en modulation par impulsions codées. (Adapté de Wikipedia)
Il a été inventé et publié en 1991 avec RIFF par Microsoft et IBM (les principales sociétés informatiques de l'époque).
Structure des fichiers
Le fichier a une partie d'en-tête, les données elles-mêmes, mais il n'y a pas de pied de page. L'en-tête pèse un total de 44 octets.
L'en-tête contient des paramètres pour le nombre de bits dans l'échantillon, la fréquence de descritisation, la profondeur sonore, etc. informations nécessaires pour une carte son. (Toutes les valeurs du tableau numérique doivent être écrites dans l'ordre Little-Endian)
Exemple WAVE
Le tableau précédent peut être facilement traduit en structure C, mais aujourd'hui notre langage est Python. La chose la plus simple à faire en utilisant l'onde est un générateur de bruit. Pour cette tâche, nous n'avons pas besoin d'un taux d'octets et d'une compression élevés.
Pour commencer, nous importons les modules nécessaires:
Ensuite, nous devons créer toutes les variables nécessaires à partir du tableau en fonction de leurs tailles. Les valeurs des variables ne dépendent ici que de numSamples (le nombre d'échantillons). Plus il y en a, plus notre bruit durera longtemps.
numSamples = int(argv[1]) output_path = argv[2] chunkId = b'RIFF' Format = b'WAVE' subchunk1ID = b'fmt ' subchunk1Size = b'\x10\x00\x00\x00'
Il ne reste plus qu'à les écrire dans l'ordre nécessaire (comme dans le tableau):
with open(output_path, 'wb') as fh: fh.write(chunkId + chunkSize + Format + subchunk1ID + subchunk1Size + audioFormat + numChannels + sampleRate + byteRate + blockAlign + bitsPerSample + subchunk2ID + subchunk2Size + data)
Et donc, c'est fait. Pour utiliser le script, nous devons ajouter les arguments de ligne de commande nécessaires:
python3 WAV.py [num of samples] [output]
nombre d'échantillons - compter échantillons
sortie - chemin vers le fichier de sortie
Voici un lien vers un fichier audio de test avec du bruit, mais pour économiser de la mémoire, j'ai réduit le BPS à 1b / s et baissé le nombre de canaux à 1 (avec 32k de flux audio stéréo non compressé à 64kbs, il s'est avéré 80M d'un fichier .wav propre, et seulement 10): https: / /instaud.io/3Dcy
Le code entier (WAV.py) (le code a de nombreuses valeurs de variables en double, ce n'est qu'un croquis):
from struct import pack
Résumé
Vous avez donc appris un peu plus sur le son numérique et son stockage. Dans cet article, nous n'avons pas utilisé la compression (audioFormat), mais pour revoir chacun des articles populaires, vous aurez besoin des articles 10. J'espère que vous avez appris quelque chose de nouveau par vous-même et cela vous aidera dans les développements futurs.
Je vous remercie!
Les sources
Structure de fichiers WAV
WAV - Wikipedia