[Aporte] Conversor de archivos WAV a TXT

Buenas tardes queridos compañeros del foro. Hoy no vengo a reclamar el conocimiento de nadie sino a colaborar con esta comunidad (y otras también) que tanto me han ayudad y aportan a la sociedad a través de la inteligencia colectiva.
En este caso les traigo un pequeño programita que hice en una macro de Excel (porque era el lenguaje de programación que dispongo en mi lugar de trabajo en mi tiempo libre).

Sin más preámbulos, el programa es un decodificador de archivos de audio WAV.
Para entender qué es lo que hace, primero debemos saber cómo se graban los sonidos en la PC. No quiero entrar en mayores detalles, pero básicamente para poder grabar sonidos hay que convertir la presión sonora en pulsos eléctricos.
Para ello se necesita de un transductor. En este caso el transductor es el micrófono. Existen distintos tipos de micrófonos, por nombrar los más comunes, están los dinámicos o de bobina móvil que en esencia es un parlante usado al revés los electret que funcionan como una especie de capacitor.
Las señales eléctricas son muy débiles por lo que requieren de un preamplificador. Hasta aquí la señal eléctrica generada es analógica, es decir que su forma es continua y tiene la misma forma que las ondas de audio que las generan.
La señales llegan a la placa o tarjeta de audio de la PC, la cual no es otra cosa que un conversor analógico/Digital (A/D) de una determinada cantidad de bits. En general son de 8 bits. El conversor transforma esta señal continua en una muestra discreta de puntos en el tiempo. La frecuencia de muestreo de la señal en general es de 44.1Hz, esto es el doble que la máxima frecuencia audible y no es casualidad. También hay frecuencias superiores, pero cuanto mayor la frecuencia, tanto menor es el periodo de muestreo, por lo que la señal es más fiel, pero el archivo generado es más pesado.

Pero qué es lo que me da el programa?
Al cargarle un archivo de audio, el programa genera un archivo txt donde dice información sobre cómo se grabó ese archivo de audio… la frecuencia de muestreo, si la señal es mono o estero, los bits de conversor y algún otro dato.
Luego de esto muestra los datos recopilados. Si la frecuencia de muestreo es de 44.1KHz, el tiempo entre muestra y muestra es de 1/44.1KHz=0.02268ms=22.68us (microsegundos). Si el conversor es de 8bits la señal se divide en 256 niveles, esto es de 0 a 255. Como la presión sonora puede ser positiva o negativa, se asume como silencio el nivel 127. El pico máximo no puede superar el valor 255 y el mínimo el 0, de otro modo satura el conversor y se deforma la señal de audio.

Los datos del archivo generado pueden copiarse y pegarse en una hoja de Excel y observar la forma de la onda. Además con un poco de habilidad en la programación se puede modificar el programa y aplicar filtros, derivar, integrar, etc.

Este proyecto abre las puertas de la imaginación. Por ejemplo (con la precaciones correspondientes para evitar quemar todo) podríamos grabar como audio las señales analogicas de un generador de señales, luego llevar el archivo de audio a la PC y con este programa ver la forma de la onda, su periodo y realizar un análisis como si fuese un osciloscópio.
En mi caso particular, grabe el audio del chispazo de la bujia de un karting, simplemente con una pinza cocodrilo, un jack de audio y un reproductor de mp3 viejo. Como digo, el limite es la imaginación.

Espero les sea de utilidad en sus proyectos, que lo modifiquen y mejoren y adapten.
Saludos

Matías


Adjunto el archivo de Excel y dos imágenes del análisis del ruido de una bujía de karting.
Saludos!



Les adjunto el codigo fuente de la macro en un archivo txt
 

Adjuntos

  • WAV2TXT_DECO.rar
    3.7 MB · Visitas: 94
  • Datos.JPG
    Datos.JPG
    95.9 KB · Visitas: 95
  • Forma de ondas.JPG
    Forma de ondas.JPG
    126.6 KB · Visitas: 87
  • CF.txt
    4.6 KB · Visitas: 67
Última edición:
Supongo que será del orden de 1 a 2... en promedio. Cada canal de un WAV calidad CD tiene 2 bytes. Si cada número codificado en binario (en dos bytes) tiene - en promedio - 4 dígitos y vá 1 ASCII por cada dígito (suponiendo que el programa use ASCII y no unicode), entonces van 4 bytes del TXT por cada 2 bytes del WAV... y el TXT es al menos 2 veces mas grande que el WAV (supongo que la realidad será del orden de 2.5 a 3 veces mas grande)
Como te imaginarás, depende mucho de la grabación que estés usando, del nivel de compresión, etc, etc...
 
