audioDeviceReader

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

Описание

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

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

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

К потоковым данным из аудио устройства:

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

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

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

Создание

Описание

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 Используя Системные объекты (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. Выход с вызова на вашего читателя аудио устройства является матрицей с шестью столбцами. Столбец 1 соответствует каналу 1, столбец 2 соответствует каналу 2 и так далее.

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

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

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

Зависимости

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

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

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

Примечание

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

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

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

Описание

пример

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

пример

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

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

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

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

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

Запишите 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. 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.

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