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

Смотрите Аудио ввод-вывод: Буферизация, Задержка и Пропускная способность для подробного объяснения потока данных средства записи аудио устройства.
К потоковым данным к аудио устройству:
Создайте audioDeviceWriter объект и набор его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?.
возвращает Системный объект, deviceWriter = audioDeviceWriterdeviceWriter, это пишет аудиосэмплы в устройство аудиовыхода в режиме реального времени.
устанавливает свойство SampleRate на deviceWriter = audioDeviceWriter(sampleRateValue)sampleRateValue.
наборы каждое свойство deviceWriter = audioDeviceWriter(___,Name,Value)Name к заданному Value. Незаданные свойства имеют значения по умолчанию.
deviceWriter = audioDeviceWriter(48000,'BitDepth','8-bit integer') создает Системный объект, deviceWriter, это действует на уровне частоты дискретизации на 48 кГц и 8-битной целочисленной битовой глубины.Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и release функция разблокировала их.
Если свойство является настраиваемым, можно изменить его значение в любое время.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.
Driver — Драйвер раньше получал доступ к аудио устройству (только Windows)'DirectSound' (значение по умолчанию) | 'ASIO' | 'WASAPI'Драйвер раньше получал доступ к вашему аудио устройству в виде 'DirectSound', 'ASIO', или 'WASAPI'.
Драйверы ASIO™ не прибывают предварительно установленные в машины Windows®. Использовать 'ASIO' опция драйвера, установите драйвер ASIO за пределами MATLAB®.
Примечание
Если Driver задан как 'ASIO'Использование asiosettings установить buffer size звуковой карты на buffer size вашего audioDeviceWriter Системный объект.
Драйверы WASAPI поддерживаются для исключительного режима только.
ASIO и драйверы WASAPI не обеспечивают преобразование частоты дискретизации. Для ASIO и драйверов WASAPI, набор SampleRate к частоте дискретизации, поддержанной вашим аудио устройством.
Это свойство применяется только на машины Windows. Машины Linux® всегда используют драйвер ALSA. Mac обрабатывает машинным способом, всегда используют драйвер CoreAudio.
Задавать Driver не по умолчанию значения, у вас должна быть лицензия Audio Toolbox™. Если тулбокс не установлен, задав Driver не по умолчанию значения возвращают ошибку.
Типы данных: char | string
Device — Устройство раньше проигрывало аудиосэмплыУстройство раньше проигрывало аудиосэмплы в виде вектора символов или строкового скаляра. Использование getAudioDevices перечислять доступные устройства для выбранного драйвера.
Типы данных: char | string
SampleRate — Частота дискретизации сигнала отправляется в аудио устройство (Гц) (значение по умолчанию) | положительное целое числоЧастота дискретизации сигнала отправляется в аудио устройство в Гц в виде положительного целого числа. Область значений SampleRate зависит от вашего аудио оборудования.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
BitDepth — Тип данных используется устройством'16-bit integer' (значение по умолчанию) | '8-bit integer' | '24-bit integer' | '32-bit float'Тип данных, используемый устройством в виде вектора символов или строкового скаляра. Прежде, чем выполнить цифро-аналоговое преобразование, входные данные брошены к типу данных, заданному BitDepth.
Задавать BitDepth не по умолчанию, у вас должна быть лицензия Audio Toolbox. Если тулбокс не установлен, задав BitDepth не по умолчанию возвращает ошибку.
Типы данных: char | string
SupportVariableSizeInput — Поддержите переменный формат кадраfalse (значение по умолчанию) | trueОпция, чтобы поддержать переменный формат кадра в виде true или false.
false – Если audioDeviceWriter объект заблокирован, вход должен иметь тот же формат кадра в каждом вызове. Buffer size вашего аудио устройства совпадает с размером входного кадра.
true – Если audioDeviceWriter объект заблокирован, размер входного кадра может измениться в каждом вызове. Buffer size вашего аудио устройства задан через свойство BufferSize.
Типы данных: char
BufferSize — Buffer size аудио устройства (значение по умолчанию) | положительное целое числоBuffer size аудио устройства в виде положительного целого числа.
Примечание
Если Driver задан как 'ASIO', откройте пользовательский интерфейс ASIO, чтобы установить buffer size звуковой карты на BufferSize значение вашего audioDeviceWriter Системный объект.
Чтобы включить это свойство, установите SupportVariableSizeInput на true.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
ChannelMappingSource — Источник отображения между входной матрицей и каналами устройства'Auto' (значение по умолчанию) | 'Property'Источник отображения между столбцами входной матрицы и каналами устройства аудиовыхода в виде 'Auto' или 'Property'.
'Auto' – Настройки по умолчанию определяют отображение между столбцами входной матрицы и каналами устройства аудиовыхода. Например, предположите, что ваш вход является матрицей с четырьмя столбцами, и ваше аудио устройство имеет четыре канала в наличии. Столбец 1 ваших входных данных пишет, чтобы образовать канал 1 из вашего устройства, столбец 2 ваших входных данных пишет, чтобы образовать канал 2 из вашего устройства и так далее.
'Property' – Свойство ChannelMapping определяет отображение между столбцами входной матрицы и каналами устройства аудиовыхода.
Типы данных: char | string
ChannelMapping — Отображение не по умолчанию между входной матрицей и каналами устройства[1:MaximumOutputChannels] (значение по умолчанию) | скаляр | векторОтображение не по умолчанию между столбцами входной матрицы и каналами устройства вывода в виде скаляра или вектора из допустимых индексов канала. Смотрите, что Задавать Канал Сопоставляет для audioDeviceWriter примера для получения дополнительной информации.
Чтобы выборочно сопоставить между столбцами входной матрицы и выходных каналов вашей звуковой карты, у вас должна быть лицензия Audio Toolbox. Если тулбокс не установлен, задав ChannelMapping не по умолчанию возвращает ошибку.
Примечание
Чтобы гарантировать моно выход только на одном канале устройства стерео, используйте ChannelMapping по умолчанию установка и обеспечивает сигнал стерео, где один канал является всеми нулями.
Пример:
outputLeftOnly = [x(:,1) zeros(size(x,1),1)];
Пример:
outputRightOnly = [zeros(size(x,1),1) x(:,1)];
Чтобы включить это свойство, установите ChannelMappingSource на 'Property'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
записи одна система координат аудиосэмплов, numUnderrun
= deviceWriter(audioToDevice)audioToDevice, к выбранному аудио устройству и возвращает количество недогрузки аудиосэмплов начиная с последней возможности к deviceWriter.
Примечание: Когда вы вызываете audioDeviceWriter Системный объект, аудио устройство задано Device свойство заблокировано. Аудио устройство может быть заблокировано только одним audioDeviceWriter за один раз. Чтобы выпустить аудио устройство, вызовите release на вашем audioDeviceWriter Системный объект.
audioToDevice — Аудио к устройствуЗвуковой сигнал записать в устройство в виде матрицы. Столбцы матрицы обработаны как независимые звуковые каналы.
Если audioToDevice имеет тип данных 'double' или 'single', средство записи аудио устройства отсекает значения вне области значений [–1, 1]. Для других типов данных позволенный входной диапазон является [min, макс.] заданного типа данных.
Типы данных: single | double | int16 | int32 | uint8
numUnderrun — Количество демонстрационной недогрузкиКоличество выборок, которыми очередь средства записи аудио устройства была недогрузкой начиная с последней возможности к deviceWriter.
Типы данных: uint32
Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:
release(obj)
getAudioDevices | Перечислите доступные аудио устройства |
info | Получите информацию аудио устройства |
clone | Создайте объект дублированной системы |
isLocked | Определите, используется ли Системный объект |
release | Высвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики |
reset | Сбросьте внутренние состояния Системного объекта |
step | Запустите алгоритм Системного объекта |
setup | Одноразовый набор задачи для Системных объектов |
Считайте звуковой файл MP3 и проигрывайте его через ваше устройство аудиовыхода по умолчанию.
Создайте dsp.AudioFileReader объект с настройками по умолчанию. Используйте audioinfo функционируйте, чтобы возвратить структуру, содержащую информацию о звуковом файле.
fileReader = dsp.AudioFileReader('speech_dft.mp3'); fileInfo = audioinfo('speech_dft.mp3')
fileInfo = struct with fields:
Filename: '/mathworks/devel/bat/BR2021ad/build/matlab/toolbox/dsp/dsp/speech_dft.mp3'
CompressionMethod: 'MP3'
NumChannels: 1
SampleRate: 22050
TotalSamples: 112320
Duration: 5.0939
Title: []
Comment: []
Artist: []
BitRate: 64
Создайте audioDeviceWriter возразите и задайте частоту дискретизации.
deviceWriter = audioDeviceWriter('SampleRate',fileInfo.SampleRate);Вызовите setup уменьшать вычислительную загрузку инициализации в цикле аудиопотока.
setup(deviceWriter,zeros(fileReader.SamplesPerFrame,fileInfo.NumChannels))
Используйте info функция, чтобы получить характеристическую информацию о средстве записи устройства.
info(deviceWriter)
ans = struct with fields:
Driver: 'ALSA'
DeviceName: 'ALSAdefault'
MaximumOutputChannels: 32
В цикле аудиопотока считайте систему координат звукового сигнала из файла и запишите систему координат в ваше устройство.
while ~isDone(fileReader) audioData = fileReader(); deviceWriter(audioData); end
Закройте входной файл и выпустите устройство.
release(fileReader) release(deviceWriter)
Задержка из-за буфера устройства вывода является задержкой записи одной системы координат данных. Измените свойства по умолчанию своего audioDeviceWriter Система object™, чтобы уменьшать задержку из-за buffer size устройства.
Создайте dsp.AudioFileReader Системный объект, чтобы считать звуковой файл с настройками по умолчанию.
fileReader = dsp.AudioFileReader('speech_dft.mp3');Создайте audioDeviceWriter Системный объект и задает частоту дискретизации, чтобы совпадать с тем из читателя звукового файла.
deviceWriter = audioDeviceWriter(... 'SampleRate',fileReader.SampleRate);
Вычислите задержку из-за вашего буфера устройства в секундах.
bufferLatency = fileReader.SamplesPerFrame/deviceWriter.SampleRate %#okbufferLatency = 0.0464
Установите SamplesPerFrame свойство вашего dsp.AudioFileReader Системный объект к 256. Вычислите буферную задержку в секундах.
fileReader.SamplesPerFrame = 256; bufferLatency = fileReader.SamplesPerFrame/deviceWriter.SampleRate
bufferLatency = 0.0116
Недогрузка относится к тишине выходного сигнала, которая происходит, когда цикл аудиопотока не идет в ногу с устройством вывода. Определите недогрузку цикла аудиопотока, добавьте искусственную вычислительную загрузку в цикл аудиопотока, и затем измените свойства своего audioDeviceWriter возразите, чтобы уменьшить недогрузку. Ваши результаты зависят от вашего компьютера.
Создайте dsp.AudioFileReader объект, и задает файл, чтобы читать. Используйте audioinfo функционируйте, чтобы возвратить структуру, содержащую информацию о звуковом файле.
fileReader = dsp.AudioFileReader('speech_dft.mp3'); fileInfo = audioinfo('speech_dft.mp3');
Создайте audioDeviceWriter объект. Используйте SampleRate из средства чтения файлов как SampleRate из средства записи устройства. Вызовите setup уменьшать вычислительную загрузку инициализации в цикле аудиопотока.
deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);
setup(deviceWriter,zeros(fileReader.SamplesPerFrame,fileInfo.NumChannels))Запустите свой цикл аудиопотока с входом из файла и выведите к устройству. Распечатайте общую демонстрационную недогрузку и недогрузку в секундах.
totalUnderrun = 0; while ~isDone(fileReader) input = fileReader(); numUnderrun = deviceWriter(input); totalUnderrun = totalUnderrun + numUnderrun; end fprintf('Total samples underrun: %d.\n',totalUnderrun)
Total samples underrun: 0.
fprintf('Total seconds underrun: %d.\n',double(totalUnderrun)/double(deviceWriter.SampleRate))Total seconds underrun: 0.
Выпустите свой dsp.AudioFileReader и audioDeviceWriter объекты и обнуленный ваша переменная счетчика.
release(fileReader) release(deviceWriter) totalUnderrun = 0;
Используйте pause подражать алгоритму, который занимает 0,075 секунды к процессу. Пауза заставляет цикл аудиопотока идти медленнее, чем устройство, которое приводит к периодам тишины в выходном звуковом сигнале.
while ~isDone(fileReader) input = fileReader(); numUnderrun = deviceWriter(input); totalUnderrun = totalUnderrun + numUnderrun; pause(0.075) end fprintf('Total samples underrun: %d.\n',totalUnderrun)
Total samples underrun: 71680.
fprintf('Total seconds underrun: %d.\n',double(totalUnderrun)/double(deviceWriter.SampleRate))Total seconds underrun: 3.250794e+00.
Выпустите свой audioDeviceReader и dsp.AudioFileWriter и обнуленный переменная счетчика.
release(fileReader) release(deviceWriter) totalUnderrun = 0;
Установите формат кадра своего цикла аудиопотока к 2 048. Поскольку SupportVariableSizeInput свойство вашего audioDeviceWriter Системный объект установлен в false, buffer size вашего аудио устройства одного размера с размером входного кадра. Увеличение вашего buffer size устройства уменьшает недогрузку.
fileReader = dsp.AudioFileReader('speech_dft.mp3'); fileReader.SamplesPerFrame = 2048; fileInfo = audioinfo('speech_dft.mp3'); deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate); setup(deviceWriter,zeros(fileReader.SamplesPerFrame,fileInfo.NumChannels))
Вычислите общую недогрузку.
while ~isDone(fileReader) input = fileReader(); numUnderrun = deviceWriter(input); totalUnderrun = totalUnderrun + numUnderrun; pause(0.075) end fprintf('Total samples underrun: %d.\n',totalUnderrun)
Total samples underrun: 0.
fprintf('Total seconds underrun: %d.\n',double(totalUnderrun)/double(deviceWriter.SampleRate))Total seconds underrun: 0.
Увеличенный формат кадра уменьшает общую недогрузку вашего цикла аудиопотока. Однако увеличение формата кадра также увеличивает задержку. Другие подходы, чтобы уменьшать недогрузку включают:
Увеличение buffer size, независимого от размера входного кадра. Чтобы увеличить buffer size, независимый от размера входного кадра, необходимо сначала установить SupportVariableSizeInput к true. Этот подход также увеличивает задержку.
Уменьшение частоты дискретизации. Уменьшение частоты дискретизации уменьшает и задержку и недогрузку за счет разрешения сигнала.
Выбор оптимального драйвера и устройства для системы.
audioDeviceWriterЗадайте отображение канала не по умолчанию для audioDeviceWriter объект. Этим примером является конкретное оборудование. Это принимает, что ваш компьютер имеет устройство аудиовыхода по умолчанию с двумя доступными каналами.
Создайте audioDeviceWriter объект с настройками по умолчанию.
deviceWriter = audioDeviceWriter;
По умолчанию, audioDeviceWriter возразите пишет максимальное количество доступных каналов, соответствуя столбцам входной матрицы. Используйте info получить максимальное количество каналов вашего устройства.
info(deviceWriter)
ans = struct with fields:
Driver: 'DirectSound'
DeviceName: 'Primary Sound Driver'
MaximumOutputChannels: 2
Если deviceWriter вызван одним столбцом данных, два канала записаны в ваше устройство аудиовыхода. Оба канала соответствуют одному столбцу данных.
Используйте audioOscillator возразите, чтобы вывести тон к вашему audioDeviceWriter объект. Ваш объект, sineGenerator, возвращает вектор, когда названо.
sineGenerator = audioOscillator;
Запишите тон синуса в свое аудио устройство. Если вы используете наушники, можно услышать тон от обоих каналов.
count = 0; while count < 500 sine = sineGenerator(); deviceWriter(sine); count = count + 1; end
Если ваш audioDeviceWriter объект вызван двумя столбцами данных, два канала записаны в ваше устройство аудиовыхода. Первый столбец соответствует каналу 1 из вашего устройства аудиовыхода, и второй столбец соответствует каналу 2 из вашего устройства аудиовыхода.
Запишите матрицу 2D столбца в свое устройство аудиовыхода. Столбец 1 соответствует тону синуса, и столбец 2 соответствует статическому сигналу. Если вы используете наушники, можно услышать тон от одного докладчика и помехи от другого докладчика.
count = 0; while count < 500 sine = sineGenerator(); static = randn(length(sine),1); deviceWriter([sine,static]); count = count + 1; end
Задайте альтернативные отображения между каналами вашего устройства и столбцами выходной матрицы путем указания на выходной номер канала в индексе, соответствующем входному столбцу. Установите ChannelMappingSource к 'Property'. Укажите, что первый столбец ваших входных данных пишет, чтобы образовать канал 2 из вашего устройства вывода, и что второй столбец ваших входных данных пишет, чтобы образовать канал 1 из вашего устройства вывода. Чтобы изменить отображение канала, необходимо сначала разблокировать audioDeviceReader объект.
release(deviceWriter)
deviceWriter.ChannelMappingSource = 'Property';
deviceWriter.ChannelMapping = [2,1];Проигрывайте свои звуковые сигналы с обратным отображением. Если вы используете наушники, заметьте, что тон и статический переключил динамики.
count = 0; while count < 500 sine = sineGenerator(); static = randn(length(sine),1); deviceWriter([sine,static]); count = count + 1; end
Указания и ограничения по применению:
Системные объекты в Генерации кода MATLAB (MATLAB Coder)
Исполняемый файл, сгенерированный от этого Системного объекта, использует предварительно созданные динамические файлы библиотеки (.dll файлы) включенный с MATLAB. Используйте packNGo функционируйте, чтобы группировать код, сгенерированный от этого объекта и всех соответствующих файлов в сжатом zip-файле. Используя этот zip-файл, можно переместить, распаковать и восстановить проект в другой среде разработки, где MATLAB не установлен. Для получения дополнительной информации смотрите Функции ввода-вывода Аудио Запуска Вне MATLAB и Simulink.
asiosettings | Audio Device Writer | audioDeviceReader | audioPlayerRecorder | dsp.AudioFileReader | dsp.AudioFileWriter | getAudioDevices
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.