Ce qui ne les octets dans un .le fichier wav que vous représentez?
Quand je stocker les données dans un .fichier wav en un tableau d'octets, que faire de ces valeurs?
J'ai lu qu'ils sont dans deux octets représentations, mais qu'est-ce exactement est contenue dans ces deux valeurs d'octets?
- Peut-être pas le plus technique de sources possible, mais assez complet néanmoins, la article de Wikipédia à propos de WAV
Vous devez vous connecter pour publier un commentaire.
Vous avez entendu, que les signaux audio sont représentés par une sorte de vague. Si vous avez déjà vu cette vague de diagrammes avec une ligne qui va de haut et vers le bas-c'est fondamentalement ce qui est à l'intérieur de ces fichiers. Jetez un oeil à ce fichier image à partir d' http://en.wikipedia.org/wiki/Sampling_rate
Vous voyez votre audio wave (la ligne grise). La valeur actuelle de cette onde est mesurée à plusieurs reprises et donné comme un nombre. C'est le nombre de ces octets. Il y a deux choses différentes qui peuvent être ajustés avec ce: Le nombre de mesures que vous prenez par seconde (c'est la fréquence d'échantillonnage, étant donné en Hz -- c'est le nombre par seconde que vous prenez). L'autre réglage est la façon exacte de la mesure. Dans les 2 octets cas, vous prenez deux octets pour une mesure (que les valeurs de -32768 à 32767 normalement). Donc, avec ces numéros, vous pouvez recréer l'origine de la vague (jusqu'à un certain de la qualité, bien sûr, mais c'est toujours le cas lorsque le stockage des trucs numériquement). Et la recréation de l'onde d'origine est ce que votre haut-parleur est en train de faire de la lecture.
Il y a certaines choses que vous devez savoir. Tout d'abord, puisque c'est de deux octets, vous avez besoin de savoir l'ordre des octets (big endian, little endian) pour recréer les chiffres correctement. Deuxièmement, vous avez besoin de savoir combien de canaux que vous avez, et comment elles sont stockées. En général, vous avez mono (un seul canal) ou stéréo (deux), mais ce n'est pas possible. Si vous avez plus d'un canal, vous avez besoin de savoir, comment elles sont stockées. Souvent, vous aurez entrelacés, cela signifie que vous obtenez une valeur pour chaque canal pour chaque point dans le temps, et après que toutes les valeurs pour le point suivant dans le temps.
Pour illustrer: Si vous disposez de données de 8 octets pour les deux canaux 16 bits et le nombre:
Ici
a
etb
serait le premier 16 bits numéro de la première valeur pour le canal 1,c
etd
serait le premier numéro pour le canal 2.e
etf
sont la deuxième valeur du canal 1,g
eth
la deuxième valeur pour le canal 2. Vous n'entendrez pas grand-chose, parce que cela ne serait pas venu près d'une seconde de données...Si vous prenez tout ce que les informations que vous avez, vous pouvez calculer le débit que vous avez, c'est le nombre de bits de données est généré par l'enregistreur par seconde. Dans notre exemple, vous générez 2 octets par canal sur chaque échantillon. Avec deux canaux, qui serait de 4 octets. Vous avez besoin d'environ 44000 échantillons par seconde pour représenter les sons de l'homme étant peut normalement entendre. Si vous finirez avec 176000 octets par seconde, ce qui est 1408000 de bits par seconde.
Et bien sûr, il n'est pas 2-valeurs des bits, mais deux 2 valeurs d'octets, ou vous avez une très mauvaise qualité.
9745238
de cadres et de et de 2 canaux audio puis je obtenir les données en tant que 1er et 2ème canal à la fois alternativement dans votre exempleabcdefgh
puis sur a appartiennent à la première valeur pour le canal 1 et b appartiennent à la première valeur de la tranche 2 et ainsi de suite. devrait-il pas être de cette façon?ab
est qu'une seule valeur qui est stockée comme unsigned int16
.cd
est la première valeur du canal 2. Votre version serait correct pour 8bit audio (mon exemple est compatible avec ma lecture de l'article de Wikipédia en allemand à de.wikipedia.org/wiki/... ).wave
etscipy
,wav
renvoyées une chaîne d'octets que j'ai ensuite converti en16bit int
maisscipy
me fit un9745238 X 2
matrice de signé16bit-int
(où 1 colonne est le canal 1 et 2 de la colonne est le canal 2 de données), et quand je l'ai comparée à lawav
sortie de nparray il était dans l'ordre je vous l'ai dit dans mon commentaire précédent, il était donc contredire un peu par votre réponse.9702000
alors qu'il y a9745238
dans le total des conjectures pourquoi ce qui se passeLes 44 premiers octets sont couramment d'un standard de RIFF en-tête, comme décrit ici:
http://tiny.systems/software/soundProgrammer/WavFormatDocs.pdf
et ici: http://www.topherlee.com/software/pcm-tut-wavformat.html
Apple/OSX/macOS/iOS créé .les fichiers wav peuvent ajouter une 'FLLR' rembourrage morceau à l'en-tête et donc d'augmenter la taille de l'en-tête initial RIFF de 44 octets à 4 ko (peut-être pour le meilleur disque de stockage ou le bloc d'alignement de l'échantillon brut de données).
Le reste est très souvent 16 bits PCM linéaire dans signé 2-complément de format little-endian, représentant de manière arbitraire l'échelle des échantillons à une fréquence de 44100 Hz.
Comme d'autres l'ont souligné, il y a de métadonnées dans le fichier wav, mais je pense que votre question pourrait être, précisément, ce qui ne les octets (de données, de métadonnées) signifie? Si c'est vrai, les octets représentent le valeur du signal qui a été enregistré.
Ça veut dire quoi? Eh bien, si vous extrayez les deux octets (dire) que représenter chaque échantillon (à supposer un enregistrement mono, sens que dans un canal de bruit a été enregistré), alors vous avez une valeur de 16 bits. En WAV 16 bits, est (toujours?) signé et little-endian (AIFF, Mac OS, la réponse à WAV, est big-endian, par la voie). Donc, si vous prenez la valeur de l'échantillon de 16 bits et le diviser par 2^16 (ou 2^15, je suppose que, s'il est signé de données), vous vous retrouverez avec un échantillon qui est normalisée à être dans la gamme de -1 à 1. Faites cela pour tous les échantillons et de les indiquer par rapport au temps (et le temps est déterminé par le nombre d'échantillons/seconde, dans l'enregistrement; par exemple, 44.1 44.1 KHz signifie échantillons/milliseconde, alors la première valeur de l'échantillon sera tracée à t=0, la 44e à t=1 ms, etc) et vous avez un signal qui représente environ ce qui a été enregistré à l'origine.
La VAGUE (.wav fichier contient un en-tête, qui indique les informations de mise en forme de l'audio du fichier de données. Suivant l'en-tête est le réel de l'audio en données brutes. Vous pouvez vérifier le sens exact ci-dessous.
J'ai copié tous les de ces de http://www.topherlee.com/software/pcm-tut-wavformat.html ici
Deux bits audio n'est pas très bon 🙂 le Plus souvent, ils représentent des valeurs de l'échantillon de 16-bit signé nombres qui représentent la forme d'onde audio échantillonné à une fréquence telle que 44,1 kHz.
Je suppose que votre question est "Que font les octets dans le bloc de données d' .fichier wav représenter?" Laissez-nous savoir tout systématiquement.
Prélude:
Permettez-nous de dire que nous jouons un 5KHz onde sinusoïdale avec certains périphériques et de les enregistrer dans un fichier appelé 'sine.wav", et l'enregistrement est fait sur un seul canal (mono). Maintenant, vous savez déjà ce que l'en-tête de ce fichier représente.
Laissez-nous passer par quelques définitions importantes:
Maintenant, venir à la réponse de votre question:
Il n'est pas possible pratiquement à écrire la totalité de l'onde sinusoïdale pour le fichier car il y a l'infini de points sur une onde sinusoïdale. Au lieu de cela, nous avons fixé une fréquence d'échantillonnage et le début de l'échantillonnage de la vague à ces intervalles et d'enregistrer les amplitudes. (La fréquence d'échantillonnage est choisie de telle sorte que le signal peut être reconstruit avec un minimum de distorsion, en utilisant les échantillons que nous allons prendre. La distorsion dans le signal reconstruit en raison du nombre insuffisant d'échantillons est appelé 'aliasing'.)
Pour éviter l'aliasing, le taux d'échantillonnage est choisie pour être supérieure au double de la fréquence de notre onde sinusoïdale (5kHz)(Ce qui est appelé 'théorème de l'échantillonnage' et le taux de deux fois la fréquence est appelé "taux de nyquist'). Nous avons donc décider d'aller avec un taux d'échantillonnage de 12 khz qui signifie que nous allons l'échantillon de notre onde sinusoïdale, 12000 fois en une seconde.
Une fois que nous commençons l'enregistrement, si on enregistre le signal sinusoïdal de fréquence 5kHz, nous aurons 12000*5 échantillons(valeurs). Nous prenons ces 60000 valeurs et les mettre dans un tableau. Ensuite, nous créons le bon en-tête, afin de refléter notre métadonnées et puis nous convertir ces échantillons, qui nous l'avons noté en décimal, à leurs équivalents hexadécimaux. Ces valeurs sont ensuite écrites dans les octets de données de notre .les fichiers wav.
Tracé de tracé sur : http://fooplot.com