Запись и воспроизведение аудиоданных для обработки в MATLAB ® с устройств ввода и вывода звука в системе. С R2020b года воспроизведение звука поддерживается в MATLAB Online™.
Запись данных с устройства ввода звука, такого как микрофон, подключенный к системе:
Создание audiorecorder объект.
Позвоните в record или recordblocking способ, где:
record возвращает немедленное управление вызывающей функции или командной строке даже в процессе записи. Укажите продолжительность записи в секундах или завершите запись с помощью stop способ. При необходимости вызовите pause и resume методы. Запись выполняется асинхронно.
recordblocking сохраняет контроль до завершения записи. Укажите продолжительность записи в секундах. Запись выполняется синхронно.
Создайте числовой массив, соответствующий данным сигнала, используя getaudiodata способ.
В следующих примерах показано, как использовать recordblocking и record методы.
В этом примере показано, как записать вход микрофона, воспроизвести запись и сохранить записанный аудиосигнал в цифровом массиве. Сначала необходимо подключить микрофон к системе.
Создание audiorecorder объект с именем recObj для записи звукового ввода.
recObj = audiorecorder
recObj =
audiorecorder with properties:
SampleRate: 8000
BitsPerSample: 8
NumChannels: 1
DeviceID: -1
CurrentSample: 1
TotalSamples: 0
Running: 'off'
StartFcn: []
StopFcn: []
TimerFcn: []
TimerPeriod: 0.0500
Tag: ''
UserData: []
Type: 'audiorecorder'audiorecorder создает 8000 Гц, 8-битный, 1-канальный audiorecorder объект.
Запишите свой голос на 5 секунд.
disp('Start speaking.') recordblocking(recObj, 5); disp('End of Recording.');
Воспроизвести запись.
play(recObj);
Хранение данных в массиве с двойной точностью, y.
y = getaudiodata(recObj);
Постройте график аудиоотсчетов.
plot(y);
Для записи звука независимо от двух различных звуковых плат с подключенным к каждой микрофоном:
Звонить audiodevinfo для вывода списка доступных звуковых карт. Например, этот код возвращает структурный массив, содержащий все входные и выходные аудиоустройства в системе:
info = audiodevinfo;
ID значения.Создать два audiorecorder объекты. Например, этот код создает audiorecorder объект, recorder1для записи одного канала из устройства 3 с частотой 44,1 кГц и 16 бит на выборку. audiorecorder объект, recorder2, предназначен для записи одного канала из устройства 4 с частотой 48 кГц:
recorder1 = audiorecorder(44100,16,1,3); recorder2 = audiorecorder(48000,16,1,4);
Записывайте каждый аудиоканал отдельно.
record(recorder1); record(recorder2); pause(5);
record не блокирует.Остановите записи.
stop(recorder1); stop(recorder2);
По умолчанию - audiorecorder объект использует частоту дискретизации 8000 герц, глубину 8 бит (8 бит на выборку) и один аудиоканал. Эти настройки минимизируют необходимый объем хранения данных. Для записи более высокого качества увеличьте частоту дискретизации или битовую глубину.
Например, типичные компакт-диски используют частоту дискретизации 44100 герц и 16-битную глубину. Создание audiorecorder объект для записи в стерео (два канала) с этими настройками:
myRecObj = audiorecorder(44100, 16, 2);
Дополнительные сведения о доступных свойствах и значениях см. в разделе audiorecorder справочная страница.
После импорта или записи звука MATLAB поддерживает несколько способов прослушивания данных:
Для простого воспроизведения с помощью одного вызова функции используйте sound или soundsc. Например, загрузите образец MAT-файла, который содержит данные о сигнале и частоте дискретизации, и прослушайте звук:
load chirp.mat; sound(y, Fs);
Для большей гибкости во время воспроизведения, включая возможность паузы, возобновления или определения обратных вызовов, используйте audioplayer функция. Создание audioplayer объект, затем вызовите методы для воспроизведения звука. Например, слушайте gong образец файла:
load gong.mat; gong = audioplayer(y, Fs); play(gong);
Дополнительный пример см. в разделе Запись или воспроизведение звука в функции.
Если частота выборки не указана, sound воспроизводится при 8192 герцах. Для любого воспроизведения укажите меньшие частоты дискретизации для более медленного воспроизведения и большие частоты дискретизации для более быстрого воспроизведения.
Примечание
Большинство звуковых карт поддерживают частоту дискретизации от примерно 5000 до 48 000 герц. Задание частоты дискретизации за пределами этого диапазона может привести к неожиданным результатам.
При создании audioplayer или audiorecorder объект внутри функции существует только в течение всего срока действия функции. Например, создайте функцию проигрывателя с именем playFile и простая функция обратного вызова showSeconds:
function playFile(myfile)
load(myfile);
obj = audioplayer(y, Fs);
obj.TimerFcn = 'showSeconds';
obj.TimerPeriod = 1;
play(obj);
end
function showSeconds
disp('tick')
endЗвонить playFile из командной строки для воспроизведения файла handel.mat:
playFile('handel.mat')При частоте записанных выборок 8192 выборок в секунду воспроизведение 73113 выборок в файле занимает приблизительно 8,9 секунды. Тем не менее, playFile функция обычно заканчивается до завершения воспроизведения и очищает audioplayer объект obj.
Чтобы обеспечить полное воспроизведение или запись, рассмотрите следующие параметры:
Использовать playblocking или recordblocking вместо play или record. Способы блокировки сохраняют контроль до завершения воспроизведения или записи. При блокировании управления нельзя выполнять другие команды или методы (например, pause или resume) во время воспроизведения или записи.
Создайте выходной аргумент для функции, который создает объект в базовой рабочей области. Например, измените playFile функция для включения выходного аргумента:
function obj = playFile(myfile)
Вызовите функцию:
h = playFile('handel.mat');Поскольку h существует в базовом рабочем пространстве, воспроизведение можно приостановить из командной строки:
pause(h)
audioplayer | audiorecorder | sound | soundsc