{"id":10303,"date":"2015-07-18T09:40:43","date_gmt":"2015-07-18T14:40:43","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/ccpg1001\/?p=10303"},"modified":"2026-04-06T15:04:55","modified_gmt":"2026-04-06T20:04:55","slug":"archivos-wav-audio","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/fp-u08\/archivos-wav-audio\/","title":{"rendered":"8.3 Archivos.wav - Audio abrir\/gr\u00e1fica"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p><a href=\"#abrir\">Abrir<\/a><\/p>\n\n\n\n<p><a href=\"#librerias\">librer\u00edas<\/a><\/p>\n\n\n\n<p><a href=\"#segmentos\">segmentos<\/a><\/p>\n\n\n\n<p><a href=\"#guardar\">guardar<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p>Los conceptos de arreglos como vectores y matrices son suficientes para manejar archivos.wav. con la librer\u00eda <a href=\"https:\/\/blog.espol.edu.ec\/ccpg1001\/descargas\/pip-instalar-librerias\/#scipypip\">Scipy<\/a>-Python.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"abrir\">Leer o Abrir archivo.wav de audio<\/h2>\n\n\n\n<p>Para procesar un archivo de audio en formato <em><strong>.wav<\/strong><\/em>, la instrucci\u00f3n <code>waves.read(archivo)<\/code> usa el <strong><em>archivo<\/em><\/strong> con 'nombre.wav' y obtiene dos variables que representan:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em><strong>muestreo<\/strong><\/em>: frecuencia de muestreo del sonido en PCM y<\/li>\n\n\n\n<li><strong><em>sonido<\/em><\/strong>: que es un arreglo con las muestras del sonido.<\/li>\n<\/ul>\n\n\n\n<p>El archivo de audio debe encontrarse en el mismo directorio que el archivo.py de instrucciones, por ejemplo, dado el archivo 'Alarm01.wav' , se puede procesar con las instrucciones mostradas:<\/p>\n\n\n\n<p><a href=\"https:\/\/www.dropbox.com\/s\/23vfom29ee7bxbd\/Alarm01.wav?dl=0\">Alarm01.wav<\/a><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Abrir un archivo de audio .wav\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport scipy.io.wavfile as waves\n\n# INGRESO \narchivo = 'Alarm01.wav'\nmuestreo, sonido = waves.read(archivo)\n\n<\/pre><\/div>\n\n\n<p>con lo que se obtiene:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; muestreo\n22050\n&gt;&gt;&gt; sonido\narray(&#091;&#091;0, 0],\n       &#091;0, 0],\n       &#091;0, 0],\n       ..., \n       &#091;0, 0],\n       &#091;0, 0],\n       &#091;0, 0]], dtype=int16)\n&gt;&gt;&gt; np.shape(sonido)\n(122868, 2)<\/code><\/pre>\n\n\n\n<p>En el ejemplo, la frecuencia de muestreo es de 22050 Hz. El sonido es est\u00e9reo al tener dos columnas que corresponden a los canales izquierdo y derecho.<\/p>\n\n\n\n<p>Para usar un solo canal, se copian los datos a un nuevo arreglo. Para separar el canal izquierdo por ejemplo, se usan las instrucciones:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; izquierdo=sonido&#091;:,0].copy()\n&gt;&gt;&gt; izquierdo\narray(&#091;0, 0, 0, ..., 0, 0, 0], dtype=int16<\/code><\/pre>\n\n\n\n<p>Con lo que se tienen los datos listos para ser procesados.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"otro-ejemplo-de-archivo-wav-de-audio\">Otro ejemplo de archivo.wav de audio<\/h3>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2015\/07\/archivowav_graficacanal01.png\" alt=\"archivo wav gr\u00e1fica canal 01\" class=\"wp-image-16155\" \/><\/figure>\n\n\n\n<p>Con los datos se pueden graficar las ondas de sonido como la mostrada en la imagen.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/www.dropbox.com\/s\/vcrn2xq9zg7k8fc\/muestra_Invernal01.wav?dl=0\"><strong><em>muestra_Invernal01<\/em><\/strong><strong><em>.wav<\/em><\/strong><\/a><\/p>\n\n\n\n<p>El formato .wav es el m\u00e1s simple de manejar pues contiene directamente los datos de las muestras de sonido similar a la mostrada en la figura.<\/p>\n\n\n\n<p>El primer par\u00e1metro a obtener es la frecuencia de muestreo en Hz, o cu\u00e1ntas muestras por segundo se realizan, y luego los datos del sonido.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Abrir un archivo de audio .wav\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport scipy.io.wavfile as waves\n\n# INGRESO \n# archivo = input('archivo de sonido:' )\narchivo = 'muestra_Invernal01.wav'\nmuestreo, sonido = waves.read(archivo)\n\n# PROCEDIMIENTO\ntamano=np.shape(sonido)\ncanales=len(tamano)\ntipo = 'est\u00e9reo'\nif (canales&lt;2):\n    tipo = 'monof\u00f3nico'\nduracion = len(sonido) \/muestreo\n\n# SALIDA\nprint('muestreo (Hz) : ',muestreo)\nprint('canales: ' + str(canales) + ' tipo ' + tipo )\nprint('duraci\u00f3n (s): ',duracion)\nprint('tama\u00f1o de matriz: ', tamano)\nprint(sonido)\nplt.plot(sonido)\nplt.show()\n<\/pre><\/div>\n\n\n<p>Con lo que obtiene la gr\u00e1fica mostrada al inicio y los siguientes resultados:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>muestreo (Hz) :  44100\ncanales: 2 tipo est\u00e9reo\nduraci\u00f3n (s):  15.0\ntama\u00f1o de matriz:  (661500, 2)\n&#091;&#091;-4355 -4561]\n &#091;-4353 -4572]\n &#091;-4347 -4578]\n ..., \n &#091;  120  1008]\n &#091;  124   993]\n &#091;  100   935]]<\/code><\/pre>\n\n\n\n<p><strong><em>Referencias<\/em><\/strong>:<br><a href=\"https:\/\/docs.scipy.org\/doc\/scipy-0.19.1\/reference\/generated\/scipy.io.wavfile.read.htm\">https:\/\/docs.scipy.org\/doc\/scipy-0.19.1\/reference\/generated\/scipy.io.wavfile.read.html<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p><a href=\"#abrir\">Abrir<\/a><\/p>\n\n\n\n<p><a href=\"#librerias\">librer\u00edas<\/a><\/p>\n\n\n\n<p><a href=\"#segmentos\">segmentos<\/a><\/p>\n\n\n\n<p><a href=\"#guardar\">guardar<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"librerias\">Librer\u00edas para tratamiento de audio<\/h2>\n\n\n\n<p>la librer\u00eda de funciones <strong><em>scipy<\/em> <\/strong>(scientific python), dispone de funciones para el tratamiento de se\u00f1ales, estad\u00edsticas, audio, entre otras.<\/p>\n\n\n\n<p>El orden de las instrucciones es el que aparece en los post del blog.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>import scipy.io.wavfile as <strong>waves<\/strong><\/td><td>librer\u00edas de audio en formato wav para lectura y escritura de archivos.<\/td><\/tr><tr><td><em>muestreo<\/em>, <em>sonido<\/em> = <strong>waves<\/strong>.<strong>read<\/strong>(<em>archivo<\/em>)<\/td><td>lectura de datos de un <em>archivo<\/em> de audio en formato wav. Se obtiene la frecuencia de <em>muestreo<\/em> y los datos en <em>sonido<\/em><\/td><\/tr><tr><td>import scipy.integrate as <em><strong>integrate<\/strong><\/em><\/td><td>importar m\u00e9todos de integraci\u00f3n de scipy<\/td><\/tr><tr><td><strong><em>integrate<\/em><\/strong>.<strong>simps<\/strong>(valrores, ejex)<\/td><td>integral de muestras de se\u00f1al usando el m\u00e9todo de Simpson.<\/td><\/tr><tr><td>.<\/td><td>.<\/td><\/tr><tr><td>.<\/td><td>.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p><a href=\"#abrir\">Abrir<\/a><\/p>\n\n\n\n<p><a href=\"#librerias\">librer\u00edas<\/a><\/p>\n\n\n\n<p><a href=\"#segmentos\">segmentos<\/a><\/p>\n\n\n\n<p><a href=\"#guardar\">guardar<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"segmento\">Extraer segmento de audio y guardar archivo.wav<\/h2>\n\n\n\n<p>Para extraer una porci\u00f3n de un archivo de audio se requiere: abrir el archivo, seleccionar la porci\u00f3n de inter\u00e9s y guardar el resultado un archivo de salida.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"565\" height=\"455\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2015\/07\/archivowav_graficacanal02.png\" alt=\"archivo wav gr\u00e1fica canales\" class=\"wp-image-16156\" \/><\/figure>\n\n\n\n<p>archivo origen: <a href=\"https:\/\/www.dropbox.com\/s\/vcrn2xq9zg7k8fc\/muestra_Invernal01.wav?dl=0\"><strong><em>muestra_Invernal01.wav<\/em><\/strong><\/a><\/p>\n\n\n\n<p>archivo resultado:<a href=\"https:\/\/www.dropbox.com\/s\/8acvvfywex2ulcx\/muestra_Invernal02.wav?dl=0\"><strong><em> muestra_Invernal02.wav<\/em><\/strong><\/a><\/p>\n\n\n\n<p>La porci\u00f3n puede ser indicada en unidades de tiempo que luego deben ser convertidas a \u00edndices de muestras para extraer la porci\u00f3n requerida.<\/p>\n\n\n\n<p>El procesamiento del archivo simplificado en Python es:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Extrae porci\u00f3n de un archivo de audio .wav\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport scipy.io.wavfile as waves\n\n# INGRESO \n# archivo = input('archivo de sonido:' )\narchivo = 'muestra_Invernal01.wav'\narchivosalida = 'muestra_Invernal02.wav'\n# tiempo en segundos\ndesde = 7.5\nhasta = 10.2\n\nmuestreo, sonido = waves.read(archivo)\n\n# PROCEDIMIENTO\n# indices de muestras\nidesde = int(desde*muestreo)\nihasta = int(hasta*muestreo)\nporcion = sonido&#x5B;idesde:ihasta,:]\nduracion = len(porcion)\/muestreo\n\n# SALIDA\nwaves.write(archivosalida, muestreo, porcion)\nprint('archivo creado: ', archivosalida)\n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p><a href=\"#abrir\">Abrir<\/a><\/p>\n\n\n\n<p><a href=\"#librerias\">librer\u00edas<\/a><\/p>\n\n\n\n<p><a href=\"#segmentos\">segmentos<\/a><\/p>\n\n\n\n<p><a href=\"#guardar\">guardar<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"guardar\">Guardar un archivo de audio .wav<\/h2>\n\n\n\n<p>Luego de procesar los datos de audio, y guardar el resultado en un <strong><em>archivo<\/em><\/strong> con 'nombre.wav' se usa la instrucci\u00f3n <code>waves.write()<\/code> de la librer\u00eda scipy, que requiere:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><em>archivo<\/em><\/strong>: el nombre del archivo resultante, con extensi\u00f3n.wav<\/li>\n\n\n\n<li><strong><em>fsonido<\/em><\/strong>: la frecuencia de muestreo del sonido (entero)<\/li>\n\n\n\n<li><em><strong>sonido<\/strong><\/em>: el arreglo de la se\u00f1al de audio como entero de 16 bits (dtype='int16').<\/li>\n<\/ul>\n\n\n\n<p>Recuerde haber realizado el llamado a las librer\u00edas Numpy y Scipy que se presentan como referencia en el script.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# PROCEDIMIENTO\n# Arreglos para datos con k muestras\nsonidofinal = np.zeros(k, dtype='int16')\n\n# SALIDA\narchivo = 'audiofinal.wav'\nwaves.write(archivo, int(fsonido),sonidofinal)\n<\/pre><\/div>\n\n\n<p>El archivo de audio resultante se escuchar\u00e1 usando un programa como \"<em><strong>windows media player<\/strong><\/em>\"<\/p>\n\n\n\n<p><em>Notas<\/em>:<br>Se puede a\u00f1adir al nombre la ruta de ubicaci\u00f3n del archivo en el disco duro. Ejemplo para windows: '<em>C:\\Users\\mis documentos\\archivo.wav<\/em>'<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"grafica\">Gr\u00e1fica de un canal de audio<\/h2>\n\n\n\n<p>Para mostrar en un gr\u00e1fico un canal de audio se usa la librer\u00eda matplotlib. Para muestra, usando los datos del ejemplo anterior:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\nizquierdo = sonido&#x5B;:,0].copy()\n\n# SALIDA grafica\nplt.plot(izquierdo)\nplt.show()\n<\/pre><\/div>\n\n\n<p>con lo que se obtiene la siguiente gr\u00e1fica:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"375\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2015\/07\/archivowav_graficacanal03.png\" alt=\"archivo wav gr\u00e1fica canal 01 segmento\" class=\"wp-image-16157\" \/><\/figure>\n\n\n\n<p>Con lo que se puede revisar la forma de la se\u00f1al de audio<\/p>\n\n\n\n<p><strong>Ejercicio<\/strong><\/p>\n\n\n\n<p>Si el archivo de origen es est\u00e9reo, extraer un solo canal y convertirlo a monof\u00f3nico.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p>El manejo de archivo de audio en formato wav permite analizar varios conceptos como , en los cursos de <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/senales\/\">Se\u00f1ales y Sistemas<\/a> y Procesos estoc\u00e1sticos:<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u01\/sigma-delta-con-audio\/\" data-type=\"post\" data-id=\"299\">Modulaci\u00f3n Sigma Delta<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u01\/senales-de-energia-y-potencia\/\" data-type=\"post\" data-id=\"67\">Se\u00f1ales de energ\u00eda y potencia<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-unidades\/ss-u01\/senales-analogicas-y-digitales\/\" data-type=\"post\" data-id=\"25\">Se\u00f1ales Anal\u00f3gicas y Digitales<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/stp-aplica\/senal-sonido-correlacion-2senales\/\" data-type=\"post\" data-id=\"1481\">Correlaci\u00f3n(se\u00f1al01,se\u00f1al02)<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/stp-aplica\/morse-generador-de-tonos\/\" data-type=\"post\" data-id=\"42\">Morse - Generador de Tonos<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: <a href=\"https:\/\/docs.scipy.org\/doc\/scipy-0.19.1\/reference\/generated\/scipy.io.wavfile.write.html\">https:\/\/docs.scipy.org\/doc\/scipy-0.19.1\/reference\/generated\/scipy.io.wavfile.write.html<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p><a href=\"#abrir\">Abrir<\/a><\/p>\n\n\n\n<p><a href=\"#librerias\">librer\u00edas<\/a><\/p>\n\n\n\n<p><a href=\"#segmentos\">segmentos<\/a><\/p>\n\n\n\n<p><a href=\"#guardar\">guardar<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>Abrir librer\u00edas segmentos guardar gr\u00e1fica Los conceptos de arreglos como vectores y matrices son suficientes para manejar archivos.wav. con la librer\u00eda Scipy-Python. Leer o Abrir archivo.wav de audio Para procesar un archivo de audio en formato .wav, la instrucci\u00f3n waves.read(archivo) usa el archivo con 'nombre.wav' y obtiene dos variables que representan: El archivo de audio [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-fp-unidades","format":"standard","meta":{"footnotes":""},"categories":[109],"tags":[],"class_list":["post-10303","post","type-post","status-publish","format-standard","hentry","category-fp-u08"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/10303","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/comments?post=10303"}],"version-history":[{"count":6,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/10303\/revisions"}],"predecessor-version":[{"id":24128,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/10303\/revisions\/24128"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=10303"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=10303"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=10303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}