【问题标题】:Play / Stop Button播放/停止按钮
【发布时间】:2015-05-05 03:03:38
【问题描述】:

我有两个回调函数,一个播放音频,另一个停止音频。

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.

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

【问题讨论】:

    标签: matlab audio playback


    【解决方案1】:

    有很多方法可以在回调之间共享数据。一种简单的方法是将您的播放器变量存储在 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 的文档中找到其他共享数据的方式

    【讨论】:

    • 我该如何做第一部分,即。您在哪里创建按钮.. 但由于我使用指南,我想在创建函数中设置该标签。我该怎么做?
    • 右键单击按钮并选择属性检查器。您应该能够将标记视为选项之一。
    • 所以在播放回调中我这样做:[Y, Fs] = audioread(path);播放器=音频播放器(Y,Fs); hObject.UserData = 玩家;播放(播放器);在停止回调中我这样做: h = findobj('Play');播放器 = h.UserData;停止(玩家);尝试播放曲目时,我收到此警告并且曲目未播放:警告:结构字段分配覆盖类“double”的值。有关详细信息,请参阅 MATLAB R14SP2 发行说明,将非结构变量分配为结构显示警告。我究竟做错了什么?播放按钮的标签是“播放”。
    • 那是一个旧版本。检查该版本的文档以共享数据。 mathworks.com/help/releases/R14sp2/techdoc/creating_guis/…。 UserData 在该版本中可能不可用。我假设您使用的是 R14SP2 版本。
    • 我无权访问该文档,它与此相同吗??mn.uio.no/astro/english/services/it/help/mathematics/matlab/…我现在尝试使用 guidata(请参阅已编辑的原始问题以获取回调代码).. 它有效。但是,当我尝试单击 uitable 中的另一个项目时,我在这一行出现错误: set(handles.getCandidatesByKey,'Enable','on');错误是:没有适当的方法、属性或字段 getCandidatesByKey 类音频播放器。你能提出一些解决这个问题的建议吗??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    相关资源
    最近更新 更多