Question

Besoin d'aide avec Hex Editor et files.I audio ont du mal à comprendre suis la formule pour obtenir le nombre d'échantillons dans mon .wav fichiers.

J'ai téléchargé StripWav qui me dit que le nombre d'échantillons dans les .waves, mais ne peut toujours pas comprendre la formule.

Pouvez-vous s'il vous plaît télécharger ces deux .wavs, les ouvrir dans un éditeur hexadécimal et dites-moi la formule pour obtenir le nombre d'échantillons.

Si vous avez bien voulu le faire pour moi, les plaidoyers de me dire le nombre d'échantillons pour chaque .wav afin que je puisse me assurer que la formule est correcte.

http://sinewavemultimedia.com/1wav.wav http://sinewavemultimedia.com/2wav.wav

Voici un problème que j'ai deux programmes,

On lit les données wav et les autres spectacles les numsamples voici les données

RIFF 'WAVE' (wave file)
        <fmt > (format description)
                PCM format
                2 channel
                44100 frames per sec
                176400 bytes per sec
                4 bytes per frame
                16 bits per sample
        <data> (waveform data - 92252 bytes)

Mais l'autre programme dit NumSamples est

23,063 samples

/ * ** * ** * UPDATE * ** * ** * ** / Une chose que je l'ai fait le calcul avec 2 fichiers Celui-ci est correcte

92,296 bytes and num samples is 23,063` 

Mais cet autre ne sort pas correctement, il est plus de 2 mégas je viens subracted 44 octets et je le fais mal ici? voici la taille du fichier

2,473,696 bytes 

Mais les numsamples correctes est

 617,400
Était-ce utile?

La solution

Il n'y a pas de formule simple pour déterminer le nombre d'échantillons dans un fichier WAV. Un soi-disant fichier WAV « canonique » se compose d'un en-tête de 44 octets suivi par les données réelles d'échantillons. Donc, si vous savez que le fichier utilise 2 octets par échantillon, le nombre d'échantillons est égale à la taille du fichier en octets, moins 44 (pour l'en-tête), puis divisé par 2 (car il y a 2 octets par échantillon).

Malheureusement, tous les fichiers WAV sont « canonique » comme celui-ci. Un fichier WAV utilise le format RIFF, donc la bonne façon d'analyser un fichier WAV est à rechercher dans le fichier et localiser les différents morceaux.

Voici un exemple (pas sûr de ce que la langue que vous devez faire dans):

http://msdn.microsoft.com/en-us/library/ms712835

Autres conseils

format Wave

Vous devez lire l'en-tête de fmt pour déterminer le nombre de canaux et bits par échantillon, alors lisez la taille du morceau de data pour déterminer le nombre d'octets de données sont dans l'audio. Puis:

NumSamples = NumBytes / (NumChannels * BitsPerSample / 8)

Le WAVE (de format chunk) d'un fmt a 'octets par trame échantillon' spécifié comme wBlockAlign.
Alors: framesTotal = data.ck_size / fmt.wBlockAlign;
et samplesTotal = framesTotal * wChannels;
Ainsi, samplesTotal===FramesTotal IIF wChannels === 1 !!

Notez comment la réponse ci-dessus évité avec élégance pour expliquer que les principales équations de la spécification (et des réponses basées sur eux) sont inexactes: considérer un exemple flor 2 canaux de 12 bits par seconde onde ..
La spécification explique que nous mettons chaque échantillon de 12bps en un mot:

  note: t=point in time, chan = channel
+---------------------------+---------------------------+-----
|         frame 1           |         frame 2           |  etc
+-------------+-------------+-------------+-------------+-----
| chan 1 @ t1 | chan 2 @ t1 | chan 1 @ t2 | chan 2 @ t2 |  etc
+------+------+------+------+------+------+------+------+-----
| byte | byte | byte | byte | byte | byte | byte | byte |  etc
+------+------+------+------+------+------+------+------+-----

.. combien d'octets ne l'échantillon-cadre (BlockAlign) pour une 2ch 12bps vague ont selon les spécifications
CEIL(wChannels * bps / 8) = 3 octets ..
Il est évident que l'équation correcte est: wBlockAlign=wChannels*CEIL(bps/8)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top