5
1 ANULACI ´ ON DE CANALES DE AUDIO CON MATLAB Juan Carlos Calder ´ on, Daniel Cevallos, Crist´ obal Ca ˜ narte Escuela Polit´ ecnica Nacional Software de Simulaci ´ on Resumen—En el siguiente art´ ıculo desarrollaremos un pro- grama realizado en MatLab en el cual consiste en extraer cualquier formato de audio y mediante c ´ odigos de programaci ´ on nos permit´ a suprimir canales de audio donde el usuario deci- dir ´ a cual estar ´ a activo ya sean los dos canales, el canal derecho ´ o izquierdo, para esto utilizaremos algunos Toolbox donde estos se detallaran en el transcurso del programa. 1. INTRODUCCI ´ ON Para la realizaci´ on de nuestro programa pri- mero debemos definir y ver la utilidad de cada una de las funciones y Toolbox que vamos a utilizar como son: 1.1. Toolbox mp3readwrite Este Toolbox se compone de dos carpetas las cuales son mp3read y mp3write pero nosotros mas nos enfocaremos en el funcionamiento de la funci´ on mp3read que presenta este toolbox. La funci´ on mp3read lee un archivo de audio mp3 a trav´ es del uso de un c´ odigo binario externo. Donde la sintaxis general es: Y = mp3read (’nombre.mp3’) en esta especificaci ´ on se lee un archivo de audio mp3 con codificaci ´ on en un vector al igual que wavread lee un archivo wav codificado (un canal por columna). La extensi ´ on ’.mp3’ se nade si el archivo no tiene ninguna estensi´ on. Esta funci ´ on tambi´ en acepta otros formatos como: Y = mp3read (’nombre.mp3’, N) para leer s´ olo los primeros marcos de muestreo N (donde N es un escalar), o tambi´ en los marcos de N (1) a N (2) Si N es un vector de dos elementos. Y = mp3read (’nombre.mp3’, FMT) ´ oY= mp3read (’nombre.mp3, N, FMT). Con FMT como declaraciones de ”nativos”que retorna Int16 muestras en lugar de dobles; FMT puede ser ’doble’ para el comportamiento por defecto (para reflejar exactamente la sintaxis de wavread). En nuestro caso para la realizaci´ on de nuestro programa utilizaremos la siguiente sintaxis: [Y, Fs] = mp3read (’nombre.mp3’); Donde ya concluimos que Y es un vector en el cual se almacena el formato de audio el cual var´ ıa entre valores de -1 a 1 y para reproducir nuestro archivo a la velocidad normal en la que est´ a definido este, utilizamos Fs el cual es la frecuencia de muestreo del mismo sin realizar modificaci ´ on alguna. Esta sintaxis de la funci ´ on nos permite alma- cenar nuestro archivo de audio en una matriz en la cual podemos realizar varias operaciones con esta como reproducir el audio, cambiar su frecuencia ,etc. 1.2. Funci ´ on Audioread Nos permite obtener la se ˜ nal de sonido junto con la frecuencia del archivo a leer, soporta formatos: .ogg, .mp3, .wav,.flac,.au,.mp4,.m4a. Sin embargo no es la funci´ on que nos retorna de manera ’directa’ la se ˜ nal del archivo le´ ıdo, sino que dependiendo de la extensi ´ on que utili- cemos llamar´ a a otra funci´ on para que obtenga

Trabajo Bimestral

Embed Size (px)

Citation preview

Page 1: Trabajo Bimestral

1

ANULACION DE CANALES DE AUDIO CONMATLAB

Juan Carlos Calderon, Daniel Cevallos, Cristobal CanarteEscuela Politecnica Nacional

Software de Simulacion

F

Resumen—En el siguiente artıculo desarrollaremos un pro-grama realizado en MatLab en el cual consiste en extraercualquier formato de audio y mediante codigos de programacionnos permita suprimir canales de audio donde el usuario deci-dira cual estara activo ya sean los dos canales, el canal derechoo izquierdo, para esto utilizaremos algunos Toolbox donde estosse detallaran en el transcurso del programa.

1. INTRODUCCION

Para la realizacion de nuestro programa pri-mero debemos definir y ver la utilidad de cadauna de las funciones y Toolbox que vamos autilizar como son:

1.1. Toolbox mp3readwriteEste Toolbox se compone de dos carpetas las

