audioPlayerRecorder

Одновременно играйте и запись, используя аудио устройство

Описание

The audioPlayerRecorder Система object™ считывает и записывает аудио выборок с помощью аудио устройства вашего компьютера. Как использовать audioPlayerRecorder, у вас должны быть аудио устройства и драйвер, способный к одновременному воспроизведению и записи.

Подробное объяснение потока данных смотрите в разделе Audio ввод-вывод: Буферизация, Задержка и Пропускная способность.

Одновременно играть и записывать:

  1. Создайте audioPlayerRecorder Объекту и установите его свойства.

  2. Вызывайте объект с аргументами, как будто это функция.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

playRec = audioPlayerRecorder возвращает Системный объект, playRec, который воспроизводит аудиосборки в аудио устройство и записывает выборки с того же аудио устройства в реальном времени.

playRec = audioPlayerRecorder(sampleRateValue) устанавливает свойство SampleRate на sampleRateValue.

playRec = audioPlayerRecorder(___,Name,Value) устанавливает каждое свойство Name к заданной Value. Неопределенные свойства имеют значения по умолчанию.

Пример: playRec = audioPlayerRecorder(48000,'BitDepth','8-bit integer') создает Системный объект, playRec, который действует со скоростью дискретизации 48 кГц и 8-битовой целочисленной битовой глубиной.

Свойства

расширить все

Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release функция разблокирует их.

Если свойство настраивается, можно изменить его значение в любой момент.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

Устройство для воспроизведения и записи аудио данных, заданное как вектор символов или строка. Объект поддерживает только устройства, активированные для одновременного воспроизведения и записи (полнодуплексный режим). Использовать getAudioDevices для перечисления доступных устройств.

Поддерживаемые драйверы для audioPlayerRecorder являются специфичными для платформы:

  • Windows® -- ASIO™

  • Mac -- CoreAudio

  • Linux® - ALSA

Примечание

По умолчанию аудио устройство является устройством по умолчанию вашей машины, только если оно поддерживает полнодуплексный режим. Если аудио устройство по умолчанию вашей машины не поддерживает полнодуплексный режим, audioPlayerRecorder задает в качестве устройства по умолчанию первое обнаруженное доступное устройство, способное к полнодуплексному режиму. Используйте info метод, чтобы получить имя устройства, сопоставленное с вашим audioPlayerRecorder объект.

Типы данных: char | string

Частота дискретизации, используемая устройством для записи и воспроизведения аудио данных, в Гц, задается как положительное целое число. Область области значений SampleRate зависит от вашего аудио оборудование.

Типы данных: single | double

Тип данных, используемый устройством, задается как вектор символов или строка.

Типы данных: char | string

Опция для поддержки переменного формата кадра, заданная как false или true.

  • false - Если audioPlayerRecorder объект заблокирован, вход должен иметь одинаковый формат кадра при каждом вызове. Buffer size вашего аудио устройства совпадает с размером входного кадра. Если вы используете объект в Windows, откройте пользовательский интерфейс ASIO, чтобы установить буфер звуковой карты на значение формата кадра.

  • true - Если audioPlayerRecorder объект заблокирован, размер входного кадра может измениться при каждом вызове. Значение buffer size вашего аудио устройства задается свойством BufferSize.

Чтобы минимизировать задержки, установите SupportVariableSize на false. Если аудиосистема требует входа переменного размера, установите SupportVariableSize на true.

Типы данных: logical

Buffer size аудио устройства, заданная как положительное целое число.

Примечание

Если объект используется на компьютере с Windows, используйте asiosettings для установки buffer size звуковой карты на BufferSize значение вашего audioPlayerRecorder Системный объект.

Зависимости

Чтобы включить это свойство, установите значение SupportVariableSize на true.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Отображение между столбцами воспроизводимых данных и каналами выхода устройства, заданное как скаляр или как вектор допустимых индексов канала. Значение по умолчанию этого свойства [], что означает, что используется отображение каналов по умолчанию.

