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 创建):
- 开始按钮,启动创建的记录器
- 停止按钮,停止录音机并保存 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 中播放。
为了让它正常工作,我需要对 audioplayer 对象使用 playblocking,如下所示
global recorder
disp('playing');
player = audioplayer(getaudiodata(recorder),44100,16);
playblocking(player);
如果在 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 创建):
- 开始按钮,启动创建的记录器
- 停止按钮,停止录音机并保存 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 中播放。
为了让它正常工作,我需要对 audioplayer 对象使用 playblocking,如下所示
global recorder
disp('playing');
player = audioplayer(getaudiodata(recorder),44100,16);
playblocking(player);