Los archivos WAV guardan la info en la forma más explicita, sin mediar ningún tipo de compresión. Los archivos tienen un encabezado de 45 caracteres donde se guarda la configuración del archivo de audio (bits, frecuencia, etc). Los demás caracteres son los datos almacenados. Hagan la prueba de abrir un archivo WAV con el NotePad y verán lo que les digo (que no sea un archivo muy grande sino tarda mucho en abrirlo). Luego de que en el encabezado dice "data", 4 caracteres más adelante comienzan a guardarse los datos. La primera vez que me di cuenta de lo que quería decir cada cosa sentí que había decodificado la Piedra Rosetta jajaja. Como el conversor A/D de audio es de 8 bits, cada valor medido se guarda como un caracter ASCII que también es de 8 bits. Si estaríamos programando un PIC en lenguaje C, el sonido se declararía como "signed char sonido", es decir una variable de 8 bits con signo almacenada como texto, esto quiere decir que se asignan 127 valores positivos y 127 negativos, si hay silencio, se va a medir el nivel 127, esto en ASCII es "⌂", si fuese el nivel 64 sería la conocida "@" e implicaría una presión negativa, si fuese 164 el caracter en el archivo sería "ñ", y así con todos los caracteres visibles y no visibles (como retorno de carro). En el notepad solo se verán los caracteres visibles, por eso en el código fuente, cuando se abre el archivo de audio hay que abrirlo como Binary.

Entiendo que esto no responde la pregunta respecto del tamaño, pero vamos de a poco. Dado que el archivo se escribe con caracteres ASCII y que cada caracter ASCII representa un valor de 8 bits o sea un Byte, en el encabezado tenemos 45 caracteres, o sea, 45bytes (solo en el encabezado y este es el tamaño mínimo del archivos WAV), luego cada caracter ASCII que mida el conversor será 1byte más. Supongamos que muestrea 1500 valores, entonces el archivo WAV sera de 45+1500=1545bytes que divido por 1024bytes/KByte nos da 1,5Kbyte.

Para saber el tamaño del archivo generado hay que contar la cantidad de caracteres. Sin duda este valor es mayor en el archivo generado puesto que por cada punto de muestreo el programa te dice más datos que el archivo WAV: el número de la muestra, el tiempo en segundos de la muestra y su valor.

Probando... si convierto un archivo WAV de 321KB obtengo un archivo de texto de 8.99MB, pero son más datos respecto de 328889 muestras.

Adjunto una imagen del archivo WAV abierto con el NotePad donde se puede ver resaltado el encabezado. Lo demás son los datos, donde a simple vista se puede apreciar el patrón de repetición de los caracteres. Esto es porque entre muestra y muestra (22.67us) la señal no varía. Se hace fácilmente visible con esto cómo trabaja un compresor de archivos también, ya que en lugar de escrbir por ejemplo @@@@@@@@@@@@@@@@@@@@ y ocupar 20 bytes, escriben 20@ y reducen significativamente el tamaño (no digo que ese sea literalmente el funcionamiento de un compresor, es solo ejemplificativo).

Espero haber sido de utilidad.
Saludos

Matías



Supongo que será del orden de 1 a 2... en promedio. Cada canal de un WAV calidad CD tiene 2 bytes. Si cada número codificado en binario (en dos bytes) tiene - en promedio - 4 dígitos y vá 1 ASCII por cada dígito (suponiendo que el programa use ASCII y no unicode), entonces van 4 bytes del TXT por cada 2 bytes del WAV... y el TXT es al menos 2 veces mas grande que el WAV (supongo que la realidad será del orden de 2.5 a 3 veces mas grande)
Como te imaginarás, depende mucho de la grabación que estés usando, del nivel de compresión, etc, etc...


Cada muestra ocupa dos bytes si el audio se grabó como STEREO. Si esta como MONO es solo un byte. El programa también te dice, eso, si es ESTEREO o MONO y el valor en el parlante izquierdo y derecho.

Saludos
 

Adjuntos

  • Archivo de audio.jpg
    Archivo de audio.jpg
    237.8 KB · Visitas: 58
Última edición:
Naaaa.... eso es si está digitalizdo solo con 8 bits, que no es el caso de calidad CD que son 16 bits por muestra y por canal ;)

Me retracto. Por lo menos con los archivos de audio que yo trabajé cuando hice el programa eran como mencioné, pero es cierto que nunca analicé una canción de CD por ejemplo. Por eso dejo el archivo y codigo fuente para que se mejore.
Saludos
 
