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

Запишите и проигрывайте аудиоданные для обработки в MATLAB® от аудиовхода и устройств вывода в вашей системе.

Аудио записи

Данные записи из устройства аудиовхода, такого как микрофон, соединенный с вашей системой:

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

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

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

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

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

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

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

  1. Вызовите audiodevinfo, чтобы перечислить доступные карты звуков. Например, этот код возвращает массив структур, содержащий все аудио устройства ввода и вывода в вашей системе:

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

  2. Создайте два объекта audiorecorder. Например, этот код создает объект audiorecorder, recorder1, для записи одного канала от устройства 3 на уровне 44,1 кГц и 16 битов за выборку. Объект 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); 

Определение качества записи

По умолчанию объект 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)

Смотрите также

| | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте