Matlab - SONIDO EN LA GUIDE DE MATLAB

 
Vista:
sin imagen de perfil

SONIDO EN LA GUIDE DE MATLAB

Publicado por joan (31 intervenciones) el 06/05/2018 02:28:44
Buen día la presente es para preguntar como reproduzco música en la guide de matlab y que con un botton la reproduzca y con otro botton la detenga, tengo el codigo de la siguiente manera pero en el comant window de matlab, es una programación orientada a objetos y pues cuando la paso a la guide no me reproduce la canción entonces no se como hacerlo, y ademas de eso agregar el botton de pausa que pues lo he pensado pero no se como relacionar un botton con otro botton que quede igual que en el código que presento a continuación o similar:

1
2
3
4
5
6
7
8
9
nombre1='Maid with the Flaxen Hair.mp3';
in_play=nombre1;
[y,Fs]=audioread(in_play);
player=audioplayer(y,Fs);
play(player);
pausa=input('ingrese:');
 if (pausa==1)
pause(player);
end

y simplemente en la guide cree un botton donde me muestra el display de la canción pero al ponerle este comando para que me la reproduzca no lo hace, y no se porque. El que me pueda colaborar con un comando o el decirme en que estoy fallando se lo agradeceria mucho
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SONIDO EN LA GUIDE DE MATLAB

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 06/05/2018 21:19:55
con guide funciona diferente porque cada función de un Guide es privada, por lo tanto, debe pasar el objeto a través del handles, aquí le dejo un ejemplo funcional que puede descargar, con base a su código
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

SONIDO EN LA GUIDE DE MATLAB

Publicado por Jhoan (31 intervenciones) el 07/05/2018 01:29:54
Muchísimas gracias, analizando el código le pude agregar un button que me parara totalmente el reproductor, pero ahora tengo otra duda y perdone la molestia pero es la siguiente:

1
2
3
if get(hObject,'Value')==1
   set(handles.text2,'String','Lista de canciones: ')
end
Con base a lo que analice del código logre que cuando presione el pushbutton2 aparezca ese mensaje en pantalla, pero yo quiero estoy tratando de que sea con while para que me reproduzca una lista de canciones que ya logre hacer que funcionara en el comant window, pero al pasarlo a la guide no se me ocurre de que forma hacer mostrar las canciones, cabe resaltar que ya dentro del programa de la guide cree un vector tipo array.Si entonces me gustaría que mostrara una lista de canciones
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SONIDO EN LA GUIDE DE MATLAB

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 07/05/2018 02:24:32
para mostrar la lista de canciones te recomiendo que lo hagas en un popupmenu y vayas seleccionando la que se va reproduciendo, todo esto desde el mismo botón
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

SONIDO EN LA GUIDE DE MATLAB

Publicado por Jhoan (31 intervenciones) el 07/05/2018 20:31:44
muchisimas gracias, una ultima pregunta ¿Como puedo yo añadir un comando en el cual me recorra una matriz? para simular el botton siguiente y el de atrás de una canciones yo cree esta matriz:
dim=[1
length(nombre1)
length(nombre1)+length(nombre2)
length(nombre1)+length(nombre2)+length(nombre3)];

en la cual nombre1 2 y 3 ya tienen asignadas sus respectivas canciones, pero no logro que recorra la matriz de tal forma que pueda pasar de una canción a otra.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SONIDO EN LA GUIDE DE MATLAB

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 07/05/2018 22:05:57
1
2
3
4
5
6
7
nombres={'Maid with the Flaxen Hair.mp3' 'Voz_016.mp3' 'cortado.mp3'};
handles.k=handles.k+1;
in_play=nombres{k};
[y,Fs]=audioread(in_play);
player=audioplayer(y,Fs);
play(player);
guidata(hObject, handles);

este sería el botón siguiente, en la función OpeningFcn debes inicializar el valor de handles.k como 1 , para que no te dé error cuando lo ejecutes por primera vez y en nombres debes tener todas las canciones , aunque con la función dir puedes obtener todos los archivos mp3 de tu directorio, así :

1
2
a=dir('*mp3');
nombres={a.name};
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

SONIDO EN LA GUIDE DE MATLAB

Publicado por Jhoan (31 intervenciones) el 07/05/2018 22:29:39
Muchas gracias nuevamente, pero con este comando lo que de verdad necesito es que me de un botton para siguiente y otro botton para atras, entonces no se si con este comando funcione en ambos casos, muchas garcias nuevamente.

