Import Audacity Labels to Signal Labeler
This example shows how to import labels created in Audacity™ into Signal Labeler.
Read Labels in MATLAB
You have an audio file consisting of a human voice uttering "Volume up" several times.
Load the audio file to the MATLAB® workspace.
audioFile = "speaker1.ogg";
[x,fs] = audioread(audioFile);
sound(x,fs)
You label the file in Audacity [1] and export the labels to speaker.txt
.
Read the labels using readtable
. The labels consist of three columns corresponding to the speech utterances along with their respective start and end times (in seconds).
labelFile = "speaker1.txt"; roiTable = readtable(labelFile,Delimiter="tab"); roiTable.Properties.VariableNames = ["StartTime","EndTime","Value"]
roiTable=6×3 table
StartTime EndTime Value
_________ _______ _____________
0.33273 0.74033 {'Volume up'}
1.2062 1.8716 {'Volume up'}
2.6785 3.111 {'Volume up'}
3.7432 4.4087 {'Volume' }
4.7331 5.0243 {'Up' }
5.4984 5.9809 {'Volume up'}
In order to gain insight into the labels, you plot the audio signal along with a mask corresponding to labeled regions of speech.
Convert the signal regions of interest to a binary mask.
mask=signalMask(table(roiTable{:,1:2},categorical(roiTable{:,3})),SampleRate=fs); plotsigroi(mask, x, true);
Convert Labels to a Labeled Signal Set
Next, convert the label data to a labeledSignalSet
that can be imported to Signal Labeler.
First, define the label type. Specify "roi"
(Region of interest) for the label type, and "string"
for the label datatype.
labelName = "Speech"; lblDef = signalLabelDefinition(string(labelName),... LabelType="roi",... LabelDataType="string");
Next, create a labeledSignalSet
pointing to the labeled audio file. Add the label definition to the labeled signal set.
lss = labeledSignalSet(audioDatastore(audioFile),lblDef);
Set the label values.
roiLimits = [roiTable.StartTime roiTable.EndTime]; setLabelValue(lss,1,labelName,roiLimits,string(roiTable.Value));
Load Labels in Signal Labeler
You are now ready to read these labels into Signal Labeler.
1) Open signalLabeler
2) Click Import, then From Workspace
, and import lss
.
The audio signal is now available to you along with its labels.
Import a Labeled Dataset
The helper function importLabels
creates a labeled signal set corresponding to labels for multiple audio files. In this example, you work with two audio files with labels stored in text files.
Call importLabels
to create a signal data set for multiple annotated files. Specify the label name as "Speech"
.
lss = importLabels("Speech");
You can now load lss
in SignalLabeler
by following the same steps from the previous section.
function lss = importLabels(labelName) % IMPORTLABELS Import labels from multiple audio file % % The function assumes the labels are stored in *.txt files % The function assumes the label file name is identical to the % audio file name. labelFiles = dir("*.txt"); labelFiles = {labelFiles.name}; numFiles = length(labelFiles); % Create an audio datastore pointing to all audio files in the current % folder ads = audioDatastore(pwd); lss = labeledSignalSet(ads); lblDef = signalLabelDefinition(string(labelName),... LabelType="roi",... LabelDataType="string"); addLabelDefinitions(lss,lblDef) for index0=1:numFiles filename = labelFiles{index0}; roiTable = readtable(filename,Delimiter="tab"); roiTable.Properties.VariableNames = ["StartTime","EndTime","Value"]; roiLimits = [roiTable.StartTime roiTable.EndTime]; setLabelValue(lss,index0,labelName,roiLimits,roiTable.Value); end end