Примечание

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

Пример: outputLeftOnly = [x(:,1) zeros(size(x,1),1)];

Пример: outputRightOnly = [zeros(size(x,1),1) x(:,1)];

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Отображение между каналами вашего аудио устройства и столбцами записанных данных, заданное как скаляр или как вектор допустимых индексов канала. Значение по умолчанию 1, что означает, что первый канал записи на устройстве используется для сбора данных и преобразуется в матрицу с одним столбцом.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Использование

Описание

пример

audioFromDevice = playRec(audioToDevice) записывает одну систему координат аудио выборок, audioToDevice, к выбранному аудио устройству и возвратам одна система координат аудио, audioFromDevice.

пример

[audioFromDevice,numUnderrun] = playRec(audioToDevice) возвращает количество выборок, переполненных с момента последнего вызова playRec.

пример

[audioFromDevice,numUnderrun,numOverrun] = playRec(audioToDevice) возвращает количество выборок, незавершенных с момента последнего вызова playRec.

Примечание:  Когда вы вызываете audioPlayerRecorder Системный объект, аудио устройство, заданная как Device свойство заблокировано. Аудио устройство может быть заблокировано только одним audioPlayerRecorder за раз. Чтобы отпустить аудио устройство, позвоните release на audioPlayerRecorder Системный объект.

Входные параметры

расширить все

Аудиосигнал для записи в устройство, заданный как матрица. Столбцы матрицы рассматриваются как независимые аудиоканалы.

Типы данных: single | double | int8 | int16 | int32 | uint8

Выходные аргументы

расширить все

Аудиосигнал, считанный с устройства, возвращенный как матрица того же размера и данных типа, как audioToDevice.

Типы данных: single | double | int16 | int32 | uint8

Количество выборок, по которым очередь проигрывателей была недооценена с момента последнего вызова playRec. Underrun относится к тишине выходного сигнала. Молчание выходного сигнала происходит, если буфер устройства пуст, когда время для цифрового-аналогового преобразования. Это происходит, когда цикл обработки в MATLAB не поставляет выборки со скоростью, требуемой звуковой картой.

Типы данных: uint32

Количество выборок, по которым очередь регистраторов была переполнена с момента последнего вызова playRec. Overrun относится к падениям входного сигнала. Падения входного сигнала происходят, когда каскад обработки не успевает за получением выборок.

Типы данных: uint32

Функции объекта

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:

release(obj)

расширить все

getAudioDevicesСписок доступных аудио устройств
infoПолучите аудио устройство информацию
cloneСоздайте повторяющийся системный объект
isLockedОпределите, используется ли системный объект
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта
stepЗапуск алгоритма системного объекта
setupОдноразовая настройка задач для системных объектов

Примеры

свернуть все

Синхронизируйте воспроизведение и запись с помощью одного аудио устройства. Если синхронизация потеряна, печать информации о выборках.

Создайте объекты для чтения и записи в аудио файла. Создайте audioPlayerRecorder объект, чтобы воспроизвести аудиосигнал на ваше устройство и одновременно записать аудиосигнал с вашего устройства.

fileReader = dsp.AudioFileReader('Counting-16-44p1-mono-15secs.wav', ...
    'SamplesPerFrame',512);
fs = fileReader.SampleRate;

fileWriter = dsp.AudioFileWriter('Counting-PlaybackRecorded.wav', ...
    'SampleRate',fs);

aPR = audioPlayerRecorder('SampleRate',fs);

В цикле на основе фреймов:

  1. Считайте аудиосигнал из файла.

  2. Воспроизведение аудиосигнала на устройстве и одновременная запись аудиосигнала с устройства. Используйте дополнительную nUnderruns и nOverruns выходные аргументы для отслеживания любой потери синхронизации.

  3. Запись записанного аудио в файл.

После завершения цикла отпустите объекты на свободные устройства и ресурсы.

