Запишите и проигрывайте аудиоданные для обработки в MATLAB® от аудиовхода и устройств вывода в вашей системе.
Данные записи из устройства аудиовхода, такого как микрофон, соединенный с вашей системой:
Создайте объект audiorecorder
.
Вызовите record
или метод recordblocking
, где:
record мгновенно возвращает управление функции вызова или командной строке, даже во время записи.
Задайте продолжительность записи в секундах или закончите запись методом stop
. Опционально, вызовите методы resume
и pause
. Запись выполняется асинхронно.
recordblocking
сохраняет контроль, пока запись не завершена. Задайте продолжительность записи в секундах. Запись выполняется синхронно.
Создайте числовой массив, соответствующий данным сигнала с помощью метода getaudiodata
.
Следующие примеры показывают, как использовать методы record
и recordblocking
.
Этот пример показывает, как записать вход микрофона, воспроизвести запись и сохранить записанный звуковой сигнал в числовом массиве. Необходимо сначала соединить микрофон с системой.
Создайте объект 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
создает 8 000 Гц, 8-битный, одноканальный объект 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
использует частоту дискретизации 8 000 герц, глубину 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
воспроизводит на уровне 8 192 герц. Для любого воспроизведения задайте меньшие частоты дискретизации, чтобы воспроизводить более медленно, и большие частоты дискретизации, чтобы воспроизвести более быстро.
Большинство звуковых карт поддерживает частоты дискретизации приблизительно между 5,000 и 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')
На уровне записанной частоты дискретизации 8 192 выборок в секунду, проигрывая эти 73 113 выборок в файле занимает приблизительно 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