Запишите и проигрывайте аудиоданные для обработки в MATLAB® от аудиовхода и устройств вывода в вашей системе.
Данные записи из устройства аудиовхода, такого как микрофон, соединенный с вашей системой:
Создайте 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
создает 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