a=dir('*mp3');
nombres={a.name};
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SONIDO EN LA GUIDE DE MATLAB

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 08/05/2018 00:02:45
claro que funciona porque lo que define un siguiente y un después no va a ser eso sino el handles.k

así en el botón siguiente tendrá un

1
handles.k=handles.k+1;


y en al anterior un

1
handles.k=handles.k-1;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

SONIDO EN LA GUIDE DE MATLAB

Publicado por Jhoan (31 intervenciones) el 08/05/2018 00:09:32
Pero de hacerlo con k estariamos hablando de el siguiente codigo:nombres={'Maid with the Flaxen Hair.mp3' 'Voz_016.mp3' 'cortado.mp3'};
1
2
3
4
5
6
handles.k=handles.k+1;
in_play=nombres{k};
[y,Fs]=audioread(in_play);
player=audioplayer(y,Fs);
play(player);
guidata(hObject, handles);

O es ese mas el comando dir? Y no entendí como definir k=1 que pena.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SONIDO EN LA GUIDE DE MATLAB

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 08/05/2018 00:21:41
hay una función en el código que usted tiene que lleva en el nombre OpeningFunction, aquí debe inicializar la variable handles.k , ya que esta es la primera función que se ejecuta al correr el guide entonces quedaría algo como esto :

1
2
3
4
5
6
7
8
9
10
11
12
13
function ejemplo_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to ejemplo (see VARARGIN)
 
% Choose default command line output for ejemplo
handles.k=1;
handles.output = hObject;
 
% Update handles structure
guidata(hObject, handles);

esto hace que la variable handles.k exista y tenga como valor inicial 1 para cuando le dé reproducir la primera canción pueda reproducirse, en esta función es que debe agregar la línea que falta handles.k=1;

con respecto a lo otro tiene dos opciones o escribe los nombres de las canciones así como el ejemplo o utiliza el comando dir para obtener todos los archivos .mp3 de su directorio, es decir, que o define los nombres así

1
nombres={'Maid with the Flaxen Hair.mp3' 'Voz_016.mp3' 'cortado.mp3'};%aquí lista de canciones

o así

1
2
a=dir('*mp3');
nombres={a.name};%obtener lista automáticamente 
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

SONIDO EN LA GUIDE DE MATLAB

Publicado por joan (31 intervenciones) el 08/05/2018 00:29:02
Listo ahora entiendo mejor, pero al hacerlo :
1
2
3
4
5
6
7
nombres={'Maid with the Flaxen Hair.mp3' 'Voz_016.mp3' 'cortado.mp3'};
handles.k=handles.k+1;
in_play=nombres{k};
[y,Fs]=audioread(in_play);
player=audioplayer(y,Fs);
play(player);
guidata(hObject, handles);

no estaria definido la k de la siguiente linea de codigo in_play=nombres{k}; deberia ser handles.k
supongo o que es lo que sucede?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JESUS DAVID
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SONIDO EN LA GUIDE DE MATLAB

Publicado por JESUS DAVID (1818 intervenciones) el 08/05/2018 01:20:35
Correcto debería ser handles.k, ahí se me pasó el handles
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

SONIDO EN LA GUIDE DE MATLAB

Publicado por joan (31 intervenciones) el 08/05/2018 01:34:07
disculpa pero al hacerlo me sale este error y no se porque:

Reference to non-existent field 'k'.

Error in ejemplo>togglebutton4_Callback (line 204)
handles.k=handles.k+1;
cabe recalcar que asi utilice el comando que me brindo:

1
2
3
4
5
6
7
8
9
10
11
12
13
function togglebutton4_Callback(hObject, eventdata, handles)
% hObject    handle to togglebutton4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 
% Hint: get(hObject,'Value') returns toggle state of togglebutton4
nombres={'Maid with the Flaxen Hair.mp3' 'Voz_016.mp3' 'cortado.mp3'};
handles.k=handles.k+1;
in_play=nombres{handles.k};
[y,Fs]=audioread(in_play);
player=audioplayer(y,Fs);
play(player);
guidata(hObject, handles);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SONIDO EN LA GUIDE DE MATLAB

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 08/05/2018 02:03:56
ese error se debe a que no está bien inicializada la variable en la función OpeningFcn como le dije
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

SONIDO EN LA GUIDE DE MATLAB

Publicado por joan (31 intervenciones) el 08/05/2018 02:14:09
creo que ya lo acomode y me sale este error:

Error using audioread (line 74)
The filename specified was not found in the MATLAB path.