Estimados amigos, trabajo en acústica ambiental haciendo medidas con diversos tipos de sonómetros, determinando Leq, 24h, Ld, Le, Ln, Lden, etc. Pero me surje la idea de hacer grabaciones de audio de esos paisajes sonoros mediante grabadora acústica de pequeñas dimensiones y resistente a la intemperie que permiten grabar hasta 200 horas en formato wav, en vez de hacer mediciones con un sonómetro, que tiene mucha menos autonomía.
He abierto los ficheros WAV con Matlab, obteniendo un fichero txt de una columna con 360000 datos (teniendo en cuenta que la frecuencia de muestreo del fichero es de 24000 Hz y 16 bits, y que el audio es de solo 15 segundos). Mi pregunta es: ¿Qué representan exactamente esos datos del fichero txt, presión sonora, señal eléctrica? y por tanto ¿Qué unidades tienen?
¿Alguien podría responderme?

Gracias
 
Estimados amigos, trabajo en acústica ambiental haciendo medidas con diversos tipos de sonómetros, determinando Leq, 24h, Ld, Le, Ln, Lden, etc. Pero me surje la idea de hacer grabaciones de audio de esos paisajes sonoros mediante grabadora acústica de pequeñas dimensiones y resistente a la intemperie que permiten grabar hasta 200 horas en formato wav, en vez de hacer mediciones con un sonómetro, que tiene mucha menos autonomía.
He abierto los ficheros WAV con Matlab, obteniendo un fichero txt de una columna con 360000 datos (teniendo en cuenta que la frecuencia de muestreo del fichero es de 24000 Hz y 16 bits, y que el audio es de solo 15 segundos). Mi pregunta es: ¿Qué representan exactamente esos datos del fichero txt, presión sonora, señal eléctrica? y por tanto ¿Qué unidades tienen?
¿Alguien podría responderme?

Gracias
Representa la salida del conversor analógico digital (ADC), en este caso es un entero con signo de 16bits, es adimensional.

Si querés relacionarlo con la presión sonora tenés que hacer una comparacion de los valores leidos respecto a un sonómetro.
Con varios inconvenientes:
- El micrófono de la grabadora es direccional, la ganancia dependerá de la dirección del sonido.
- La respuesta en frecuencia de la grabadora no es plana.
- Si incorpora un control automático de ganancia, vas muerto porque te cambia la ganancia en función de la intensidad de sonido.
 
Última edición:
Buenas tardes queridos compañeros del foro. Hoy no vengo a reclamar el conocimiento de nadie sino a colaborar con esta comunidad (y otras también) que tanto me han ayudad y aportan a la sociedad a través de la inteligencia colectiva.
En este caso les traigo un pequeño programita que hice en una macro de Excel (porque era el lenguaje de programación que dispongo en mi lugar de trabajo en mi tiempo libre).

Sin más preámbulos, el programa es un decodificador de archivos de audio WAV.
Para entender qué es lo que hace, primero debemos saber cómo se graban los sonidos en la PC. No quiero entrar en mayores detalles, pero básicamente para poder grabar sonidos hay que convertir la presión sonora en pulsos eléctricos.
Para ello se necesita de un transductor. En este caso el transductor es el micrófono. Existen distintos tipos de micrófonos, por nombrar los más comunes, están los dinámicos o de bobina móvil que en esencia es un parlante usado al revés los electret que funcionan como una especie de capacitor.
Las señales eléctricas son muy débiles por lo que requieren de un preamplificador. Hasta aquí la señal eléctrica generada es analógica, es decir que su forma es continua y tiene la misma forma que las ondas de audio que las generan.
La señales llegan a la placa o tarjeta de audio de la PC, la cual no es otra cosa que un conversor analógico/Digital (A/D) de una determinada cantidad de bits. En general son de 8 bits. El conversor transforma esta señal continua en una muestra discreta de puntos en el tiempo. La frecuencia de muestreo de la señal en general es de 44.1Hz, esto es el doble que la máxima frecuencia audible y no es casualidad. También hay frecuencias superiores, pero cuanto mayor la frecuencia, tanto menor es el periodo de muestreo, por lo que la señal es más fiel, pero el archivo generado es más pesado.

Pero qué es lo que me da el programa?
Al cargarle un archivo de audio, el programa genera un archivo txt donde dice información sobre cómo se grabó ese archivo de audio… la frecuencia de muestreo, si la señal es mono o estero, los bits de conversor y algún otro dato.
Luego de esto muestra los datos recopilados. Si la frecuencia de muestreo es de 44.1KHz, el tiempo entre muestra y muestra es de 1/44.1KHz=0.02268ms=22.68us (microsegundos). Si el conversor es de 8bits la señal se divide en 256 niveles, esto es de 0 a 255. Como la presión sonora puede ser positiva o negativa, se asume como silencio el nivel 127. El pico máximo no puede superar el valor 255 y el mínimo el 0, de otro modo satura el conversor y se deforma la señal de audio.

