我已经问过这个问题无济于事了。我无法解决问题。我再试一次也许有人可以帮忙!
我有2个按钮,播放和停止。我手边有音轨的路径,想要在用户点击播放时播放音频,在用户点击停止时停止播放。唯一的问题是,一旦播放的回调函数退出,保存有关播放器的信息的变量就会被清空,因此轨道不会播放。我需要一些方法来在回调函数之间共享数据。
我尝试使用全局变量无济于事。
然后我看了这个,我尝试了或多或少的每一个提到的方法:http://www.mathworks.com/help/matlab/creating_guis/share-data-among-callbacks.html#bt9p4qp
我们以此方法为例:
在播放回调按钮中:
[Y, Fs] = audioread(path);
player = audioplayer(Y,Fs);
hObject.UserData = player;
play(player);
在停止回拨按钮中:
h = findobj('Tag','Play');
player = h.UserData;
stop(player);
on hObject.UserData = player;单击播放按钮时,我收到此警告:
警告:Struct字段分配会覆盖类“double”的值。参见MATLAB R14SP2发行说明, 分配非结构变量作为结构显示警告,以获取详细信息。
我需要的解决方案是让我在播放音乐时继续使用其余的节目,随时停止播放音频,之后程序必须保持良好的运行状态。
任何想法的家伙?任何帮助将真正感激!
提前致谢!
答案 0 :(得分:0)
我不确定以下是否有效:
hObject.UserData = player;
我会(正如您已经发现的那样)使用全局变量。我没有测试这个解决方案,但它应该工作并展示如何结合GUI正确使用全局变量。如果你发现了错误,请纠正我。
% --- Executes just before GUI is made visible.
function GUI_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)
% varargi
% Create a global player variable
global player;
player = audioplayer(Y,Fs);; % initialize player
% --- Outputs from this function are returned to the command line.
function pushbutton_off(hObject, eventdata, handles)
global player; % tell matlab player is global
play(player)
% --- Outputs from this function are returned to the command line.
function pushbutton_on(hObject, eventdata, handles)
global player;
stop(player);