Ce qui ne les octets dans un.fichier wav?
quand je stocke les données dans un .fichier wav en un tableau d'octets, que faire de ces valeurs? J'ai lu qu'ils sont dans des représentations de deux octets, mais que contiennent exactement ces valeurs de deux octets?
5 réponses
Vous avez entendu, que les signaux audio sont représentés par une sorte de vague. Si vous avez déjà vu ces diagrammes d'onde avec une ligne qui monte et descend -- c'est en gros ce qu'il y a à l'intérieur de ces fichiers. Jetez un oeil à cette image de fichier de http://en.wikipedia.org/wiki/Sampling_rate
vous voyez votre onde audio (la ligne grise). La valeur actuelle de cette onde est mesurée et donnée à plusieurs reprises sous forme de nombre. C'est le nombre de ces octets. Il y a deux choses différentes qui peuvent être ajustées avec cela: le nombre de mesures que vous prenez par seconde (c'est la fréquence d'échantillonnage, donnée en Hz -- c'est le nombre de mesures que vous prenez par seconde). L'autre ajustement est l'exactitude de la mesure. Dans les 2 octets cas, vous prenez deux octets pour une mesure (valeurs de -32768 à 32767 normalement). Donc avec ces nombres donnés là, vous pouvez recréer l'onde originale (jusqu'à une qualité limitée, bien sûr, mais c'est toujours le cas quand vous stockez trucs numériquement). Et recréer la vague originale est ce que votre haut-parleur essaie de faire sur la lecture.
Il y a certaines choses que vous devez savoir. Tout d'abord, puisqu'il s'agit de deux octets, vous devez connaître l'ordre des octets (big endian, little endian) pour recréer les nombres correctement. Deuxièmement, vous devez savoir combien de canaux vous avez, et comment ils sont stockés. Typiquement vous auriez mono (un canal) ou stéréo (deux), mais plus est possible. Si vous avez plus d'un canal, vous devez savoir comment ils sont stockés. 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 avez des données de 8 octets pour deux canaux et un nombre de 16 bits:
abcdefgh
Ici a
et b
constituerait le premier nombre de 16 bits qui est la première valeur pour le canal 1,c
et d
serait le premier numéro pour le canal 2. e
et f
sont la deuxième valeur du canal 1, g
et h
la deuxième valeur pour le canal 2. Vous n'entendriez pas beaucoup là-bas parce que ce ne serait pas proche d'une seconde de données...
si vous regroupez toutes les informations que vous avez, vous pouvez calculer le débit binaire que vous avez, c'est-à-dire le nombre de bits d'information générés par l'enregistreur par seconde. Dans notre exemple, vous générez 2 octets par canal sur chaque échantillon. Avec deux canaux, ça ferait 4 octets. Vous avez besoin sur 44000 échantillons par seconde pour représenter les sons de l'homme étant peut normalement entendre. Donc vous finirez avec 176000 octets par seconde, ce qui représente 140000 bits par seconde.
et bien sûr, ce n'est pas des valeurs en 2 bits, mais deux valeurs en 2 octets, ou vous auriez une très mauvaise qualité.
les 44 premiers octets sont généralement un en-tête RIFF standard, comme décrit ici: http://tiny.les systèmes/logiciels/soundProgrammer/WavFormatDocs.pdf et ici: http://www.topherlee.com/software/pcm-tut-wavformat.html
création D'Apple / OSX/macOS / iOS .les fichiers wav pourraient ajouter un bloc de remplissage 'FLLR' à l'en-tête et ainsi augmenter la taille de L'en-tête RIFF initiale de 44 octets à 4 octets (peut-être pour un meilleur alignement du disque ou du bloc de stockage de la raw les données de l'échantillon).
le reste est très souvent PCM linéaire 16 bits dans le format signé 2's-complement little-endian, représentant des échantillons à échelle arbitraire à une vitesse de 44100 Hz.
la vague (.wav) contient un en-tête, qui indique les informations de formatage des données du fichier audio. Suivant l'en-tête est les données brutes audio réelles. Vous pouvez vérifier leur signification exacte ci-dessous.
Positions Typical Value Description
1 - 4 "RIFF" Marks the file as a RIFF multimedia file.
Characters are each 1 byte long.
5 - 8 (integer) The overall file size in bytes (32-bit integer)
minus 8 bytes. Typically, you'd fill this in after
file creation is complete.
9 - 12 "WAVE" RIFF file format header. For our purposes, it
always equals "WAVE".
13-16 "fmt " Format sub-chunk marker. Includes trailing null.
17-20 16 Length of the rest of the format sub-chunk below.
21-22 1 Audio format code, a 2 byte (16 bit) integer.
1 = PCM (pulse code modulation).
23-24 2 Number of channels as a 2 byte (16 bit) integer.
1 = mono, 2 = stereo, etc.
25-28 44100 Sample rate as a 4 byte (32 bit) integer. Common
values are 44100 (CD), 48000 (DAT). Sample rate =
number of samples per second, or Hertz.
29-32 176400 (SampleRate * BitsPerSample * Channels) / 8
This is the Byte rate.
33-34 4 (BitsPerSample * Channels) / 8
1 = 8 bit mono, 2 = 8 bit stereo or 16 bit mono, 4
= 16 bit stereo.
35-36 16 Bits per sample.
37-40 "data" Data sub-chunk header. Marks the beginning of the
raw data section.
41-44 (integer) The number of bytes of the data section below this
point. Also equal to (#ofSamples * #ofChannels *
BitsPerSample) / 8
45+ The raw audio data.
j'ai copié toutes à partir de http://www.topherlee.com/software/pcm-tut-wavformat.html ici
comme d'autres l'ont fait remarquer, il y a des métadonnées dans le fichier wav, mais je pense que votre question pourrait être, spécifiquement, que signifient les octets (des données, pas des métadonnées)? Si c'est vrai, les octets représentent le valeur du signal enregistré.
ça veut dire Quoi? Eh bien, si vous extrayez les deux octets (disons) qui représentent chaque échantillon (supposons un enregistrement mono, ce qui signifie qu'un seul canal de son a été enregistré), alors vous avez une valeur de 16 bits. En WAV, 16 bits est (toujours?) signé et little-endian (AIFF, la réponse de Mac OS à WAV, est big-endian, soit dit en passant). Donc, si vous prenez la valeur de cet échantillon de 16 bits et le divisez par 2^16 (ou 2^15, je suppose, si ce sont des données signées), vous finirez avec un échantillon qui est normalisé pour être dans l'intervalle -1 à 1. Faites ceci pour tous les échantillons et tracez-les en fonction du temps (et le temps est déterminé par combien d'échantillons / seconde est dans l'enregistrement; par exemple 44.1 KHz signifie 44.1 échantillons / milliseconde, ainsi la première valeur d'échantillon sera tracée à t=0, le 44ème à t=1ms, etc) et vous avez un signal qui représente grossièrement ce qui a été enregistré à l'origine.
l'audio à deux bits ne sonnerait pas très bien :) le plus souvent, ils représentent des valeurs d'échantillon comme des nombres signés de 16 bits qui représentent la forme d'onde audio échantillonnée à une fréquence telle que 44,1 kHz.