Запись datastore в файлы
writeall( записывает данные из audio datastore ADS,outputLocation)ADS в файлы, расположенные в outputLocation.
writeall( записывает данные с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение".ADS,outputLocation,Name,Value)
writeall(ADS,outputLocation,'OutputFormat','flac') записывает данные в файлы FLAC.Создайте audioDatastore объект, который точками к аудио выборок WAV, включенным в Audio Toolbox™. The audioDatastore объект включает свойства только для чтения, указывающие на поддерживаемые форматы файлов, и выход по умолчанию (WAV).
folder = fullfile(matlabroot,'toolbox','audio','samples'); ads = audioDatastore(folder,'FileExtensions','.wav')
ads =
audioDatastore with properties:
Files: {
' .../build/matlab/toolbox/audio/samples/Ambiance-16-44p1-mono-12secs.wav';
' .../matlab/toolbox/audio/samples/AudioArray-16-16-4channels-20secs.wav';
' .../toolbox/audio/samples/ChurchImpulseResponse-16-44p1-mono-5secs.wav'
... and 17 more
}
Folders: {
'/mathworks/devel/bat/BR2021ad/build/matlab/toolbox/audio/samples'
}
AlternateFileSystemRoots: {}
OutputDataType: 'double'
Labels: {}
SupportedOutputFormats: ["wav" "flac" "ogg" "mp4" "m4a"]
DefaultOutputFormat: "wav"
Запишите аудио данных, установленный в текущую папку. Сохраните все файлы в формате по умолчанию (WAV).
outputLocation = pwd; writeall(ads,outputLocation)
Папка, samplesи аудио файлов, содержащиеся в папке, были записаны в текущую папку.
dir samples. .. Ambiance-16-44p1-mono-12secs.wav AudioArray-16-16-4channels-20secs.wav ChurchImpulseResponse-16-44p1-mono-5secs.wav Click-16-44p1-mono-0.2secs.wav Counting-16-44p1-mono-15secs.wav Engine-16-44p1-stereo-20sec.wav FemaleSpeech-16-8-mono-3secs.wav Heli_16ch_ACN_SN3D.wav JetAirplane-16-11p025-mono-16secs.wav Laughter-16-8-mono-4secs.wav MainStreetOne-16-16-mono-12secs.wav NoisySpeech-16-22p5-mono-5secs.wav Rainbow-16-8-mono-114secs.wav RainbowNoisy-16-8-mono-114secs.wav RockGuitar-16-44p1-stereo-72secs.wav SpeechDFT-16-8-mono-5secs.wav TrainWhistle-16-44p1-mono-9secs.wav Turbine-16-44p1-mono-22secs.wav WashingMachine-16-44p1-stereo-10secs.wav multipleSounds-16-16-mono-18secs.wav
Можно использовать предварительно извлеченные функции, чтобы уменьшить время итерации при разработке системы машинного обучения или глубокого обучения. Распространенной практикой является также использование предварительно извлеченных функций для неподконтрольных задач обучения, таких как кластеризация подобия, и для задач индексации на основе содержимого, таких как поиск музыкальной информации (MIR).
Создайте audioDatastore объект, который точки к аудио выборок, включенному в Audio Toolbox™.
folder = fullfile(matlabroot,"toolbox","audio","samples"); ads = audioDatastore(folder)
ads =
audioDatastore with properties:
Files: {
' .../build/matlab/toolbox/audio/samples/Ambiance-16-44p1-mono-12secs.wav';
' .../matlab/toolbox/audio/samples/AudioArray-16-16-4channels-20secs.wav';
' .../toolbox/audio/samples/ChurchImpulseResponse-16-44p1-mono-5secs.wav'
... and 31 more
}
Folders: {
'/mathworks/devel/bat/BR2021ad/build/matlab/toolbox/audio/samples'
}
AlternateFileSystemRoots: {}
OutputDataType: 'double'
Labels: {}
SupportedOutputFormats: ["wav" "flac" "ogg" "mp4" "m4a"]
DefaultOutputFormat: "wav"
Создайте пользовательскую функцию записи, которая извлекает mel frequency cepstral коэффициенты (mfcc) из аудио и записывает их в файл MAT. Определение функции находится в конце этого примера.
function myWriter(audioIn,info,~) fs = info.ReadInfo.SampleRate; % Extract MFCC [coeffs,delta,deltaDelta] = mfcc(audioIn,fs); % Replace the file extension of the suggested output name with MAT. filename = strrep(info.SuggestedOutputName,".wav",".mat"); % Save the MFCC coefficients to the MAT file. save(filename,"coeffs","delta","deltaDelta") end
Определите расположение выхода для извлеченных функций.
outputLocation = pwd;
Вызовите writeall функция со audioDatastore объект, выходное расположение и пользовательская функция записи. Также задайте суффикс _MFCC к именам файлов.
tic writeall(ads,outputLocation,"WriteFcn",@myWriter,"FilenameSuffix","_MFCC") fprintf("Data set creation completed (%0.0f seconds)\n",toc)
Data set creation completed (172 seconds)
Теперь вы создали набор данных, состоящий из MFCC для каждого аудио файла.
fds = fileDatastore(pwd,"ReadFcn",@load,"FileExtensions",".mat","IncludeSubfolders",true)
fds =
FileDatastore with properties:
Files: {
' .../audio-ex80013303/samples/Ambiance-16-44p1-mono-12secs_MFCC.mat';
' .../audio-ex80013303/samples/AudioArray-16-16-4channels-20secs_MFCC.mat';
' .../samples/ChurchImpulseResponse-16-44p1-mono-5secs_MFCC.mat'
... and 31 more
}
Folders: {
' .../BR2021ad_1655202_165362/mlx_to_docbook10/tp9d750e5a/audio-ex80013303'
}
UniformRead: 0
ReadMode: 'file'
BlockSize: Inf
PreviewFcn: @load
SupportedOutputFormats: [1x16 string]
ReadFcn: @load
AlternateFileSystemRoots: {}
Функция помощника
function myWriter(audioIn,info,~) fs = info.ReadInfo.SampleRate; [coeffs,delta,deltaDelta] = mfcc(audioIn,fs); filename = strrep(info.SuggestedOutputName,".wav",".mat"); save(filename,"coeffs","delta","deltaDelta") end
Создайте audioDatastore объект, который точки к аудио выборок, включенному в Audio Toolbox™.
folder = fullfile(matlabroot,"toolbox","audio","samples"); ads = audioDatastore(folder);
Создайте audioDataAugmenter объект, который выводит два увеличения для каждого входного сигнала.
augmenter = audioDataAugmenter("NumAugmentations",2);Задайте пользовательскую функцию записи, которая применяет audioDataAugmenter объект в аудиофайл и записывает получившиеся новые сигналы в отдельные файлы. Определение функции находится в конце этого примера.
function myWriter(audioIn,info,fileExtension,varargin) % create convenient variables for the augmenter and sample rate augmenter = varargin{1}; fs = info.ReadInfo.SampleRate; % perform augmentation augmentations = augment(augmenter,audioIn,fs); for ii = 1:augmenter.NumAugmentations x = augmentations.Audio{ii}; % protect against clipping if any(x<-1|x>1) [S,L] = bounds(x); x = x/max(abs([S,L])); end % update the audio file name to include the augmentation number filename = insertBefore(info.SuggestedOutputName,("."+fileExtension),string(ii)); % write the audio file audiowrite(filename,x,fs) end end
Вызовите writeall функция для создания нового дополненного набора данных. Чтобы ускорить обработку, установите UseParallel на true.
outputLocation = pwd; writeall(ads,outputLocation,"FilenameSuffix","_Aug","UseParallel",true,"WriteFcn",@(x,y,z,a)myWriter(x,y,z,augmenter))
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
Создайте новый datastore, который указывает на дополненный набор аудио данных.
adsAug = audioDatastore(outputLocation,"IncludeSubfolders",true)adsAug =
audioDatastore with properties:
Files: {
' ...\audio-ex06587246\samples\Ambiance-16-44p1-mono-12secs_Aug1.wav';
' ...\audio-ex06587246\samples\Ambiance-16-44p1-mono-12secs_Aug2.wav';
' ...\audio-ex06587246\samples\AudioArray-16-16-4channels-20secs_Aug1.wav'
... and 55 more
}
Folders: {
' ...\vmgr$\home07\bhemmat\Documents\MATLAB\Examples\audio-ex06587246'
}
AlternateFileSystemRoots: {}
OutputDataType: 'double'
Labels: {}
SupportedOutputFormats: ["wav" "flac" "ogg" "mp4" "m4a"]
DefaultOutputFormat: "wav"
Функция помощника
function myWriter(audioIn,info,fileExtension,varargin) augmenter = varargin{1}; fs = info.ReadInfo.SampleRate; augmentations = augment(augmenter,audioIn,fs); for ii = 1:augmenter.NumAugmentations x = augmentations.Audio{ii}; if any(x<-1|x>1) x = x./max(abs(x)); end filename = insertBefore(info.SuggestedOutputName,("."+fileExtension),string(ii)); audiowrite(filename,x,fs) end end
Используйте detectSpeech и writeall функции для создания нового набора аудио данных, который содержит изолированные сегменты речи.
Создайте audioDatastore объект, который указывает на звуковые выборки, включенные в этот пример.
ads = audioDatastore(pwd)
ads =
audioDatastore with properties:
Files: {
' .../tp32cd8b50/audio-ex78151030/KeywordSpeech-16-16-mono-34secs.flac';
' .../mlx_to_docbook9/tp32cd8b50/audio-ex78151030/Plosives.wav';
' .../mlx_to_docbook9/tp32cd8b50/audio-ex78151030/Sibilance.wav'
}
Folders: {
'/tmp/BR2021ad_1657350_5204/mlx_to_docbook9/tp32cd8b50/audio-ex78151030'
}
AlternateFileSystemRoots: {}
OutputDataType: 'double'
Labels: {}
SupportedOutputFormats: ["wav" "flac" "ogg" "mp4" "m4a"]
DefaultOutputFormat: "wav"
Задайте пользовательскую функцию записи, которая сначала определяет области речи в аудиосигналах, считанных из datastore, затем записывает отдельные области речи в отдельные файлы. Добавьте номер области к именам файлов. Определение функции находится в конце этого примера.
function myWriter(audioIn,info,fileExtension) fs = info.ReadInfo.SampleRate; % Get indices corresponding to regions of speech idx = detectSpeech(audioIn,fs); % For each region of speech for ii = 1:size(idx,1) x = audioIn(idx(ii,1):idx(ii,2),:); % Create a unique file name filename = insertBefore(info.SuggestedOutputName,("."+fileExtension),string(ii)); % Write the detected region of speech audiowrite(filename,x,fs) end end
Вызовите writeall функция, использующая пользовательскую функцию записи, чтобы создать новый набор данных, который состоит из изолированных сегментов речи. Создайте папку с именем segmented во временной директории, а затем запишите данные в эту папку.
outputLocation = fullfile(tempdir,"segmented"); writeall(ads,outputLocation,'WriteFcn',@myWriter)
Создайте новую audioDatastore объект, который указывает на сегментированный набор данных.
adsSegmented = audioDatastore(outputLocation,"IncludeSubfolders",true)adsSegmented =
audioDatastore with properties:
Files: {
' .../segmented/audio-ex78151030/KeywordSpeech-16-16-mono-34secs1.wav';
' .../segmented/audio-ex78151030/KeywordSpeech-16-16-mono-34secs10.wav';
' .../segmented/audio-ex78151030/KeywordSpeech-16-16-mono-34secs11.wav'
... and 24 more
}
Folders: {
'/tmp/BR2021ad_1657350_5204/mlx_to_docbook9/segmented'
}
AlternateFileSystemRoots: {}
OutputDataType: 'double'
Labels: {}
SupportedOutputFormats: ["wav" "flac" "ogg" "mp4" "m4a"]
DefaultOutputFormat: "wav"
Прочтите выборку из datastore и прослушайте его.
[audioIn,adsInfo] = read(adsSegmented); sound(audioIn,adsInfo.SampleRate)
Вспомогательная функция
function myWriter(audioIn,info,fileExtension) fs = info.ReadInfo.SampleRate; idx = detectSpeech(audioIn,fs); for ii = 1:size(idx,1) x = audioIn(idx(ii,1):idx(ii,2),:); filename = insertBefore(info.SuggestedOutputName,("."+fileExtension),string(ii)); audiowrite(filename,x,fs) end end
Наборы аудио данных, особенно наборы аудио данных с открытым исходным кодом, могут иметь несогласованные частоты дискретизации, количество каналов или длительности. Они могут также содержать мусорные данные, такие как клипы, которые помечены как содержащие речь, но содержат молчание.
Часто это первый шаг в рабочих процессах машинного обучения и глубокого обучения, чтобы очистить набор аудио данных. Это особенно важно для наборов валидации и тестовых данных. Общие типы очистки включают повторную дискретизацию, преобразование в моно или стерео, обрезку или расширение длительности зажимов до постоянной длины, удаление периодов молчания, удаление фонового шума или нормализацию усиления.
В этом примере вы очищаете набор аудио данных так, чтобы все файлы имели частоту дискретизации 16 кГц, были моно, находились в формате FLAC и нормировались так, что максимальная абсолютная величина сигнала 1.
Создайте audioDatastore объект, который точки к аудио выборок, включенному в Audio Toolbox™.
folder = fullfile(matlabroot,"toolbox","audio","samples"); ads = audioDatastore(folder);
Задайте функцию, чтобы применить последовательность операций к аудио данных. Определение функции находится в конце этого примера.
function [audioOut,adsInfo] = myTransform(audioIn,adsInfo) fs = adsInfo.SampleRate; desiredFs = 16e3; % Convert to mono x = mean(audioIn,2); % Resample to 16 kHz y = resample(x,desiredFs,fs); adsInfo.SampleRate = desiredFs; % Normalize so that the max absolute value of a signal is 1 audioOut = y/max(abs(y)); end
Создайте объект transform datastore, который применяет операции очистки.
adsTransform = transform(ads,@myTransform,"IncludeInfo",true);Функции writeall на объекте transform datastore, чтобы создать чистый набор данных. Задайте формат следующим FLAC. Запишите набор данных в текущую папку.
outputLocation = pwd; writeall(adsTransform,outputLocation,"OutputFormat","flac")
Создайте новый объект datastore, который указывает на чистый набор данных.
adsClean = audioDatastore(outputLocation,"IncludeSubfolders",true)adsClean =
audioDatastore with properties:
Files: {
' ...\Examples\audio-ex59507606\samples\Ambiance-16-44p1-mono-12secs.flac';
' ...\audio-ex59507606\samples\AudioArray-16-16-4channels-20secs.flac';
' ...\samples\ChurchImpulseResponse-16-44p1-mono-5secs.flac'
... and 26 more
}
Folders: {
' ...\vmgr$\home07\bhemmat\Documents\MATLAB\Examples\audio-ex59507606'
}
AlternateFileSystemRoots: {}
OutputDataType: 'double'
Labels: {}
SupportedOutputFormats: ["wav" "flac" "ogg" "mp4" "m4a"]
DefaultOutputFormat: "wav"
Вспомогательная функция
function [audioOut,adsInfo] = myTransform(audioIn,adsInfo) fs = adsInfo.SampleRate; desiredFs = 16e3; x = mean(audioIn,2); y = resample(x,desiredFs,fs); adsInfo.SampleRate = desiredFs; audioOut = y/max(abs(y)); end
ADS - Audio datastoreaudioDatastore объектAudio datastore, заданный как audioDatastore объект.
outputLocation - Расположение папки для записи данныхРасположение папки для записи данных, заданное как вектор символов или строка. Можно задать полный или относительный путь в outputLocation.
Пример: outputLocation = '../../dir/data'
Пример: outputLocation = 'C:\Users\MyName\Desktop'
Типы данных: char | string
Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.
'FolderLayout','flatten''FolderLayout' - Размещение файлов в выходной папке'duplicate' (по умолчанию) | 'flatten'Размещение файлов в выходной папке, заданный как разделенная разделенными запятой парами, состоящая из ' и FolderLayout''duplicate' или 'flatten'.
'duplicate' - Реплицируйте структуру папки данных, на которые указывает audio datastore. Задайте FolderLayout как 'duplicate' для поддержания соответствия между наборами входных и выходных данных.
'flatten' -- Запись всех файлов из входных данных в указанную выходную папку без каких-либо промежуточных папок.
Типы данных: char | string
'OutputFormat' - Выход файла'wav' (по умолчанию) | 'flac' | 'ogg' | 'mp4' | 'm4a'Формат выходного файла, заданный как разделенная разделенными запятой парами, состоящая из ' и OutputFormat''wav', 'flac', 'ogg', 'mp4', или 'm4a'.
Типы данных: char | string
'BitsPerSample' - Количество выходных бит на выборку16 (по умолчанию) | 8 | 24 | 32 | 64Количество выхода бит на выборку, заданное как разделенная запятой пара, состоящее из ' и целое число.BitsPerSample'
Чтобы включить этот аргумент пары "имя-значение", задайте OutputFormat на 'wav' или 'flac'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
'BitRate' - Килобиты в секунду (кбит/с)128 (по умолчанию) | 64 | 96 | 160 | 192 | 256 | 320Количество килобитов в секунду (кбит/с), используемых для сжатия аудио файлов, заданное как разделенная запятой пара, состоящее из ' и целое число. В Windows® 7 или более поздней версии, единственными допустимыми значениями являются BitRate'96, 128, 160, и 192.
В целом, большая BitRate Значение результатов в более высоком качестве сжатия.
Чтобы включить этот аргумент пары "имя-значение", задайте OutputFormat на 'm4a' или 'mp4'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
'FilenamePrefix' - Префикс добавлен в имя файлаПрефикс, добавленный к имени файла, задается как разделенная разделенными запятой парами, состоящая из ' и вектор символов или строка.FilenamePrefix'
writeall функция добавляет указанный префикс к именам выходных файлов. Например, следующий код добавляет текущую дату в качестве префикса ко всем именам выходных файлов:
prefixText = string(datetime('today')); writeall(ADS,'C:\myFolder','FilenamePrefix',prefixText);
Типы данных: char | string
'FilenameSuffix' - Суффикс добавлен в имя файлаСуффикс, добавленный к имени файла, задается как разделенная разделенными запятой парами, состоящая из ' и вектор символов или строка. Суффикс имени файла применяется перед расширением файла.FilenameSuffix'
writeall функция добавляет указанный суффикс к выходу именам файлов. Например, следующий код добавляет описательный текст 'clean' как суффикс ко всем именам выходных файлов:
writeall(ADS,'C:\myFolder','FilenameSuffix','clean');
Типы данных: char | string
'UseParallel' - Индикатор для параллельной записиfalse (по умолчанию) | trueИндикатор для записи параллельно, заданный как разделенная разделенными запятой парами, состоящая из ' и UseParallel'false или true.
По умолчанию, writeall функция записывает последовательно. Если вы задаете UseParallel на true, затем writeall функция запишет выходные файлы параллельно.
Примечание
Для параллельной записи требуется Parallel Computing Toolbox™.
Типы данных: logical
'WriteFcn' - Пользовательская функция записиПользовательская функция записи, заданная как разделенная разделенными запятой парами, состоящая из ' и указатель на функцию. Указанная функция отвечает за создание файлов выхода. Можно использовать WriteFcn'WriteFcn записывать данные в различных форматах, даже если writeall не поддерживает непосредственно выход.
Пользовательская функция записи требует трех входных параметров: audioIn, info, и suggestedOutputType. Функция может также принимать дополнительные входы, такие как пары "имя-значение", после первых трёх необходимых входов.
function myWriter(audioIn,info,suggestedOutputType,varargin)audioIn содержит данные, считанные из входного datastore ADS.
info является объектом типа matlab.io.datastore.WriteInfo с полями, перечисленными в таблице.
| Область | Описание | Напечатать |
|---|---|---|
ReadInfo | Второй выход файла read способ. | struct |
SuggestedOutputName | Полное, глобально уникальное имя файла, соответствующее требованиям к расположению и именованию. | string |
Location | Заданное outputLocation передано в writeall. | string |
suggestedOutputType - Рекомендуемый тип выходного файла.
Простая функция записи, которая повторяет аудио 44,1 кГц перед записью.
function myWriter(data,info,~) fs = info.ReadInfo.SampleRate; desiredFs = 44.1e3; data = resample(data,desiredFs,fs); audiowrite(writeInfo.SuggestedOutputName,data,desiredFs); end
myWriter как в writeall function, использовать следующие команды:ads = audioDatastore(location); outputLocation = 'C:/tmp/MyData'; writeall(ads,outputLocation,'WriteFcn',@myWriter)
Типы данных: function_handle
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.