Pregunta

Necesito ayuda con Hex Editor y Archivos de Audio. Tengo problemas para descubrir la fórmula para obtener el número de muestras en mis archivos .WAV.

Descargué StripWav que me dice el número de muestras en las .waves, pero aún no puedo entender la fórmula.

¿Puedes descargar estos dos ?wavs, abrirlos en un editor hexadecimal y decirme la fórmula para obtener la cantidad de muestras.

Si es tan amable, haz esto por mí, por favor dime la cantidad de muestras para cada .wav para que pueda asegurarme de que la fórmula sea correcta.

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

Aquí hay un problema que tengo dos programas,

Uno lee los datos de WAV y el otro muestra las numeraciones aquí son los datos

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)

Pero el otro programa dice que las muestras son

23,063 samples

/*******ACTUALIZAR*********/ Una cosa más que hice el cálculo con 2 archivos este es correcto

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

Pero este otro no está saliendo correctamente, es más de 2 megs que acabo de subractar 44 bytes y lo hago mal aquí. Aquí está el tamaño de archivos

2,473,696 bytes 

Pero los números correctos son

 617,400
¿Fue útil?

Solución

No existe una fórmula simple para determinar el número de muestras en un archivo WAV. Un llamado archivo WAV "canónico" consiste en un encabezado de 44 bytes seguido de los datos de muestra reales. Entonces, si sabe que el archivo usa 2 bytes por muestra, entonces el número de muestras es igual al tamaño del archivo en bytes, menos 44 (para el encabezado) y luego dividido por 2 (ya que hay 2 bytes por muestra).

Desafortunadamente, no todos los archivos WAV son "canónicos" como este. Un archivo WAV utiliza el formato RIFF, por lo que la forma correcta de analizar un archivo WAV es buscar a través del archivo y localizar los diversos fragmentos.

Aquí hay una muestra (no estoy seguro en qué idioma necesita hacer esto):

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

Otros consejos

Formato de onda

Debes leer el fmt encabezado para determinar el número de canales y bits por muestra, luego lea el tamaño del data fragmento para determinar cuántos bytes de datos hay en el audio. Después:

NumSamples = NumBytes / (NumChannels * BitsPerSample / 8)

A WAVE's format chunk (fmt) tiene los 'bytes por marco de muestra' especificado como wBlockAlign.
Asi que: framesTotal = data.ck_size / fmt.wBlockAlign;
y samplesTotal = framesTotal * wChannels;
De este modo, samplesTotal===FramesTotal IIF wChannels === 1!!

Tenga en cuenta cómo la respuesta anterior evitó elegantemente explicar que las ecuaciones clave las especificaciones (y las respuestas basadas en ellas) están mal: considere Flor Ejemplo A 2 canales de 12 bits por segunda ola.
La especificación explica que colocamos cada muestra de 12bps en una palabra:

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

Entonces ... ¿cuántos bytes hace el marco de muestra (BlockAlign) para una onda de 2ch 12bps tiene de acuerdo con las especificaciones?
u003Csarcasm> CEIL(wChannels * bps / 8) = 3 bytes ..u003C/sarcasm>
Obviamente, la ecuación correcta es: wBlockAlign=wChannels*CEIL(bps/8)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top