如何在matlab中断waitforbuttonpress

时间:2015-01-03 16:56:38

标签: matlab

我想制作一个gui,其中将产生特定的频率音调5秒。如果用户按下输入,则应该在5秒之间停止,或者在用户输入5秒之后停止。

如何在matlab中实现?

我已经考虑过waitforbuttonpress,但在这种情况下没有用,因为它会停止执行,直到用户按下回车键,因此第二个条件不符合。

请帮助

由于

1 个答案:

答案 0 :(得分:1)

Sachin - 也许您可以尝试使用waitforbuttonpress的替代方案,只需在您的GUI /图形中添加按键回调即可停止播放音调。例如,以下功能将创建一个GUI,用于在按下按钮时模拟音调。

function myToneGui

    % create the GUI
    myGui = figure('Units','normalized',...
                   'Position',[0.39427 0.45093 0.16615 0.13241]);

    % create a button to generate a tone
    myButton = uicontrol('Style', 'pushbutton',...
                         'String', 'Generate Tone',...
                         'Units',  'normalized', ...
                         'Position', [0.34169 0.51748 0.28213 0.1958],...
                         'Callback', @genToneCallback); 

    % set the key pressed callback for the button
    set(myButton,'KeyPressFcn',@keyPressedCallback);

    % initialize an audio player object with dummy data
    myToneObj = audioplayer(0,8192);

    function genToneCallback(hObject,eventdata)

        % create a tone for five seconds
        fHz    = 300;
        fs     = 8192;
        lenSec = 5;
        t      = linspace(0,lenSec-1/fs,fs*lenSec);
        tone   = sin(2*pi*t*fHz);

        myToneObj = audioplayer(tone,fs);
        play(myToneObj);

    end

    function keyPressedCallback(hObject,eventdata)
        if isplaying(myToneObj)
            stop(myToneObj); 
        end
    end
end

在上面,我们创建了一个带有按钮和两个回调的简单GUI - 一个用于按钮,另一个用于按键具有焦点时按键。我们这样做的假设是,一旦按下按钮(因此产生音调),用户将不会做任何其他事情,直到音调结束(约五秒钟后)或他/她按下一个键(返回)或其他)。

两个回调嵌套在myToneGui函数中,以便两者都可以访问myToneObj音频播放器变量。按钮回调可以启动播放器,而按键回叫可以停止它(如果播放器正在运行)。