exponenta event banner

audioDeviceReader

Запись со звуковой карты

Описание

audioDeviceReader Система object™ считывает образцы звука с помощью устройства ввода звука компьютера.

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

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

Для потоковой передачи данных с аудиоустройства:

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

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

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

Создание

Описание

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

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

deviceReader = audioDeviceReader(sampleRateValue,sampPerFrameValue) устанавливает собственность SamplesPerFrame в sampPerFrameValue.

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

Пример: deviceReader = audioDeviceReader(16000,'BitDepth','8-bit integer') создает объект System, deviceReader, которая работает при частоте дискретизации 16 кГц и 8-битовой целочисленной битовой глубине.

Свойства

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

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

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

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Драйвер, используемый для доступа к аудиоустройству, указан как 'DirectSound', 'ASIO', или 'WASAPI'.

  • Драйверы ASIO™ не устанавливаются на компьютерах с ОС Windows ®. Для использования 'ASIO' , установите драйвер ASIO вне MATLAB ®.

    Примечание

    Если Driver указывается как 'ASIO', использовать asiosettings для установки размера буфера звуковой карты в SamplesPerFrame ценность вашего audioDeviceReader Системный объект.

  • Драйверы WASAPI поддерживаются только для эксклюзивного режима.

Драйверы ASIO и WASAPI не обеспечивают преобразование частоты дискретизации. Для драйверов ASIO и WASAPI, установка SampleRate до частоты выборки, поддерживаемой аудиоустройством.

Это свойство применяется только к компьютерам Windows. Машины Linux ® всегда используют драйвер ALSA. Компьютеры Mac всегда используют драйвер CoreAudio.

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

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

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

Количество входных каналов, полученных аудиоустройством, указанное как целое число. Диапазон NumChannels зависит от вашего звукового оборудования.

Зависимости

Чтобы включить это свойство, задайте для StartMappingSource значение 'Auto'.

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

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

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

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

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

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

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

Источник отображения между каналами устройства ввода звука и столбцами выходной матрицы, указанный как 'Auto' или 'Property'.

  • 'Auto' - Настройки по умолчанию определяют соответствие между каналами устройства и выходной матрицей. Например, предположим, что аудиоустройство имеет шесть доступных каналов и установлено NumChannels до 6. Выходные данные вызова устройства чтения аудиоустройств представляют собой матрицу из шести столбцов. Столбец 1 соответствует каналу 1, столбец 2 соответствует каналу 2 и так далее.

  • 'Property' - Свойство StartMapping определяет сопоставление между каналами аудиоустройства и столбцами выходной матрицы.

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

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

Зависимости

Чтобы включить это свойство, задайте для StartMappingSource значение 'Property'.

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

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

Примечание

Если OutputDataType указывается как 'double' или 'single'считывающее устройство звукового устройства выводит данные в диапазоне [-1, 1]. Для других типов данных диапазон равен [min, max] указанного типа данных.

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

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

Описание

пример

audioFromDevice = deviceReader() возвращает один кадр отсчетов звука из выбранного устройства ввода звука.

пример

[audioFromDevice,numOverrun] = deviceReader() возвращает число отсчетов, на которое была переполнена очередь считывателя звука с момента последнего вызова deviceReader.

Примечание:  При вызове audioDeviceReader Системный объект, аудиоустройство, указанное свойством Device, заблокировано. Аудиоустройство может быть заблокировано только одним audioDeviceReader за раз. Для освобождения аудиоустройства вызовите release на вашем audioDeviceReader объект.

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

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

Звуковой сигнал, считанный с устройства, возвращаемый в виде матрицы. Конкретное количество каналов и собственности SamplesPerFrame определяет матричный размер. Тип данных матрицы зависит от свойства OutputDataType.

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

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

Запишите 10 секунд речи с помощью микрофона и отправьте выходные данные в WAV-файл.

Создание audioDeviceReader с настройками по умолчанию. Звонить setup уменьшение вычислительной нагрузки инициализации в цикле аудиопотока.

deviceReader = audioDeviceReader;
setup(deviceReader)

Создать dsp.AudioFileWriter Системный объект. Укажите имя и тип файла для записи.

fileWriter = dsp.AudioFileWriter('mySpeech.wav','FileFormat','WAV');

Запишите 10 секунд речи. В цикле аудиопотока считывайте кадр аудиосигнала из устройства и записывайте кадр аудиосигнала в указанный файл. Файл сохраняется в текущую папку.

disp('Speak into microphone now.')
Speak into microphone now.
tic
while toc < 10
    acquiredAudio = deviceReader();
    fileWriter(acquiredAudio);
end
disp('Recording complete.')
Recording complete.

Отпустите звуковое устройство и закройте выходной файл.

release(deviceReader)
release(fileWriter)

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

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

deviceReader = audioDeviceReader
deviceReader = 
  audioDeviceReader with properties:

             Device: 'Default'
        NumChannels: 1
    SamplesPerFrame: 1024
         SampleRate: 44100

  Show all properties

Вычислите задержку из-за буфера устройства.

fprintf('Latency due to device buffer: %f seconds.\n',deviceReader.SamplesPerFrame/deviceReader.SampleRate)
Latency due to device buffer: 0.023220 seconds.

Установите SamplesPerFrame собственность вашего audioDeviceReader объект в 64. Вычислите задержку.

deviceReader.SamplesPerFrame = 64;
fprintf('Latency due to device buffer: %f seconds.\n',deviceReader.SamplesPerFrame/deviceReader.SampleRate)
Latency due to device buffer: 0.001451 seconds.

Установите SampleRate собственность вашего audioDeviceReader Системный объект для 96000. Вычислите задержку.

