audioPlayerRecorder

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

Описание

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

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

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

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Описание

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 Используя Системные объекты (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.

Типы данных: логический

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

Примечание

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

Зависимости

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

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

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

Типы данных: 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Запустите алгоритм Системного объекта

Примеры

развернуть все

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

Создайте объекты читать из и записать в звуковой файл. Создайте 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)

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

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

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

aPR = audioPlayerRecorder;

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

  • Столбцы карт audioToDevice выводить каналы вашего устройства

  • Карты вводят каналы вашего устройства к столбцам audioFromDevice

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

aPRInfo = info(aPR);

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

Вызовите audioPlayerRecorder с матрицей 2D столбца. По умолчанию столбец 1 сопоставлен, чтобы вывести канал 1, и столбец 2 сопоставлен, чтобы вывести канал 2. 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

Отображение канала не по умолчанию для аудиовыхода

Задайте отображение канала не по умолчанию для своего аудиовыхода. Задайте тот столбец 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

Отображение канала не по умолчанию для аудиовхода

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

release(aPR)
aPR.RecorderChannelMapping = 2;

audioFromDevice = aPR(audioToDevice);

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

   256


col =

     1

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

release(aPR)

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

Введенный в R2017a