Domanda

Ho bisogno di aiuto con Editor Hex e file audio. Ho difficoltà a capire la formula per ottenere il numero di campioni nei miei file .WAV.

Ho scaricato StripWav che mi dice il numero di campioni nelle onde., Ma non riesco ancora a capire la formula.

Puoi scaricare questi due .wav, aprirli in un editor esadecimale e dirmi la formula per ottenere il numero di campioni.

Se lo fai così gentilmente per me, mi dico il numero di campioni per ogni .wav in modo da poter assicurarmi che la formula sia corretta.

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

Ecco un problema che ho due programmi,

Si legge i dati WAV e l'altro mostra i numsampli qui sono i dati

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)

Ma l'altro programma dice che numsamples lo è

23,063 samples

/*******AGGIORNARE*********/ Un'altra cosa che ho fatto il calcolo con 2 file questo è corretto

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

Ma quest'altro non uscirà correttamente, sono più di 2 megs che ho appena superato 44 byte e lo faccio male qui? Ecco il filesize

2,473,696 bytes 

Ma i numsamples corretti sono

 617,400
È stato utile?

Soluzione

Non esiste una formula semplice per determinare il numero di campioni in un file WAV. Un cosiddetto file WAV "canonico" è costituito da un'intestazione a 44 byte seguita dai dati di esempio effettivi. Quindi, se sai che il file utilizza 2 byte per campione, il numero di campioni è uguale alla dimensione del file in byte, meno 44 (per l'intestazione), e quindi diviso per 2 (poiché ci sono 2 byte per campione).

Sfortunatamente, non tutti i file WAV sono "canonici" come questo. Un file WAV utilizza il formato RIFF, quindi il modo corretto per analizzare un file WAV è cercare attraverso il file e individuare i vari blocchi.

Ecco un campione (non sono sicuro di quale lingua devi farlo):

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

Altri suggerimenti

Formato d'onda

Devi leggere il fmt Intestazione per determinare il numero di canali e bit per campione, quindi leggi le dimensioni del data blocco per determinare quanti byte di dati sono nell'audio. Quindi:

NumSamples = NumBytes / (NumChannels * BitsPerSample / 8)

UN WAVE'S format chunk (fmt) ha il "byte per frame di campione" specificato come wBlockAlign.
Così: framesTotal = data.ck_size / fmt.wBlockAlign;
e samplesTotal = framesTotal * wChannels;
Così, samplesTotal===FramesTotal IIF wChannels === 1!!

Nota come la risposta di cui sopra è stata elegantemente evitata di spiegare che le equazioni chiave le specifiche (e le risposte in base a esse) sono sbagliate: considera Flor Esempio a 2 canali 12 bit al secondo onda.
La specifica spiega che mettiamo ogni campione da 12 bps in una parola:

  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
+------+------+------+------+------+------+------+------+-----

Quindi .. quanti byte fa il telaio del campione (BlockAlign) per un'onda da 12bps da 2CH ha secondo le specifiche?
u003Csarcasm> CEIL(wChannels * bps / 8) = 3 byte ..u003C/sarcasm>
Ovviamente l'equazione corretta è: wBlockAlign=wChannels*CEIL(bps/8)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top