我有一个读取.wave文件的切换按钮,它的字符串更改为暂停,并且..... 我的问题是,当用户播放声音,并且按钮字符串变为暂停时,在结束声音后,字符串仍然暂停,我想要将其更改为播放。但我不知道如何在声音播放结束时找到,更改按钮字符串以进行播放?
我知道我可以通过将声音信号的长度除以采样率来找到声音的持续时间并制作延迟功能,但我正在寻找像特定功能更好的方法,是否存在类似的东西?
function Playb_Callback(hObject, eventdata, handles)
global openS recS playS;
if(openS)
if (state)
set(hObject, 'String', 'Pause');
resume(handles.p);
else
set(hObject, 'String', 'Play');
pause(handles.p);
end
end
if(get(handles.p, 'Running')==0)
set(hObject, 'String', 'Play');
end
答案 0 :(得分:1)
您是否使用audioplayer
对象进行播放?如果是,则该对象具有名为running
的属性,在播放处于活动状态时设置为on
,在音频播放停止时设置为off
。您可以阅读此属性的状态以显示正确的状态信息。
修改强>
我的Matlab副本目前正在进行一些计算,所以我无法验证这是否正确,但如果我正确地重新计算,它是这样的:
因此,如果您的audioplayer对象为handles.p
,则可以通过像Runnning
这样对其进行寻址来阅读属性handles.p.Running
。如果对象正在播放,则会返回on
,如果播放已停止,则返回off
但是,您似乎正在尝试在按钮回调中进行检查。请注意,只有在按下按钮时才会调用该功能。
答案 1 :(得分:1)
audioplayer对象有4个回调函数,其中一个是StopFcn
,将在播放停止时执行。
因此,在您定义audioplayer之后,将此属性设置为函数:
set( handle.p , 'StopFcn' , {@StopPlayback_Callback,handles.Playb} )
在代码中的某处添加了将改变按钮状态的函数:
function StopPlayback_Callback(hObject, eventdata, buttonHandle )
set( buttonHandle , 'String', 'Play' );
注意:在回调定义期间发送给函数回调的handles.Playb
参数应该是按钮的实际句柄'播放/暂停'。如果您的按钮手柄有另一个名称,请将此参数调整为真实姓名。
以同样的方式,您可以使用StartFcn
将其扩展到播放的开头。
set( handle.p , 'StartFcn' , {@StartPlayback_Callback,handles.Playb} )
然后
function StartPlayback_Callback(hObject, eventdata, buttonHandle )
set( buttonHandle , 'String', 'Pause' );