播放/停止按钮

时间:2015-04-30 20:24:21

标签: matlab audio playback

我有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.

有什么想法吗?提前谢谢!

1 个答案:

答案 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

的文档中找到共享数据的其他方式
相关问题