Los datos del archivo generado pueden copiarse y pegarse en una hoja de Excel y observar la forma de la onda. Además con un poco de habilidad en la programación se puede modificar el programa y aplicar filtros, derivar, integrar, etc.

Este proyecto abre las puertas de la imaginación. Por ejemplo (con la precaciones correspondientes para evitar quemar todo) podríamos grabar como audio las señales analogicas de un generador de señales, luego llevar el archivo de audio a la PC y con este programa ver la forma de la onda, su periodo y realizar un análisis como si fuese un osciloscópio.
En mi caso particular, grabe el audio del chispazo de la bujia de un karting, simplemente con una pinza cocodrilo, un jack de audio y un reproductor de mp3 viejo. Como digo, el limite es la imaginación.

Espero les sea de utilidad en sus proyectos, que lo modifiquen y mejoren y adapten.
Saludos

Matías


Adjunto el archivo de Excel y dos imágenes del análisis del ruido de una bujía de karting.
Saludos!



Les adjunto el codigo fuente de la macro en un archivo txt
Buen día a todos.
Compré un osciloscopio FNIRSI-1014D en cual es muy práctico y permite guardar la imagen de la pantalla con las señales que se tienen en los dos canales, o bien, los datos de esas formas de onda. Al descargar los archivos de las señales en la computadora, el formato de los datos guardados están en extensión de archivos .wav.
Baje el archivo de excel aqui expuesto, lo ejecuté, seguí las indicaciones, pero no obtuve respuesta, quizá por lo antiguo del archivo.
La pregunta es: ¿alguien sabe como convertir los archivos .wav a archivos de datos o de texto (.csv o .txt) para poder procesar los datos posteriormente?
Agradezco su apoyo.
Saludos.
 
Buen día a todos.
Compré un osciloscopio FNIRSI-1014D en cual es muy práctico y permite guardar la imagen de la pantalla con las señales que se tienen en los dos canales, o bien, los datos de esas formas de onda. Al descargar los archivos de las señales en la computadora, el formato de los datos guardados están en extensión de archivos .wav.
Baje el archivo de excel aqui expuesto, lo ejecuté, seguí las indicaciones, pero no obtuve respuesta, quizá por lo antiguo del archivo.
La pregunta es: ¿alguien sabe como convertir los archivos .wav a archivos de datos o de texto (.csv o .txt) para poder procesar los datos posteriormente?
Agradezco su apoyo.
Saludos.
Empecemos por el principio para evitar confuciones.
---> Los ARCHIVOS del tipo * . WAV , ya son Archivos de datos.
Si convirtieras el * .WAV en FORMATO -->>>> TEXTO, que si podrias, supongamos en formato --> * .TXT (el mas comun) , de poco te serviría.
Los archivos con caracteres ASSCI, no suelen tener símbolos correspondientes para muchos números hexa menores a 1f y superiores a 7f (aproximado)
Lo que si te seria útil para empezar, seria un visor/ editor de archivos HEXA o .HEX
Despues me falta saber --->¿ A donde quieres llegar con esto ? Es decir : ¿OBJETIVO FINAL ? (para no perder tiempo en vías muertas) ;)
 
Última edición:
Yo tampoco le encuentro el caso, convertir a texto sería como visualizar el valor decimal de cada byte (RAW) en un archivo .txt
Por ejemplo, omitiendo la cabecera WAV:
Byte 0 = 127
Byte 1 = 234
Byte 2 = 176
etc.
No tiene caso, sino inconvenientes, porque un archivo de texto ocupará más espacio que el mismo archivo .wav
Aparte de que el valor decimal se puede ver en el inspector de datos del editor hexadecimal.

Algo para contemplar:
La zona de datos de un archivo WAV empieza en 0x40 y de ahí hasta la posición 0x436A se encontró 0x00
Lo cual resulta en un gran desperdicio de espacio, por eso se inventó la compresión MP3 y otras.
WAV Data.jpg
Abrir un archivo de texto que llegue a pesar más de 60 MB tras la conversión, será una tarea muy pesada para el PC.
 