Error in ejemplo>togglebutton4_Callback (line 207)
[y,Fs]=audioread(in_play);

Error in gui_mainfcn (line 95)
feval(varargin{:});

Error in ejemplo (line 42)
gui_mainfcn(gui_State, varargin{:});

Error in matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)ejemplo('togglebutton4_Callback',hObject,eventdata,guidata(hObject))

Error while evaluating UIControl Callback

Y pues la parte de agregar el handles.k la agregue asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function ejemplo_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to ejemplo (see VARARGIN)
 
% Choose default command line output for ejemplo
handles.k=1;%se definio esta variable para pasar las canciones
handles.output = hObject;
 
% Update handles structure
guidata(hObject, handles);
 
% UIWAIT makes ejemplo wait for user response (see UIRESUME)
% uiwait(handles.figure1);
 
 
% --- Outputs from this function are returned to the command line.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SONIDO EN LA GUIDE DE MATLAB

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 08/05/2018 02:18:53
ahí te está diciendo que el archivo no fue encontrado puesto que seguramente Voz_016.mp3 es un archivo que seguramente no tienes en tu carpeta, debes agregar en la lista los nombres de archivos de tus canciones para que te pueda resultar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

SONIDO EN LA GUIDE DE MATLAB

Publicado por Jhoan (31 intervenciones) el 08/05/2018 05:27:28
No había notado ese detalle, muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

SONIDO EN LA GUIDE DE MATLAB

Publicado por joan (31 intervenciones) el 08/05/2018 05:44:30
Disculpa ahora el problema que me genera es la dimension de la matriz y pues estoy colocando solo las 3 canciones del vector
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

SONIDO EN LA GUIDE DE MATLAB

Publicado por Jhoan (31 intervenciones) el 08/05/2018 18:36:55
Sucede que dice que excede el tamaño de la matriz.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SONIDO EN LA GUIDE DE MATLAB

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 08/05/2018 20:21:53
eso sucede cuando le das siguiente y ya no hay más canciones por reproducir, si yo hago esto

a=[1 2 3];
a(4)
obtengo el mismo error : Index exceeds matrix dimensions.

por eso si hay 3 canciones en la lista y el handles.k llega a 4 te va a dar ese error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

SONIDO EN LA GUIDE DE MATLAB

Publicado por joan (31 intervenciones) el 08/05/2018 20:27:33
Si, pense en ello, pero si esta reproduciendo la primera cancion no deberia seguir, y pues segun rso el codigo no rrecorre la matriz?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SONIDO EN LA GUIDE DE MATLAB

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 08/05/2018 20:42:03
No recorre la matriz mientras no pulses siguiente, te recomiendo antes de implementar algo investigues cómo funciona, tecleando doc más la función en la lista de comandos, por ejemplo
1
doc play
y te va a llevar a una documentación donde puedes ver ejemplos sobre como funciona cada comando, así una vez tengas claridad en algunas cosas, formulas tus dudas de manera más específica en el foro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

SONIDO EN LA GUIDE DE MATLAB

Publicado por Jhoan (31 intervenciones) el 09/05/2018 02:31:03
Muchas gracias, si estaba trabajando bien pero estaba pesado el codigo y por eso los errores.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

SONIDO EN LA GUIDE DE MATLAB

Publicado por joan (31 intervenciones) el 10/05/2018 15:28:30
Disculpa, pero solo se desplaza si presiono el boton hasta 3 veces es decir llega a la posicion (1,3) y si lo presiono una vez mas me dice que la matriz sobre pasa la dimension y bueno es logico porque ya estoy recorriendo una posicion mas de la matriz y trate de arreglar el error con un if diciendo if handles.k==1
Pero me tira el mismo error y lo que quiero es que cuando llegue a la posicion 1,3 y le de siguiente otra vez arranque de nuevo en la posicion 1,1 y me recorra de nuevo la matriz
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

SONIDO EN LA GUIDE DE MATLAB

Publicado por joan (31 intervenciones) el 10/05/2018 15:42:43
Dentro del if yo puse fue todo el comando lo voy a intentar muchas gracias estaba pensando lo mismo con el de botton de devolver
Estaria bien entonces:
If handles.k==0
Handles.k=3
End
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

SONIDO EN LA GUIDE DE MATLAB

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 10/05/2018 16:12:31
correcto para el caso de que dé 0 y quieras ponerlo en la última está bien así, aunque ten cuidado con las mayúsculas para que no te dé ningún error
1
2
3
if handles.k==0
handles.k=3;
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar