Запись и воспроизведение аудио данных для обработки в 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