Empecemos por el principio para evitar confuciones.
---> Los ARCHIVOS del tipo * . WAV , ya son Archivos de datos.
Si convirtieras el * .WAV en FORMATO -->>>> TEXTO, que si podrias, supongamos en formato --> * .TXT (el mas comun) , de poco te serviría.
Los archivos con caracteres ASSCI, no suelen tener símbolos correspondientes para muchos números hexa menores a 1f y superiores a 7f (aproximado)
Lo que si te seria útil para empezar, seria un visor/ editor de archivos HEXA o .HEX
Despues me falta saber --->¿ A donde quieres llegar con esto ? Es decir : ¿OBJETIVO FINAL ? (para no perder tiempo en vías muertas) ;)
Buen día,
agradezco la retroalimentación. Como comenté, el oscicloscopio que adquirí guarda los datos de las formas de onda en ese formato de archivos, y no es propiamente un archivo de sonido, efectivamente es un archivo de datos. A mi me interesa tener los datos de las columnas de tiempo , voltaje canal 1 y voltaje canal 2, para así yo procesarlos, hacer cálculos posteriores en Matlab, hacer las gráficas los datos y hacer los reportes.
 
Los archivos WAV son archivos binarios que siguen un formato ya predefinido. Para convertirlo a lo que vos querés tenés que buscar la especificación del formato del archivo, leerlo y escribirlo con lo que necesites con un programa diseñado a tal efecto. Los "tiempos" que vos necesitas dependerán de la frecuencia de muestreo, así que hay que estudiar y trabajar un poco.
En los primeros mensajes está TODA la información necesaria.
 
Como comenté, el osciloscopio que adquirí guarda los datos de las formas de onda en ese formato de archivos, y no es propiamente un archivo de sonido, efectivamente es un archivo de datos.
Un archivo de datos puede ser cualquier cosa, incluso, o mejor dicho, una base de datos.
De igual forma será un archivo de datos pero codificado de cierta forma que su contenido no es legible.
Se les llama archivos binarios a aquellos archivos que abiertos con el bloc de notas solo veremos contenido binario.
Cada símbolo, letra o número que contenga representará su valor como un byte u 8 bits.
Y este hecho no quiere decir que el archivo contenga solo números, también puede tener cadenas de texto pero en su formato hexadecimal.
Lo cual hará que, un "hola" se vea así:
hola.bin.png
4 bytes representados por su correspondiente valor hexadecimal que en ASCII sería "hola"
Pero el ASCII extendido comprende símbolos hasta el 255 (1 byte u 8 bits)
Así que en computación y comunicaciones es el empleado, porque se usan los símbolos ASCII para identificar datos numéricos.
Ya que no es lo mismo enviar tres letras para recuperar el número 255 que tan solo enviar ÿ
Enviar el número 255 como texto representa enviar 3 bytes, y aparte una conversión de quien lo quiera interpretar.
Las cadenas de texto suelen ser excluidas porque de lo que se trata es de enviar información numérica y no cadenas de texto.
No es algo exclusivo pero todo depende de qué archivo se trate.
Aparte, no todos estos datos pueden ser visibles si se quieren interpretar como texto.
Pues si quieres interpretar el valor 0 o el 1, no se verá como texto, hasta cierto valor que ya no recuerdo, pero se verá como su símbolo ASCII.

Lo que pretendes puede tener cierta complejidad si desconoces el formato del archivo, ya que no es un archivo de audio .wav
Tal vez hasta pueda ser leído con el bloc de notas, o tal vez esté encriptado y comprimido, lo que hará que sea un formato que solo el osciloscopio pueda interpretar.
 
Buen día,
agradezco la retroalimentación. Como comenté, el oscicloscopio que adquirí guarda los datos de las formas de onda en ese formato de archivos, y no es propiamente un archivo de sonido, efectivamente es un archivo de datos. A mi me interesa tener los datos de las columnas de tiempo , voltaje canal 1 y voltaje canal 2, para así yo procesarlos, hacer cálculos posteriores en Matlab, hacer las gráficas los datos y hacer los reportes.
:oops::oops::oops: Pero si Matlab ya tiene la función wavread() que justamente te lee el archivo .wav y lo guarda en un vector.

PD: En Octave es audioread()
 
Da igual que sea audio o lecturas de temperatura, lo importante es que sea el .wav estándar.
En el encabezado se declara el bitrate, el número de canales y la frecuencia de muestreo, lo que necesitás para armar los vectores con las muestras y procesar.
Matlab te lo lee pero convierte las lecturas enteras a doble precisión en el rango +-1
 
Pero, a ver, espero y esta vez sí quede claro que @RicVal dejó explícito que no se trata de un archivo de audio . wav
¿No sé qué no se entiende ni por qué seguir insistiendo con analizar archivos de audio?
 
Atrás
Arriba