Преобразуйте аудио datastore
transformDatastore = transform(ADS,@fcn)
transformDatastore = transform(ADS,@fcn,Name,Value)
создает новый datastore, который преобразовывает вывод от функции transformDatastore
= transform(ADS
,@fcn
)read
.
задает опции с помощью одного или нескольких аргументов пары transformDatastore
= transform(ADS
,@fcn
,Name,Value
)Name,Value
.
Задайте путь к файлу к аудиосэмплам, включенным с Audio Toolbox™. Создайте аудио datastore, который указывает на заданную папку.
folder = fullfile(matlabroot,'toolbox','audio','samples'); ADS = audioDatastore(folder);
Вызовите transform
, чтобы создать новый datastore, который смешивает многоканальные сигналы к моно.
ADSnew = transform(ADS,@(x)mean(x,2));
Читайте из нового datastore и подтвердите что он только выходные параметры моно сигналы.
while hasdata(ADSnew) audio = read(ADSnew); fprintf('Number of channels = %d\n',size(audio,2)) end
Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1 Number of channels = 1
Аудиосэмплы, включенные с Audio Toolbox™, имеют переменную длительность. Используйте функцию transform
, чтобы настроить функцию read
так, чтобы это вывело случайный пятисекундный сегмент аудиосэмплов.
Задайте путь к файлу к аудиосэмплам, включенным с Audio Toolbox. Создайте аудио datastore, который указывает на заданную папку.
folder = fullfile(matlabroot,'toolbox','audio','samples'); ADS = audioDatastore(folder);
Задайте функцию, extractSegment
, чтобы взять в качестве входа вывод функции read
. Заставьте extractSegment
извлечь ценность пяти секунд данных из звукового сигнала.
%-------------------------------------------------------------------------- function [dataOut,info] = extractSegment(audioIn,info) [N,numChan] = size(audioIn); newN = round(info.SampleRate*5); if newN > N % signal length < 5 seconds numPad = newN - N + 1; dataOut = [audioIn;zeros(numPad,numChan,'like',audioIn)]; elseif newN < N % signal length > 5 seconds start = randi(N - newN + 1); dataOut = audioIn(start:start+newN-1,:); else % signal length == 5 seconds dataOut = audioIn; end end %--------------------------------------------------------------------------
Вызовите transform
, чтобы создать TransformedDatastore
с набором Transforms
к extractSegment
.
ADSnew = transform(ADS,@extractSegment,'IncludeInfo',true)
ADSnew = TransformedDatastore with properties: UnderlyingDatastore: [1x1 audioDatastore] Transforms: {@extractSegment} IncludeInfo: 1
Считайте первые три звуковых файла и проверьте, что выходные параметры являются пятисекундными сегментами.
for i = 1:3 [audio,info] = read(ADSnew); fprintf('Duration = %d seconds\n',size(audio,1)/info.SampleRate) end
Duration = 5 seconds Duration = 5 seconds Duration = 5 seconds
Используйте transform
, чтобы создать аудио datastore, который возвращает mel представление спектрограммы от функции read
.
Задайте путь к файлу к аудиосэмплам, включенным с Audio Toolbox™. Создайте аудио datastore, который указывает на заданную папку.
folder = fullfile(matlabroot,'toolbox','audio','samples'); ADS = audioDatastore(folder);
Задайте функцию, extractMelSpectrogramSegment
, который преобразовывает аудиоданные от представления временного интервала до журнала mel спектрограмма. Добавьте дополнительные выходные параметры от функции melSpectrogram
до информационного struct вывод от read
.
function [dataOut,infoOut] = extractMelSpectrogram(audioIn,info) [S,F,T] = melSpectrogram(audioIn,info.SampleRate); dataOut = 10*log10(S+eps); infoOut = info; infoOut.CenterFrequencies = F; infoOut.TimeInstants = T; end
Вызовите transform
, чтобы создать TransformedDatastore
с набором Transforms
к extractMelSpectrogram
.
ADSnew = transform(ADS,@extractMelSpectrogram,'IncludeInfo',true)
ADSnew = TransformedDatastore with properties: UnderlyingDatastore: [1x1 audioDatastore] Transforms: {@extractMelSpectrogram} IncludeInfo: 1
Считайте первые три звуковых файла и постройте журнал mel спектрограммы. Если существует несколько каналов, строят только первый канал.
for i = 1:3 [melSpec,info] = read(ADSnew); figure(i) surf(info.TimeInstants,info.CenterFrequencies,melSpec(:,:,1),'EdgeColor','none'); xlabel('Time (s)') ylabel('Frequency (Hz)') [~,name] = fileparts(info.FileName); title(name) axis([0 info.TimeInstants(end) info.CenterFrequencies(1) info.CenterFrequencies(end)]) view([0,90]) end
Используйте transform
, чтобы создать аудио datastore, который возвращает характеристические векторы.
Задайте путь к файлу к аудиосэмплам, включенным с Audio Toolbox™. Создайте аудио datastore, который указывает на заданную папку.
folder = fullfile(matlabroot,'toolbox','audio','samples'); ADS = audioDatastore(folder);
Задайте функцию, extractFeatureVector
, который преобразовывает аудиоданные от представления временного интервала до характеристических векторов.
function [dataOut,info] = extractFeatureVector(audioIn,info) % Convert to frequency-domain representation windowLength = 256; overlapLength = 128; [~,f,~,S] = spectrogram(mean(audioIn,2), ... hann(windowLength,"Periodic"), ... overlapLength, ... windowLength, ... info.SampleRate, ... "power", ... "onesided"); % Extract features [kurtosis,spread,centroid] = spectralKurtosis(S,f); skewness = spectralSkewness(S,f); crest = spectralCrest(S,f); decrease = spectralDecrease(S,f); entropy = spectralEntropy(S,f); flatness = spectralFlatness(S,f); flux = spectralFlux(S,f); rolloff = spectralRolloffPoint(S,f); slope = spectralSlope(S,f); % Concantenate to create feature vectors dataOut = [kurtosis,spread,centroid,skewness,crest,decrease,entropy,flatness,flux,rolloff,slope]; end
Вызовите transform
, чтобы создать TransformedDatastore
с набором Transforms
к extractFeatureVector
.
ADSnew = transform(ADS,@extractFeatureVector,'IncludeInfo',true)
ADSnew = TransformedDatastore with properties: UnderlyingDatastore: [1x1 audioDatastore] Transforms: {@extractFeatureVector} IncludeInfo: 1
Вызовите read
, чтобы возвращать характеристические векторы для аудио в зависимости от времени.
featureMatrix = read(ADSnew); [numFeatureVectors,numFeatures] = size(featureMatrix)
numFeatureVectors = 4215 numFeatures = 11
Используйте transform
, чтобы создать аудио datastore, который применяет полосу пропускания, фильтрующую прежде, чем возвратить аудио в функцию read
.
Задайте путь к файлу к аудиосэмплам, включенным с Audio Toolbox™. Создайте аудио datastore, который указывает на заданную папку.
folder = fullfile(matlabroot,'toolbox','audio','samples'); ADS = audioDatastore(folder);
Задайте функцию, applyBandpassFilter
, который применяет полосовой фильтр с полосой пропускания между 1 и 15 кГц.
function [audioOut,info] = applyBandpassFilter(audioIn,info) audioOut = bandpass(audioIn,[1e3,15e3],info.SampleRate); end
Вызовите transform
, чтобы создать TransformedDatastore
с набором Transforms
к applyBandpassFilter
.
ADSnew = transform(ADS,@applyBandpassFilter,'IncludeInfo',true)
ADSnew = TransformedDatastore with properties: UnderlyingDatastore: [1x1 audioDatastore] Transforms: {@applyBandpassFilter} IncludeInfo: 1
Вызовите read
, чтобы возвратиться, полоса пропускания отфильтровала аудио от datastore преобразования. Вызовите read
, чтобы возвратиться, полоса пропускания отфильтровала аудио от исходного datastore. Постройте спектрограммы, чтобы визуализировать различие.
[audio1,info1] = read(ADS); [audio2,info2] = read(ADSnew); figure(1) spectrogram(audio1,hann(512),256,512,info1.SampleRate,'yaxis') title('Original Signal') figure(2) spectrogram(audio2,hann(512),256,512,info2.SampleRate,'yaxis') title('Filtered Signal')
ADS
— Аудио datastoreaudioDatastore
Аудио datastore, заданный как объект audioDatastore
.
@fcn
Функция, которая преобразовывает данныеФункция, которая преобразовывает данные, заданные как указатель на функцию. Подпись функции зависит от параметра IncludeInfo
.
Если IncludeInfo
установлен в false
(значение по умолчанию), функция преобразовывает аудиовыход от read
. Информационный вывод от read
неизменен.
Функция преобразования должна иметь эту подпись:
function dataOut = fcn(audio) ... end
Если IncludeInfo
установлен в true
, функция преобразовывает аудиовыход от read
, и может использовать или изменить информацию, возвращенную в read
.
Функция преобразования должна иметь эту подпись:
function [dataOut,infoOut] = fcn(audio,infoIn) ... end
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение.
Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'IncludeInfo',tf
'IncludeInfo'
— Передайте информацию через индивидуально настраиваемую функцию read
false
(значение по умолчанию) | верныйПередайте информацию через индивидуально настраиваемую функцию чтения, заданную как true
или false
. Если true
, функция преобразования может использовать или изменить информацию, это добирается от read
. Если незаданный, значения по умолчанию IncludeInfo
к false
.
Типы данных: логический
transformDatastore
— Новый datastore с индивидуально настраиваемым read
TransformedDatastore
Новый datastore с индивидуально настраиваемым read
, возвращенным как TransformedDatastore
с набором UnderlyingDatastore
к ADS
, набором Transforms
к fcn
и набором IncludeInfo
к true
или false
.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.