Запись и воспроизведение аудио данных для обработки в 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 битами на выборку. The 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);
По умолчанию an audiorecorder объект использует частоту дискретизации 8000 герц, глубину 8 бит (8 биты на выборку) и один аудиоканал. Эти настройки минимизируют необходимый объем хранения данных. Для записи более высокого качества увеличьте частоту дискретизации или битовую глубину.
Например, типичные компакт-диски используют частоту дискретизации 44 100 герц и 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 объект внутри функции, объект существует только на время функции. Например, создайте функцию player, называемую 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