writeall

Запишите datastore в файлы

Описание

пример

writeall(ADS,outputLocation) пишут данные из аудио datastore 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 18 more
                              }
                     Folders: {
                              '/mathworks/devel/bat/BR2020ad/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-24-96-stereo-63secs.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      
WashingMachine-16-8-mono-1000secs.wav         
WashingMachine-16-8-mono-200secs.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 26 more
                              }
                     Folders: {
                              '/mathworks/devel/bat/BR2020ad/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 (10 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 26 more
                              }
                     Folders: {
                              ' .../BR2020ad_1302590_239645/mlx_to_docbook10/tp608c8a0b/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: {
                              ' .../tp608c8a0b/audio-ex78151030/KeywordSpeech-16-16-mono-34secs.flac';
                              ' .../mlx_to_docbook10/tp608c8a0b/audio-ex78151030/Plosives.wav';
                              ' .../mlx_to_docbook10/tp608c8a0b/audio-ex78151030/Sibilance.wav'
                              }
                     Folders: {
                              ' .../BR2020ad_1302590_239645/mlx_to_docbook10/tp608c8a0b/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/BR2020ad_1302590_239645/mlx_to_docbook10/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

Входные параметры

свернуть все

Аудио datastore в виде audioDatastore объект.

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

  • 'duplicate' – Реплицируйте структуру папок данных, на которые указывает аудио datastore. Задайте FolderLayout как 'duplicate' обеспечить соответствие между наборами входных и выходных данных.

  • 'flatten' – Запишите все файлы от входа до заданной выходной папки без любых промежуточных папок.

Типы данных: char | string

Формат выходного файла в виде разделенной запятой пары, состоящей из 'OutputFormat' и 'wav', 'flac', 'ogg', 'mp4', или 'm4a'.

Типы данных: char | string

Количество выходных битов на выборку в виде разделенной запятой пары, состоящей из 'BitsPerSample' и целое число.

Зависимости

Чтобы включить этот аргумент пары "имя-значение", установите OutputFormat к 'wav' или 'flac'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Количество килобит в секунду (Кбит/с) раньше сжимало звуковые файлы в виде разделенной запятой пары, состоящей из 'BitRate' и целое число. На Windows® 7 или позже, единственными допустимыми значениями является 96, 128, 160, и 192.

В общем случае больший BitRate значение приводит к более высокому качеству сжатия.

Зависимости

Чтобы включить этот аргумент пары "имя-значение", установите OutputFormat к 'm4a' или 'mp4'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Префикс, добавленный к имени файла в виде разделенной запятой пары, состоящей из 'FilenamePrefix' и вектор символов или строка.

writeall функция добавляет заданный префикс в имена выходного файла. Например, следующий код добавляет сегодняшнюю дату как префикс ко всем именам выходного файла:

prefixText = string(datetime('today'));
writeall(ADS,'C:\myFolder','FilenamePrefix',prefixText);

Типы данных: char | string

Суффикс, добавленный к имени файла в виде разделенной запятой пары, состоящей из 'FilenameSuffix' и вектор символов или строка. Суффикс имени файла применяется перед расширением файла.

writeall функция добавляет заданный суффикс в имена выходного файла. Например, следующий код добавляет описательный текст 'clean' как суффикс ко всем именам выходного файла:

writeall(ADS,'C:\myFolder','FilenameSuffix','clean');

Типы данных: char | string

Индикатор, чтобы записать параллельно в виде разделенной запятой пары, состоящей из 'UseParallel' и false или true.

По умолчанию, writeall функционируйте записи в сериале. Если вы устанавливаете UseParallel к true, затем writeall функционируйте пишут выходные файлы параллельно.

Примечание

Запись параллельно требует Parallel Computing Toolbox™.

Типы данных: логический

Пользовательская функция записи в виде разделенной запятой пары, состоящей из '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

Смотрите также

Введенный в R2020a