Matlab: как вызвать play (диктофон) от GUI - PullRequest
1 голос
/ 10 января 2020

Если введено в командной строке в Matlab 2016, следующие строки создадут объект аудиорекордера, начнут его запись, остановят его запись, запишут записанные сэмплы в 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);

Остановить объект записи ct И сохранить сэмплы в файл:

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 сохраняется. Но образцы не будут играть. Я даже знаю, что кнопка воспроизведения срабатывает из-за преднамеренной пропущенной точки с запятой, что приводит к выводу на экран деталей объекта записи, который также проверяет, что сэмплы все еще находятся в нем.

Что именно я пропускаю , что заставит воспроизводить звук?

1 Ответ

1 голос
/ 10 января 2020

Кажется, что у аудиорекордера есть странность, что означает, что он не будет воспроизводиться в пределах GUI.

Чтобы заставить его работать, мне нужно было использовать playblocking с объектом аудиоплеера, как показано ниже

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