Matlab - gui para grabar

   
Vista:

gui para grabar

Publicado por Israel (21 intervenciones) el 30/10/2015 04:37:37
Hola amigos, soy nuevo en este foro y les ruego me ayuden. Mi problema es el siguiente, deseo hacer un programa con una gui de matlab que me permita introducir el tiempo de grabación.
Copié el script de un miembro de este foro para grabar audio que resulto muy bien, el problema es que al hacer el GUI me crea otro script, y no puedo pasar la variable del intervalo de tiempo que quiero grabar al otro script, no se si me entienden. Dejo el código del script del GUI primero, y luego del script que realiza la grabacion de audio.
Gracias de antemano.

function varargout = pruebagui(varargin)
% PRUEBAGUI MATLAB code for pruebagui.fig
% PRUEBAGUI, by itself, creates a new PRUEBAGUI or raises the existing
% singleton*.
%
% H = PRUEBAGUI returns the handle to a new PRUEBAGUI or the handle to
% the existing singleton*.
%
% PRUEBAGUI('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in PRUEBAGUI.M with the given input arguments.
%
% PRUEBAGUI('Property','Value',...) creates a new PRUEBAGUI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before pruebagui_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to pruebagui_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help pruebagui

% Last Modified by GUIDE v2.5 29-Oct-2015 21:44:51

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @pruebagui_OpeningFcn, ...
'gui_OutputFcn', @pruebagui_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before pruebagui is made visible.
function pruebagui_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 pruebagui (see VARARGIN)

% Choose default command line output for pruebagui
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes pruebagui wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = pruebagui_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


function tiempo_Callback(hObject, eventdata, handles)
% hObject handle to tiempo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of tiempo as text
% str2double(get(hObject,'String')) returns contents of tiempo as a double
global A;
A=str2double(get(hObject,'String'));

% --- Executes on button press in rec.
function rec_Callback(hObject, eventdata, handles)
global A;
% hObject handle to rec (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
grabacion;



% --- Executes during object creation, after setting all properties.
function tiempo_CreateFcn(hObject, eventdata, handles)
% hObject handle to tiempo (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end















function [senal_salida,senal_grabada] = grabacion(duracion)
Global A;
%Parametros de salida; senal_salida->objeto

%senal_grabada -> señal de de audio

%Parametros de entrada; duracion-> tiempo para grabar en segundos



fs=44100; %f. muestreo

senal_salida=audiorecorder(fs,16,1);%Creacion del objeto de grabacion

msgbox('Empezando Grabacion',' Grabadora '); %Mensaje de informacion

recordblocking(senal_salida,A);%Grabacion del sonido

msgbox('Terminando Grabacion',' Grabadora ');%Mensaje de informacion

%Paso los valores del objeto a una señal

senal_grabada=getaudiodata(senal_salida, 'single');

%Grabamos y guardamos la señal

wavwrite(senal_grabada,fs,uiputfile({'*.wav'},'Guardar como'));

end
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 JOSE JEREMIAS CABALLERO

gui para grabar

Publicado por JOSE JEREMIAS CABALLERO (3432 intervenciones) el 30/10/2015 14:00:56
1
2
3
function rec_Callback(hObject, eventdata, handles)
global A;
[senal_salida,senal_grabada] = grabacion(A)

Saludos
JOSE JEREMÍAS CABALLERO
Asesoría online en Matlab
Servicios de programación matlab
jjcc94@hotmail.com
Estimado Usuario, el correo es para servicios de cursos, asesoría y programación. Toda ayuda gratuita es vía foro



http://matlabcaballero.blogspot.com
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

gui para grabar

Publicado por Israel (21 intervenciones) el 30/10/2015 15:26:34
Hola Jose, muchas gracias por tu ayuda, efectivamente puse esa linea de comandos en el script de la gui, y ahora me graba el tiempo señalado, pero en cuanto hago correr e programa, me aparecen una serie de errores, y luego de reaizar la grabación, me muestra una serie de numeros, por un buen tiempo, porfavor ayudame a solucionar esto, te lo agradecere mucho.
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 Royeth

gui para grabar

Publicado por Royeth jesus.royeth@gmail.com (744 intervenciones) el 30/10/2015 18:23:48
te lo adjunto aquí , las variables globales no son necesarias si tratas todo desde un solo botón , aquí te lo adjunto y también eliminé algunas advertencias que salían por esto


saludos
https://www.facebook.com/royethmatlab/
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

gui para grabar

Publicado por Israel (21 intervenciones) el 30/10/2015 19:03:03
Excelente¡¡¡, ahora me voy a permitir algo, pedirte porfavor que me expliques un poco sobres esto,
1. yo crei que el valor supongamos de un edit text solo se podia extraer desde su callback.
2. si hubiera tenido que usar variables globales como lo hubiese hecho?.
3. que codigo eliminaste?
Y gracias en serio Royeth, en si el programa es un poco más largo, tengo que sacar una fft de esta señal grabada y determinar su primer armonico, pero ya estare seguro preguntando algo más concreto sobre esto.

Gracias¡¡¡¡¡¡

Pd: Disculpa acabo de agregar las siguientes lineas al script de grabación y otra vez los errores
x=waveread('xxxxxxx');
plot(x);

Ya se que es mucho molestar, pero me pierdo toda la tarde por motivos de trabajo, asi que quedo con esta consulta .
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 Royeth

gui para grabar

Publicado por Royeth jesus.royeth@gmail.com (744 intervenciones) el 30/10/2015 19:20:52
1
se puede extraer desde cualquier lado solo es necesario que te sepas el tag que lo puedes encontrar cuando creas los botones entonces haces :
get(handles.tag,'propiedad') donde dice tag va el nombre en tu caso el tag del edit text es tiempo

2 con variables globales solo es definir global en cada función donde vayas a usar esa variable no es necesario definirla en todas las funciones , recuerda que en el guide cada función funciona independiente


3 no eliminí código solo eliminé algunas advertencias que se generan porque la funicón wawread la removerán en futuras versiones de matlab con este código quité esa advertencia:

1
warning('off','MATLAB:audiovideo:wavwrite:functionToBeRemoved')


4 es wavread sin la e


saludos
https://www.facebook.com/royethmatlab/
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 JOSE JEREMIAS CABALLERO

gui para grabar

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 31/10/2015 03:20:57
1
2
3
function rec_Callback(hObject, eventdata, handles)
global A;
grabacion(A);



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function grabacion(duracion);
 
 fs=44100; %f. muestreo
 
 senal_salida=audiorecorder(fs,16,1);%Creacion del objeto de grabacion
 
 msgbox('Empezando Grabacion',' Grabadora '); %Mensaje de informacion
 
 recordblocking(senal_salida,A);%Grabacion del sonido
 
 msgbox('Terminando Grabacion',' Grabadora ');%Mensaje de informacion
 
 %Paso los valores del objeto a una señal
 
 senal_grabada=getaudiodata(senal_salida, 'single');
 
 %Grabamos y guardamos la señal
 
 wavwrite(senal_grabada,fs,uiputfile({'*.wav'},'Guardar como'));
 
 end
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
Imágen de perfil de JOSE JEREMIAS CABALLERO

gui para grabar

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 31/10/2015 04:45:20
en un solo m, tanto la funcion externa y la funcion del propio guide.
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

gui para grabar

Publicado por Israel (21 intervenciones) el 01/11/2015 00:37:59
Gracias Royeth y Jose, podrian decirme por que generalmente me salen estos mensajes?

In @(hObject,eventdata)pruebagui('Rec_Callback',hObject,eventdata,guidata(hObject))
Warning: WAVREAD will be removed in a future release. Use AUDIOREAD instead.
> In wavread at 62
In pruebagui>grabacion at 45
In pruebagui>Rec_Callback at 32
In gui_mainfcn at 95
In pruebagui at 16
In @(hObject,eventdata)pruebagui('Rec_Callback',hObject,eventdata,guidata(hObject))
>>

entiendo que posteriormente haran un cambio en el codigo para wavread, pero lo demás?
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