Matlab:如何从 GUI 调用播放(录音机)

Matlab: How to call play(recorder) from GUI

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

rec = audiorecorder(44100, 16, 1);
record(rec);  % User speaks now
stop(rec);
audiowrite('foo.wav', getaudiodata(rec), 44100);
play(rec);

我正在尝试将其划分为具有以下功能的三按钮 GUI(使用 GUIDE 创建):

  1. 开始按钮,启动创建的记录器
  2. 停止按钮,停止录音机并保存 wav 文件
  3. 回放按钮,回放录音机中的样本

(这个想法是为了能够录制小的文本样本,快速听取第一遍的质量,然后决定是结束录制还是继续下一个样本。

在 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 中播放。

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

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