Запишите datastore в файлы
writeall(
пишут данные из аудио datastore 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"
Создайте пользовательскую функцию записи, которая извлекает mel частоту 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)
Вы теперь создали набор данных, состоящий из MFCCs для каждого звукового файла.
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
Создайте объект datastore преобразования, который применяет операции по очистке.
adsTransform = transform(ads,@myTransform,"IncludeInfo",true);
Вызовите writeall
на преобразовании 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
— Аудио datastoreaudioDatastore
объектАудио 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'
– Реплицируйте структуру папок данных, на которые указывает аудио datastore. Задайте FolderLayout
как 'duplicate'
обеспечить соответствие между наборами входных и выходных данных.
'flatten'
– Запишите все файлы от входа до заданной выходной папки без любых промежуточных папок.
Типы данных: char |
string
'OutputFormat'
— Формат выходного файла'wav'
(значение по умолчанию) | 'flac'
| 'ogg'
| 'mp4'
| 'm4a'
Формат выходного файла в виде разделенной запятой пары, состоящей из '
и OutputFormat
''wav'
, 'flac'
, 'ogg'
, 'mp4'
, или 'm4a'
.
Типы данных: char |
string
'BitsPerSample'
— Количество выходных битов на выборку
(значение по умолчанию) | 8
| 24
| 32
| 64
Количество выходных битов на выборку в виде разделенной запятой пары, состоящей из '
и целое число.BitsPerSample
'
Чтобы включить этот аргумент пары "имя-значение", установите OutputFormat
к 'wav'
или 'flac'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
'BitRate'
— Килобиты в секунду (Кбит/с)
(значение по умолчанию) | 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™.
Типы данных: логический
'WriteFcn'
— Пользовательская функция записиПользовательская функция записи в виде разделенной запятой пары, состоящей из '
и указатель на функцию. Заданная функция ответственна за создание выходных файлов. Можно использовать WriteFcn
'WriteFcn
записывать данные во множестве форматов, даже если writeall
непосредственно не поддерживает выходной формат.
Пользовательская функция записи требует трех входных параметров: audioIn
информация
, и 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
функция, используйте эти команды:ads = audioDatastore(location); outputLocation = 'C:/tmp/MyData'; writeall(ads,outputLocation,'WriteFcn',@myWriter)
Типы данных: function_handle
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.