Запись и проигрывание аудио

Запись и воспроизведение аудио данных для обработки в MATLAB® с аудио входа и выхода устройств в вашей системе. Начиная с R2020b, воспроизведение аудио поддерживается в MATLAB Online™.

Запись аудио

Запись данных с устройства аудио входа, такого как микрофон, подключенный к вашей системе:

  1. Создайте audiorecorder объект.

  2. Вызовите record или recordblocking метод, где:

    • record возвращает немедленное управление в вызывающую функцию или командную строку, даже когда запись продолжается. Задайте длительность записи в секундах или завершите запись с помощью stop способ. Вы можете вызвать pause и resume методы. Запись выполняется асинхронно.

    • recordblocking сохраняет управление до завершения записи. Задайте длительность записи в секундах. Запись выполняется синхронно.

  3. Создайте числовой массив, соответствующий данным сигнала, используя 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);

Запись двух каналов с разных звуковых карт

Чтобы записать аудио независимо от двух разных звуковых карт, с микрофоном, подключенным к каждой:

  1. Функции audiodevinfo для перечисления доступных звуковых карт. Для примера этот код возвращает массив структур, содержащий все вход и выход аудио устройств в вашей системе:

    info = audiodevinfo;
    Идентифицируйте звуковые карты, которые вы хотите использовать по имени, и отметьте их ID значения.

  2. Создайте два audiorecorder объекты. Для примера этот код создает audiorecorder объект, recorder1для записи одного канала из устройства 3 с частотой 44,1 кГц и 16 битами на выборку. The audiorecorder объект, recorder2для записи одного канала из устройства 4 с частотой 48 кГц:

    recorder1 = audiorecorder(44100,16,1,3); 
    recorder2 = audiorecorder(48000,16,1,4);
    

  3. Запись каждого аудиоканала по отдельности.

    record(recorder1);
    record(recorder2); 
    pause(5);
    Записи происходят одновременно как первый вызов к record не блокирует.

  4. Остановите записи.

    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)

См. также

| | |

Похожие темы