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

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

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

| | |

Похожие темы