cuales son mp3read y mp3write pero nosotrosmas nos enfocaremos en el funcionamiento dela funcion mp3read que presenta este toolbox.La funcion mp3read lee un archivo de audiomp3 a traves del uso de un codigo binarioexterno. Donde la sintaxis general es:Y = mp3read (’nombre.mp3’) en estaespecificacion se lee un archivo de audiomp3 con codificacion en un vector al igual quewavread lee un archivo wav codificado (uncanal por columna). La extension ’.mp3’ seanade si el archivo no tiene ninguna estension.Esta funcion tambien acepta otros formatoscomo:Y = mp3read (’nombre.mp3’, N) para leer sololos primeros marcos de muestreo N (donde Nes un escalar), o tambien los marcos de N (1)

a N (2) Si N es un vector de dos elementos.Y = mp3read (’nombre.mp3’, FMT) o Y =mp3read (’nombre.mp3, N, FMT).Con FMT como declaraciones de ”nativos”queretorna Int16 muestras en lugar de dobles; FMTpuede ser ’doble’ para el comportamiento pordefecto (para reflejar exactamente la sintaxisde wavread).En nuestro caso para la realizacion de nuestroprograma utilizaremos la siguiente sintaxis:

[Y, Fs] = mp3read (’nombre.mp3’);

Donde ya concluimos que Y es un vector en elcual se almacena el formato de audio el cualvarıa entre valores de -1 a 1 y para reproducirnuestro archivo a la velocidad normal en la queesta definido este, utilizamos Fs el cual es lafrecuencia de muestreo del mismo sin realizarmodificacion alguna.Esta sintaxis de la funcion nos permite alma-cenar nuestro archivo de audio en una matrizen la cual podemos realizar varias operacionescon esta como reproducir el audio, cambiar sufrecuencia ,etc.

1.2. Funcion AudioreadNos permite obtener la senal de sonido junto

con la frecuencia del archivo a leer, soportaformatos: .ogg, .mp3, .wav,.flac,.au,.mp4,.m4a.Sin embargo no es la funcion que nos retornade manera ’directa’ la senal del archivo leıdo,sino que dependiendo de la extension que utili-cemos llamara a otra funcion para que obtenga

Page 2: Trabajo Bimestral

2

la senal y la frecuencia de la senal. Para losarchivos mp3 llamara a la funcion mp3read dela que se trato anteriormente.Sintaxis:>>[y Fs]=audioread(’nombre.extension’);Dondey: es la senal de sonido.Fs: es la frecuencia.Entre las comillas simples es necesario colocarel nombre exacto del archivo si se encuentraen la direccion de Current Folder en la que seesta trabajando, caso contrario entre las comi-llas debera ir la direccion completa del lugaren el que se encuentra el archivo, por ejemplo:>>[y Fs]=audioread(′C : \Users\PC\Desktop\audio.mp3′);Aunque para nuestro proposito basta con co-nocer la frecuencia y la senal del archivo aanalizar, la funcion audioread tambien puedeobtener una senal en un intervalo ası:>>[y Fs]=audioread(’nombre.extension’, in-tervalo);Donde intervalo necesariamente debe ser unvector de la manera: [valor inicial, valor final]La variable ’y’ almacenara la senal del archivoleıdo en forma de matriz de dos columnas porn filas (n debido a que el numero de valoresvarıa dependiendo del tiempo que dure el ar-chivo de audio). Donde a la primera columnale corresponde la senal monofasica derecha, yla segunda columna a la senal izquierda.

1.3. Funcion AudioplayerEs una de las funciones mas importantes

usadas en el proyecto, de la forma usada en elscript, la funcion nos permite crear un objetoque va a tener dos caracterısticas o parametros:

Y que puede ser un vector o matriz de doselementos conteniendo datos de matlab deun archivo de audio previamente definido.Fs que es la frecuencia del audioimportado.

Es la sintaxis mas sencilla, pero se puedenagregar mas parametros como por ejemplo losbits del audio ingresado, etc.La importancia del uso de esta funcion vienedada ya que es mucho mas manejable que

la funcion sound(Y,Fs), esto es gracias a quese puede asignar una variable a la funcionaudioplayer, de la siguiente manera:

Audio2 = audioplayer(Y,Fs)

Esta funcion permite ’playback’, es de-cir, la reproduccion de audio en segundoplano, mientras se realizan otras actividades enmatlab e incluso despues de haber terminado laejecucion del script en el que se uso la funcion.Otra caracterıstica muy importante es que lafuncion audioplayer una vez asignado su valora una variable, puede ser manipulada por otrasfunciones, como play(), stop(), resume(), estopermite que cuando se reproduzca el audio(con la funcion play()), luego de un tiempo selo pueda pausar, continuar su reproduccion, yterminar totalmente la reproduccion.