while ~isDone(fileReader)
    audioToPlay = fileReader();
    
    [audioRecorded,nUnderruns,nOverruns] = aPR(audioToPlay);
    
    fileWriter(audioRecorded)
    
    if nUnderruns > 0
        fprintf('Audio player queue was underrun by %d samples.\n',nUnderruns);
    end
    if nOverruns > 0
        fprintf('Audio recorder queue was overrun by %d samples.\n',nOverruns);
    end
end
Audio player queue was underrun by 512 samples.
release(fileReader)
release(fileWriter)
release(aPR)

The audioPlayerRecorder Системная object™ позволяет вам задать отображение nondefault между каналами вашего аудио устройства и данными, отправленными и полученными от вашего аудио устройства. Чтобы запустить этот пример, ваше аудио устройство должна иметь как минимум два канала и быть способной к полнодуплексному режиму.

Использование настроек по умолчанию

Создайте audioPlayerRecorder объект с настройками по умолчанию. The audioPlayerRecorder автоматически настраивается на совместимое устройство и драйвер.

aPR = audioPlayerRecorder;

The audioPlayerRecorder объединяет чтение с вашего устройства и запись на устройство в один вызов: audioFromDevice = aPR(audioToDevice). Вызов audioPlayerRecorder с настройками по умолчанию:

  • Отображает столбцы audioToDevice к выходным каналам вашего устройства

  • Преобразует входные каналы вашего устройства в столбцы audioFromDevice

По умолчанию audioFromDevice - одноколоночная матрица, соответствующая каналу 1 вашего аудио устройства. Чтобы просмотреть максимальное количество входа и выходных каналов вашего устройства, используйте info способ.

aPRInfo = info(aPR);

aPRInfo возвращается как структура с полями, содержащими информацию о выбранном драйвере, аудио устройстве и максимальном количестве входа и выхода каналов в вашем строении.

Вызовите audioPlayerRecorder с двухколоночной матрицей. По умолчанию столбец 1 преобразуется в выходной канал 1, а столбец 2 преобразуется в выходной канал 2. The audioPlayerRecorder возвращает одноколоночную матрицу с одинаковым числом строк, как и audioToDevice матрица.

highToneGenerator = audioOscillator('Frequency',600,'SamplesPerFrame',256);
lowToneGenerator = audioOscillator('Frequency',200,'SamplesPerFrame',256);

for i = 1:250
    C = highToneGenerator();
    D = lowToneGenerator();
    audioToDevice = [C,D];
    audioFromDevice = aPR(audioToDevice);
end

Nondefault Channel Отображения для аудио Выхода

Задайте отображение канала без ограничений для вашего аудио выхода. Укажите, что столбец 1 из audioToDevice преобразуется в канал 2, и этот столбец 2 audioToDevice преобразуется в канал 1. Чтобы изменить отображение каналов, audioPlayerRecorder объект должен быть разблокирован.

Запуск audioPlayerRecorder объект. Если вы используете наушники или стереодинамики, заметьте, что высокие частоты и низкочастотные тона имеют переключенные динамики.

release(aPR)
aPR.PlayerChannelMapping = [2,1];

for i = 1:250
    C = highToneGenerator();
    D = lowToneGenerator();
    audioToDevice = [C,D];
    audioFromDevice = aPR(audioToDevice);
end

Nondefault Channel Отображения для аудио Входа

Задайте отображение канала без ограничений для вашего аудио входа. Запись данных только с второго канала вашего устройства. В этом случае канал 2 преобразуется в матрицу с одним столбцом. Использование size чтобы проверить, что audioFromDevice является матрицей 256 на 1.

release(aPR)
aPR.RecorderChannelMapping = 2;

audioFromDevice = aPR(audioToDevice);

[rows,col] = size(audioFromDevice)
rows =

   256


col =

     1

Как лучшая практика, отпустите своё аудио устройство после завершения.

release(aPR)

Расширенные возможности

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