我有2个回调函数,一个播放音频,另一个停止音频。
function Play_Callback(hObject, eventdata, handles)
global path;
global player;
[Y, Fs] = audioread(path);
player = audioplayer(Y,Fs);
play(player);
pause(max(size(Y))/Fs);
function Stop_Callback(hObject, eventdata, handles)
global player;
stop(player);
问题是,在播放回调中,如果我不暂停,则什么都不播放。原因是,一旦回调结束,“玩家”就会回归。变量被转储。然而,暂停使音频有机会运行它的过程。停止回调也起作用,即音频停止。但是,当轨道停止时,暂停仍将继续。
我想要一个解决方案,让我可以使用其余的功能,同时播放音频,即使点击停止按钮后也不需要暂停继续。
有什么想法吗?
编辑,我尝试了另一种方法,但仍有问题: 播放回调global path;
[Y, Fs] = audioread(path);
player = audioplayer(Y,Fs);
guidata(handles.Play,player);
play(player);
停止回拨
player = guidata(hObject);
stop(player);
问题在于,当我尝试从uitable中选择另一首曲目时,我在启用另一个按钮的行上出现错误
set(handles.getCandidatesByKey,'Enable','on');
,错误是:
No appropriate method, property, or field getCandidatesByKey for class audioplayer.
有什么想法吗?提前谢谢!
答案 0 :(得分:0)
有许多方法可以在回调之间共享数据。一种简单的方法是将播放器变量存储在hObject的UserData字段中。为此,您还应在创建播放按钮时添加标记属性。它就像在创建按钮时添加以下参数值对一样简单。
button = uicontrol(...
'Tag','play_button',...
...);
在创建audioplayer后的Play_Callback中,您应该添加以下行来存储播放器变量。
hObject.UserData = player;
在Stop_Callback中,您可以使用
获取此数据h = findobj('Tag','play_button');
player = h.UserData
您可以在http://www.mathworks.com/help/matlab/creating_guis/share-data-among-callbacks.html
的文档中找到共享数据的其他方式