1.4. Funcion play

>>play(var)Donde var es la variable audioplayer que con-tiene la senal y la frecuencia del audio analiza-do.Ademas de que nos permite reproducir la senalalmacenada en var desde un punto de prefe-rencia hasta un punto final. Es decir:>>play(var, inicio)Donde inicio, es una variable escalar, es deciruna matriz de uno por uno, que representa laposicion desde la cual se iniciara la reproduc-cion del sonido.>>play(var,[inicio fin])Donde ahora el segundo argumento es un vec-tor que permite reproducir la senal desde unaposicion ’inicio’ hasta una posicion ’fin’.

1.5. Funcion Stop()

Es una funcion de matlab que permite dete-ner un proceso, que es el parametro de entradade la funcion, en nuestro caso, se desea detenerla reproduccion del audio que fue asignado auna variable usando la funcion audioplayer.Por ejemplo, la sintaxis usada en el script delproyecto fue:

Stop(audio2)

Page 3: Trabajo Bimestral

3

A diferencia de la funcion resume(), la funcionstop(), detiene totalmente la reproduccion delaudio ası haya estado en segundo plano, puedeser ejecutada en el script tanto como en elcomand window.

1.6. Funcion pause()Esta funcion a diferencia de la anterior

funcion Stop(),se utiliza mas en los scriptsanimados en los cuales nos permite unicamentepausar el script durante n segundos paraque el usuario digite alguna otra orden osimplemente para ejecutar de manera pausadacodigos que son muy rapidos, la sintaxis de lasiguiente funcion es:

pause(n);

1.7. Funcion resume()Esta es una funcion de matlab que nos

permite resumir una pausa de grabacion o dela ejecucion de algun script, la sintaxis de estafuncion es la siguiente:

resume (obj)

Donde esta continua registrando desde la ubi-cacion en pausa.

2. REALIZACION DEL PROGRAMA

2.1. Estructura basica del scriptclc;

clear all;close all;% lazo y auxiliar que nos permite hacerrepetitivo al programaaux=1;while aux==1% Despliegue del menudisp(’1.- Reproducir canal derecho ’);disp(’2.- Reproducir canal izquierdo ’);disp(’3.- Reproducir los dos canales ’);disp(’4.- Salir ’);%lazo y variable inicial (condicion del segundolazo repetitivo)aux3=1;while aux3==1

% variable que almacena la opcion deseadao=input(’Escoja la opcion requerida ’);% condiciones para romper el lazoif o >= 1 & & o <= 4aux3=2;elsedisp(’ingrese una opcion valida ’)endend% Control del menu

switch o

% primer casocase 1% ingreso del nombre de la cancion, lanotacion ”,’s’”sirve para que no sea necesarioel ingreso de comillas con el nombre de lacancionnombre=input(’ingrese el nombre de lacancion: ’,’s’);% uso del toolbox mencionado anteriormente.[Y Fs] = mp3read(nombre);% una variable dim va a almacenar el tamanode Y para poder usarlo en el lazo fordim=size(Y);% realizamos un lazo for hasta la dimensionde la matriz Y, en este caso en la columna 1por ser el canal derechofor i=1:dim(1)% se llena de ceros la primera fila de Y paraanular el canalY(i,1)=0;end% a una variable audio2 se le asigna la funcionaudioplayer con los valores de Y y Fsaudio2=audioplayer(Y,Fs);% se reproduce audio2 mediante la funcionplay(audio2)play(audio2);% condicion inicial para el lazo repetitivoo2=1;% lazo repetitivo para detener el audiowhile o2==1% condicion inicialaux2=1;% lazo repetitivo para solicitar la opcion dedetener el audiowhile aux2==1% una variable o2 que almacena el valor para

Page 4: Trabajo Bimestral

4

interpretarlo si desea detener el audioo2=input(’si desea detener el audio presione1: ’);% condicion para romper el lazoif o2==1% romper el lazoaux2=2;o2=2;else% si la opcion ingresada es incorrecta, sedespliega el mensaje solicitando otradisp(’ingrese una opcion valida’)endend% una vez que salga de los lazos significa quesolicito detener el audio, por lo que se usa lafuncion stop(audio2)stop(audio2)end

