audioDeviceReader

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

Описание

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

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

Устройство чтения аудио устройства задает драйвер, устройство и его атрибуты, а также тип и размер данных, выхода из вашего Системного объекта.

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

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

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

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

Создание

Описание

deviceReader = audioDeviceReader возвращает Системный объект, 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') создает Системный объект, deviceReader, который действует со скоростью дискретизации 16 кГц и 8-битовой целочисленной битовой глубиной.

Свойства

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

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

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

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

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

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

    Примечание

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

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

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

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

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

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

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

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

Зависимости

Чтобы включить это свойство, установите значение ChannelMappingSource на '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. Значение выхода от вызова на ваше аудио устройство reader представляет собой матрицу из шести столбцов. Столбец 1 соответствует каналу 1, столбец 2 соответствует каналу 2 и так далее.

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

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

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

Зависимости

Чтобы включить это свойство, установите значение ChannelMappingSource на '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

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

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

release(obj)

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

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

Примеры

свернуть все

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

Создайте 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. Buffer size устройства увеличивается так, что устройство теперь занимает больше времени, чтобы получить систему координат данных. Установите переменную счетчика на нуль.

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.

Задайте nondefault отображения канала для 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'. The 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