我想制作一个gui,其中将产生特定的频率音调5秒。如果用户按下输入,则应该在5秒之间停止,或者在用户输入5秒之后停止。
如何在matlab中实现?
我已经考虑过waitforbuttonpress,但在这种情况下没有用,因为它会停止执行,直到用户按下回车键,因此第二个条件不符合。
请帮助
由于
答案 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
音频播放器变量。按钮回调可以启动播放器,而按键回叫可以停止它(如果播放器正在运行)。