deviceReader.SampleRate = 96000;
fprintf('Latency due to device buffer: %f seconds.\n',deviceReader.SamplesPerFrame/deviceReader.SampleRate)
Latency due to device buffer: 0.000667 seconds.

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

Создание audioDeviceReader Системный объект с SamplesPerFrame установить в значение 256 и SampleRate установить в значение 44100. Звонить setup уменьшение вычислительной нагрузки инициализации в цикле аудиопотока.

deviceReader = audioDeviceReader( ...
    'SamplesPerFrame',256, ...
    'SampleRate',44100);
setup(deviceReader)

Создать dsp.AudioFileWriter объект. Укажите имя файла и тип данных для записи.

fileWriter = dsp.AudioFileWriter('mySpeech.wav','FileFormat','WAV');

Запишите 5 секунд речи. В цикле аудиопотока считывайте кадр аудиосигнала с устройства и записывайте кадр аудиосигнала в указанный файл.

totalOverrun = 0;
disp('Speak into microphone now.')
Speak into microphone now.
tic
while toc < 5
    [input,numOverrun] = deviceReader();
    totalOverrun = totalOverrun + numOverrun;
    fileWriter(input);
end
fprintf('Recording complete.\n')
Recording complete.
fprintf('Total number of samples overrun: %d.\n',totalOverrun)
Total number of samples overrun: 0.
fprintf('Total seconds overrun: %d.\n',double(totalOverrun)/double(deviceReader.SampleRate))
Total seconds overrun: 0.

Отпустите свой audioDeviceReader и dsp.AudioDeviceWriter и обнуление переменной счетчика.

release(fileWriter)
release(deviceReader)
totalOverrun = 0;

Использовать pause для добавления искусственной вычислительной нагрузки к контуру аудиопотока. Вычислительная нагрузка заставляет цикл аудиопотока идти медленнее, чем устройство, что вызывает отбрасывание полученных выборок.

disp('Speak into microphone now.')
Speak into microphone now.
tic
while toc < 5
    [input,numOverrun] = deviceReader();
    totalOverrun = totalOverrun + numOverrun;
    fileWriter(input);
    pause(0.01)
end
fprintf('Recording complete.\n')
Recording complete.
fprintf('Total number of samples overrun: %d.\n',totalOverrun)
Total number of samples overrun: 97536.
fprintf('Total seconds overrun: %d.\n',double(totalOverrun)/double(deviceReader.SampleRate))
Total seconds overrun: 2.211701e+00.

Отпустите свой audioDeviceReader и dsp.AudioFileWriter объекты и задайте SamplePerFrame свойство для 512. Размер буфера устройства увеличивается, так что устройству теперь требуется больше времени для получения кадра данных. Установите нулевую переменную счетчика.

release(fileWriter)
release(deviceReader)
deviceReader.SamplesPerFrame = 512;
totalOverrun = 0;

Рассчитайте общее превышение цикла аудиопотока с помощью измененного SamplesPerFrame собственность.

disp('Speak into microphone now.')
Speak into microphone now.
tic
while toc < 5
    [input,numOverrun] = deviceReader();
    totalOverrun = totalOverrun + numOverrun;
    fileWriter(input);
    pause(0.01)
end
fprintf('Recording complete.\n')
Recording complete.
fprintf('Total number of samples overrun: %d.\n',totalOverrun)
Total number of samples overrun: 0.
fprintf('Total seconds overrun: %f.\n',totalOverrun/deviceReader.SampleRate)
Total seconds overrun: 0.000000.

Указание отображения канала, не используемого по умолчанию, для audioDeviceReader объект. Этот пример относится к конкретным аппаратным средствам. Предполагается, что компьютер имеет устройство ввода звука по умолчанию с двумя доступными каналами.

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

deviceReader = audioDeviceReader;

Количество каналов по умолчанию - 1. Позвоните своему audioDeviceReader объект как функция без аргументов для чтения одного кадра данных с аудиоустройства. Убедитесь, что матрица выходных данных содержит один столбец.

x = deviceReader();
[frameLength,numChannels] = size(x)
frameLength = 1024
numChannels = 1

Использовать info для определения максимального количества входных каналов, доступных с указанным пользователем Driver и Device конфигурация.

info(deviceReader)
ans = struct with fields:
                  Driver: 'DirectSound'
              DeviceName: 'Primary Sound Capture Driver'
    MaximumInputChannels: 2

Набор ChannelMappingSource кому 'Property'. audioDeviceReader для изменения этого свойства необходимо разблокировать объект.

release(deviceReader)
deviceReader.ChannelMappingSource = 'Property'
deviceReader = 
  audioDeviceReader with properties:

             Driver: 'DirectSound'
             Device: 'Default'
    SamplesPerFrame: 1024
         SampleRate: 44100

  Show all properties

По умолчанию, если ChannelMappingSource имеет значение 'Property'все доступные каналы отображаются на выходные данные. Позвоните своему audioDeviceReader объект для считывания одного кадра данных с аудиоустройства. Убедитесь, что матрица выходных данных содержит два столбца.

x = deviceReader();
[frameLength,numChannels] = size(x)
frameLength = 1024
numChannels = 2

Используйте ChannelMapping для указания альтернативного сопоставления между каналами устройства и столбцами выходной матрицы. Укажите номер входного канала с индексом, соответствующим выходному столбцу. Чтобы изменить это свойство, сначала разблокируйте audioDeviceReader объект.

release(deviceReader)
deviceReader.ChannelMapping = [2,1];

Теперь, когда вы звоните audioDeviceReader:

  • Входной канал 1 устройства соответствует второму столбцу выходной матрицы.

  • Входной канал 2 устройства соответствует первому столбцу выходной матрицы.

Получите определенный канал от устройства ввода.

deviceReader.ChannelMapping = 2;

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

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

.
Представлен в R2016a