Преобразуйте аудио 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 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: UnderlyingDatastores: {audioDatastore} SupportedOutputFormats: ["txt" "csv" "xlsx" "xls" ... ] 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: UnderlyingDatastores: {audioDatastore} SupportedOutputFormats: ["txt" "csv" "xlsx" "xls" ... ] 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: UnderlyingDatastores: {audioDatastore} SupportedOutputFormats: ["txt" "csv" "xlsx" "xls" ... ] 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: UnderlyingDatastores: {audioDatastore} SupportedOutputFormats: ["txt" "csv" "xlsx" "xls" ... ] Transforms: {@applyBandpassFilter} IncludeInfo: 1
Вызовите read
возвратить полосу пропускания отфильтровало аудио от datastore преобразования. Вызовите read
возвратить полосу пропускания отфильтровало аудио от исходного datastore. Постройте спектрограммы, чтобы визуализировать различие.
[audio1,info1] = read(ADS); [audio2,info2] = read(ADSnew);
spectrogram(audio1,hann(512),256,512,info1.SampleRate,'yaxis') title('Original Signal')
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 с индивидуально настраиваемым read
TransformedDatastore
Новый datastore с индивидуально настраиваемым read
, возвращенный как TransformedDatastore
с UnderlyingDatastore
установите на ADS
Преобразовывания
установите на fcn
, и IncludeInfo
установите на true
или false
.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.