В своем коде вы пытаетесь динамически создать имя выходной переменной nameSpeaker
с помощью инструкции nameSpeaker = sprintf('speaker1_%d', idx);
, чтобы использовать ее в качестве выходной переменной при вызове audioread
.
Это неверно, поскольку вы фактически присваиваете строку, созданную с помощью sprintf
, переменной nameSpeaker
, а не «меняете» ее имя.
Кроме того, вы должны управлять «нулями», включенными в имя файла.
Часть этой ошибки (которую можно исправить) в целом не рекомендуется использовать динамически созданную переменную.
Возможным решением может быть сохранение wav data
в структуре, которая позволяет динамически создавать имя поля.
Более того, поскольку в соответствии с опубликованным вами кодом вы заранее знаете path
и корневое имя входных файлов, вы можете создать полное имя файла, просто добавив разные строки, а не используя fullfile
Далее вы можете найти возможную реализацию предлагаемого решения.
На выходе будет структура с именем nameSpeaker
с набором полей с именами speaker1_1
, speaker1_2
, speaker1_3
... и т. д. после имени входного файла, в котором для простоты удалены «нули».
Каждое из этих полей представляет собой структуру с полями: data
и fs
, содержащими данные wav-файла.
Например:
данные speaker1_001.wav
arfe хранятся в структуре
nameSpeaker.speaker1_1.data
nameSpeaker.speaker1_1.fa
данные speaker1_002.wav
arfe хранятся в структуре
nameSpeaker.speaker1_2.data
nameSpeaker.speaker1_2.fs
и так далее.
% Defina the path
mypath='TrainVoices\speaker1'
% Define the file root name
f_root_name='speaker1_'
% Define the extension of the input file\
ext='.wav'
% Loop over the input filess
for idx = 1:20
%& add the proper number of "0" to tjhe filename
if(idx <= 9)
f_name=[f_root_name '00' num2str(idx)]
else
f_name=[f_root_name '0' num2str(idx)]
end
% Build the filename
filename=fullfile(mypath,[f_name ext])
% Read the wav file
[data,fs] = audioread(filename);
% Store the wav file data in a struct
nameSpeaker.([f_root_name num2str(idx)]).data=data;
nameSpeaker.([f_root_name num2str(idx)]).fs=fs;
end
Вы можете получить доступ к данным, просто указав «idx» файла.
Например, чтобы получить доступ к данным speaker1_001.wav
, вы можете просто определить файл «idx», а затем соответствующим образом построить имена полей:
file_idx=3
data=nameSpeaker.([f_root_name num2str(file_idx)]).data
fs=nameSpeaker.([f_root_name num2str(file_idx)]).fs
person
il_raffa
schedule
31.01.2019
speaker1_%d.wav
- person RC0993   schedule 31.01.2019