exponenta event banner

audioPlayerRecorder

Одновременное воспроизведение и запись с помощью аудиоустройства

Описание

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

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

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

  1. Создать audioPlayerRecorder и задайте его свойства.

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

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

Создание

Описание

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

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

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

Пример: playRec = audioPlayerRecorder(48000,'BitDepth','8-bit integer') создает объект System, 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 объект заблокирован, при каждом вызове входные данные должны иметь одинаковый размер кадра. Размер буфера аудиоустройства совпадает с размером входного кадра. При использовании объекта в Windows откройте пользовательский интерфейс ASIO, чтобы задать значение размера кадра для буфера звуковой карты.

  • true - Если audioPlayerRecorder объект заблокирован, размер входного кадра может изменяться при каждом вызове. Размер буфера аудиоустройства задается с помощью свойства BufferSize.

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

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

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

Примечание

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

Зависимости

Чтобы включить это свойство, задайте для параметра SupportVariiveSize значение 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. Недозапуск означает молчание выходного сигнала. Молчание выходного сигнала возникает, если буфер устройства пуст, когда наступает время цифроаналогового преобразования. Это происходит в том случае, когда цикл обработки в MATLAB не предоставляет выборки с той скоростью, которая требуется звуковой карте.

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

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

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

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

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

release(obj)

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

getAudioDevicesСписок доступных аудиоустройств
infoПолучение информации об аудиоустройстве
cloneСоздать повторяющийся объект System
isLockedОпределить, используется ли объект System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System
stepЗапустить алгоритм объекта System
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)

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

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

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

aPR = audioPlayerRecorder;

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

  • Сопоставляет столбцы audioToDevice на выходные каналы устройства

  • Сопоставляет входные каналы устройства со столбцами audioFromDevice

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

aPRInfo = info(aPR);

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

Позвоните в audioPlayerRecorder с матрицей из двух столбцов. По умолчанию столбец 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