case 2% en el caso 2 el procedimiento es igual que elanterior, solo varıa en el lazo for, al llenar unacolumna con cero sera la numero 2 en lugarde la primeranombre=input(’ingrese el nombre de lacancion: ’,’s’);[Y Fs] = mp3read(nombre);dim=size(Y);for i=1:dim(1);% se anula la segunda columnaY(i,2)=0;endaudio2=audioplayer(Y,Fs);play(audio2);o2=1;while o2==1aux2=1;while aux2==1o2=input(’si desea detener el audio presione1: ’);if o2==1aux2=2;o2=2;elsedisp(’ingrese una opcion valida’)endendstop(audio2)end

case 3

% en este caso, el proceso es el mismo,lo unico que varıa es que no es necesarioimplementar el lazo for, ya que no se va aanular ningun canal del audio ingresado

nombre=input(’ingrese el nombre de la can-cion: ’,’s’);[Y Fs] = mp3read(nombre);dim=size(Y);audio2=audioplayer(Y,Fs);play(audio2);o2=1;while o2==1aux2=1;while aux2==1o2=input(’si desea detener el audio presione1: ’);if o2==1aux2=2;o2=2;elsedisp(’ingrese una opcion valida’)endendstop(audio2)endcase 4% condicion para terminar el lazo repetitivo delmenuaux=2;otherwise% mensaje en el caso de que ingrese una opciondel menu fuera del rangodisp(’La opcion ingresada no es correcta, porfavor ingrese una opcion valida: ’);% termino del switchend% simplemente es un espacio en blanco paradiferenciar mejor cada ejecucion por separadodisp(’ ’)% termino del lazo repetitivo del menuend

2.2. Vista del programa ejecutadoAquı podemos observa como el programa

nos presenta el menu en el cual el usuario de-bera escojer una opcion y esta ejecutara segunlo programado anteriormente.

Page 5: Trabajo Bimestral

5

3. CONCLUSIONES

En el transcurso del proyecto realizadopodemos citar las siguientes conclusiones:

Para realizar la impotacion del archivo enformato .mp3 a Matlab normalmente nonos proporciona una funcion definididapara realizar dicha exportacion por lo quetenemos que descargar el Toolbox e insta-larlo para poder ejecutar el programa.Todo archivo que va a ser exportado amatlab debe estar en el Current Folder enel cual estamos trabajando.La utilizacion de lazos infinitos en el modode programacion fue necesario para intro-ducir los comandos para pausar, detenery volver a reproducir el audio exportado.Para la supresion de los canales de audiolo unico que se realiza es llenar de ceroslos valores del canal ya que matlab trabajacon matrices y al momento de llenarlo conceros se suprimiran todos estos valores.

4. APLICACIONES

Gracias al toolbox instalado podemos nosolo obtener la senal de un archivo desonido en un solo formato sino tambien,obtener la senal de otros tipos de archivos.Con la senal digitalizada podemos modifi-car cualquier parametro que esta contega,esta opcion suele ser muy util en cuanto acreacion de efectos especiales.En cuanto a una aplicacion mas profesio-nal, se “refinan” los sonidos muestreadospara crear un sonido claro y sin distorsio-nes, como es el caso de la grabacion deuna cancion en un estudio.

Se podrıa encriptar y desencriptar el so-nido obtenido, simplemente variando lafrecuencia y realizando operaciones a cadamuestra de senal obtenida.

5. BIBLIOGRAFIAhttp://www.mathworks.com/matlabcentral/fileexchange/32894-audioread-unified-audio-file-input-functionhttp://www.mathworks.com/matlabcentral/fileexchange/13852-mp3read-and-mp3write/content/mp3readwrite/html/demo mp3readwrite.htmlHerramienta Help en la interfaz ComandWindow de matlab.

6. BIOGRAFIAS

Juan Carlos Calderon Sierra Nacio enQuito-Ecuador el 10 de Octubre de 1992.Estudios secundarios realizados en el Co-legio Instituto Nacional Mejıa actualmenteestudiante de la Escuela Politecnica Nacio-nal cursando el 4to semestre en Ingenierıaen Electronica y Control.

Daniel Alejandro Cevallos ZamboninoNacio el 27 de septiembre de 1993 enla ciudad de Salcedo-Cotopaxi en Ecua-dor, realizo sus estudios Secundarios en laUnidad educativa “Hermano Miguel” –La-tacunga, actualmente se encuentra estu-diando Ingenierıa en Electronica y Controlen la Escuela Politecnica Nacional.

Cristobal Elıas Canarte Allauca Nacio enla ciudad de Quito- Ecuador el 09 de no-viembre de 1993. Realizo sus estudios se-cundarios en el Colegio Borja No3 Cava-nis, actualmente se encuentra estudiandoIngenierıa en Electronica y Control en laEscuela Politecnica Nacional.