gpt4 book ai didi

matlab - 播放/停止按钮

转载 作者:行者123 更新时间:2023-12-03 02:02:58 27 4
gpt4 key购买 nike

我有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);

问题是,在播放回调中,如果我不暂停,则不会播放任何内容。原因是,一旦回调完成,“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.

有任何想法吗?提前致谢!

最佳答案

在回调之间共享数据有很多方法。一种简单的方法是将播放器变量存储在hObject的UserData字段中。为此,您还应该在创建播放按钮时添加标签属性。创建按钮时,只需添加以下参数(值对)即可。

button = uicontrol(...
'Tag','play_button',...
...);

创建音频播放器后,在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的文档中找到共享数据的其他方式。

关于matlab - 播放/停止按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29977145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com