【问题标题】:Matlab: How to call play(recorder) from GUIMatlab:如何从 GUI 调用播放(录音机)
【发布时间】:2020-01-10 20:31:14
【问题描述】:

如果在 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 文件。但样品不会播放。我什至知道播放按钮被触发是因为故意缺少分号,这导致记录器对象的详细信息被打印到屏幕上,这也验证了样本仍在其中。

我到底错过了什么,才能播放音频?

【问题讨论】:

    标签: matlab matlab-guide playback


    【解决方案1】:

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

    为了让它正常工作,我需要使用带有音频播放器对象的播放阻止功能,如下所示

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

    【讨论】:

    • 做到了。我想阻塞是 GUI 应用程序的一个问题是有道理的,但我永远不会想到它,因为启动和停止函数没有相同的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 2013-08-03
    • 2014-08-08
    • 1970-01-01
    相关资源
    最近更新 更多