Вопроизведите звуковой карте
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/BR2021bd/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 %#ok
bufferLatency = 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: 68608.
fprintf('Total seconds underrun: %d.\n',double(totalUnderrun)/double(deviceWriter.SampleRate))
Total seconds underrun: 3.111474e+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
| getAudioDevices
| Audio Device Writer | audioDeviceReader
| audioPlayerRecorder
| dsp.AudioFileWriter
| dsp.AudioFileReader
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.