Запись 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.