Запись хранилища данных в файлы
writeall( записывает данные из хранилища аудиоданных ADS,outputLocation)ADS в файлы, расположенные по адресу outputLocation.
writeall( записывает данные с дополнительными параметрами, заданными одним или несколькими аргументами пары имя-значение.ADS,outputLocation,Name,Value)
writeall(ADS,outputLocation,'OutputFormat','flac') записывает данные в файлы FLAC.Создание audioDatastore объект, указывающий на аудио образцы WAV, включенные в Audio Toolbox™. 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"
Создайте пользовательскую функцию записи, которая извлекает кепстральные коэффициенты частоты (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).
Создайте новое хранилище данных, указывающее на набор дополненных аудиоданных.
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"
Определите пользовательскую функцию записи, которая сначала определяет области речи в звуковых сигналах, считанных из хранилища данных, а затем записывает отдельные области речи в отдельные файлы. Добавьте номер области к именам файлов. Определение функции находится в конце этого примера.
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"
Прочитайте образец из хранилища данных и прослушайте его.
[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
Создайте объект хранилища данных преобразования, применяющий операции очистки.
adsTransform = transform(ads,@myTransform,"IncludeInfo",true);Звонить writeall на объекте хранилища данных преобразования для создания чистого набора данных. Укажите формат как FLAC. Запишите набор данных в текущую папку.
outputLocation = pwd; writeall(adsTransform,outputLocation,"OutputFormat","flac")
Создайте новый объект хранилища данных, который указывает на чистый набор данных.
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 - Хранилище аудиоданныхaudioDatastore объектХранилище аудиоданных, указанное как 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' - Реплицируйте структуру папок данных, на которые указывает хранилище аудиоданных. Укажите 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 функция параллельно записывает выходные файлы.
Примечание
Для параллельной записи требуется Toolbox™ Parallel Computing.
Типы данных: logical
'WriteFcn' - Пользовательская функция записиПользовательская функция записи, заданная как разделенная запятыми пара, состоящая из ' и дескриптор функции. Указанная функция отвечает за создание выходных файлов. Вы можете использовать WriteFcn'WriteFcn для записи данных в различных форматах, даже если writeall не поддерживает формат вывода напрямую.
Для пользовательской функции записи требуется три входных аргумента: audioIn, info, и suggestedOutputType. Функция также может принимать дополнительные входные данные, такие как пары имя-значение, после первых трех требуемых входных данных.
function myWriter(audioIn,info,suggestedOutputType,varargin)audioIn содержит данные, считанные из хранилища входных данных 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 используйте следующие команды:ads = audioDatastore(location); outputLocation = 'C:/tmp/MyData'; writeall(ads,outputLocation,'WriteFcn',@myWriter)
Типы данных: function_handle
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.