【问题标题】:Audio player - sharing data between callbacks音频播放器 - 在回调之间共享数据
【发布时间】:2015-05-19 04:35:29
【问题描述】:

我已经问过这个问题,但无济于事。我无法解决问题。我再试一次,也许有人可以帮忙!

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

在 hObject.UserData = player;单击播放按钮时,我收到此警告:

警告:结构字段赋值会覆盖类“double”的值。请参阅 MATLAB R14SP2 发行说明, 将非结构变量分配为结构会显示警告,以了解详细信息。

我需要的解决方案是让我在播放音乐时继续使用程序的其余部分,随时停止音频,然后程序显然必须在此之后继续正常运行。

有什么想法吗?任何帮助将不胜感激!

提前致谢!

【问题讨论】:

    标签: matlab audio callback


    【解决方案1】:

    我不确定以下是否有效:

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

    【讨论】:

    • 成功了!但是,无法在openingfcn中创建全局变量,因为到那时我可能在内存中没有任何路径..所以我在播放回调中创建了全局播放器。我曾以为我已经尝试过这个解决方案,但它没有用!这次成功了,谢谢你的帮助! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2021-02-18
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多