audioDeviceReader

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

Описание

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

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

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

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

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

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

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

Создание

Синтаксис

deviceReader = audioDeviceReader
deviceReader = audioDeviceReader(sampleRateValue)
deviceReader = audioDeviceReader(sampleRateValue,sampPerFrameValue)
deviceReader = audioDeviceReader(___,Name,Value)

Описание

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

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

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

Зависимости

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

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

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

Примечание

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

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

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

Для версий ранее, чем R2016b, используйте функцию step, чтобы запустить алгоритм Системного объекта. Аргументы к step являются объектом, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

audioFromDevice = deviceReader()
[audioFromDevice,numOverrun] = deviceReader()

Описание

пример

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 object™ с настройками по умолчанию. Вызовите setup, чтобы уменьшать вычислительную загрузку инициализации в цикле аудиопотока.

deviceReader = audioDeviceReader;
setup(deviceReader);

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

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

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

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

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

release(deviceReader);
release(fileWriter);

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

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

deviceReader = audioDeviceReader

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

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

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

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

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

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

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

Создайте Системный объект audioDeviceReader с набором SamplesPerFrame к 256 и набором SampleRate к 44 100. Вызовите 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.')
tic;
while toc < 5
    [input,numOverrun] = deviceReader();
    totalOverrun = totalOverrun + numOverrun;
    fileWriter(input);
end
fprintf('Recording complete.\n')
fprintf('Total number of samples overrun: %d.\n',...
    totalOverrun);
fprintf('Total seconds overrun: %d.\n',...
    double(totalOverrun)/double(deviceReader.SampleRate));
Speak into microphone now.
Recording complete.
Total number of samples overrun: 1280.
Total seconds overrun: 2.902494e-02.

Выпустите свой audioDeviceReader и Системные объекты dsp.AudioDeviceWriter и обнулите вашу переменную счетчика.

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

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

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

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

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

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

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

Задайте отображение канала не по умолчанию для Системы audioDeviceReader object™. Этим примером является конкретное оборудование. Это принимает, что ваш компьютер имеет устройство аудиовхода по умолчанию с двумя доступными каналами.

Создайте Системный объект 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

  Use get to 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