Matlab:如何从GUI调用play(recorder)

Matlab:如何从GUI调用play(recorder),matlab,matlab-guide,playback,Matlab,Matlab Guide,Playback,如果在Matlab 2016的命令行中输入,以下行将创建一个audiorecorder对象,开始录制,停止录制,将录制的样本写入wav,并播放来自recorder对象的样本(即,不是来自新写入的wav文件): 我试图将其划分为一个三按钮GUI(使用GUIDE创建),具有以下功能: 启动按钮,用于启动已创建的记录器 停止按钮,停止记录器并保存wav文件 播放按钮,用于播放录音机中的样本 (这个想法是为了能够记录小样本的文本,快速聆听第一遍的质量,并决定是否记录到下一个样本 在GUI的初始设置中创建

如果在Matlab 2016的命令行中输入,以下行将创建一个audiorecorder对象,开始录制,停止录制,将录制的样本写入wav,并播放来自recorder对象的样本(即,不是来自新写入的wav文件):

我试图将其划分为一个三按钮GUI(使用GUIDE创建),具有以下功能:

  • 启动按钮,用于启动已创建的记录器
  • 停止按钮,停止记录器并保存wav文件
  • 播放按钮,用于播放录音机中的样本
  • (这个想法是为了能够记录小样本的文本,快速聆听第一遍的质量,并决定是否记录到下一个样本

    在GUI的初始设置中创建记录器对象(除其他外):

    function ReadingScript_OpeningFcn(hObject, eventdata, handles, varargin)
       recorder = audiorecorder(Fs, nbits, nChannels);
    
    启动记录器对象:

    function startRecord_Callback(hObject, eventdata, handles)
       global recorder
       set(handles.status,'String', 'Recording');
       record(recorder);
    
    停止记录器对象并将样本保存到文件:

    function stopRecord_Callback(hObject, eventdata, handles)
       global recorder
       global wavname    
       stop(recorder);
       audiowrite(wavname, getaudiodata(recorder), 44100)
    
    回放示例:

    function PlayBack_Callback(hObject, eventdata, handles)
    
       global recorder 
       play(recorder)
    
    这里的一切都正常,除了回放样本。样本被记录到记录器中,记录器通过正确的按钮启动和停止,并保存wav文件。但是样本不会播放。我甚至知道回放按钮正在启动,因为故意丢失分号,这会导致记录器对象的详细信息要打印到屏幕上,也可以验证样本是否仍在其中


    我到底错过了什么,这将使音频播放?

    录音机似乎有一个怪癖,这意味着它不会在GUI中播放

    为了让它工作,我需要使用playblocking和audioplayer对象,如下所示

    global recorder
    disp('playing');
    player = audioplayer(getaudiodata(recorder),44100,16);
    playblocking(player);
    

    我想阻塞是GUI应用程序的一个问题,这是理所当然的,但我从来没有想到过它,因为启动和停止函数没有相同的问题。
    global recorder
    disp('playing');
    player = audioplayer(getaudiodata(recorder),44100,16);
    playblocking(player);