Преобразуйте аудио datastore
создает новый 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);
Задайте функцию, чтобы взять в качестве входа выход read функция. Сделайте функциональное извлечение ценностью пяти секунд данных из звукового сигнала.
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 установите на функцию, которую вы задали.
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);
Задайте функцию, которая преобразовывает аудиоданные от представления временного интервала до журнала mel спектрограмма. Функция добавляет дополнительные выходные параметры из melSpectrogram функционируйте к информационному struct выход от чтения аудио datastore.
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); % Concatenate 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 имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'IncludeInfo',tf'IncludeInfo' — Передайте информацию через индивидуально настраиваемый read функцияfalse (значение по умолчанию) | верныйПередайте информацию через индивидуально настраиваемую функцию чтения, заданную как true или false. Если true, функция преобразования может использовать или изменить информацию, которую это получает от read. Если незаданный, IncludeInfo значения по умолчанию к false.
Типы данных: логический
transformDatastore — Новый datastore с индивидуально настраиваемым readTransformedDatastoreНовый datastore с индивидуально настраиваемым read, возвращенный как TransformedDatastore с UnderlyingDatastore установите на ADSПреобразовывания установите на fcn, и IncludeInfo установите на true или false.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.