В вашем коде вы пытаетесь динамически создать имя выходной переменной nameSpeaker
с помощью инструкции nameSpeaker = sprintf('speaker1_%d', idx);
, чтобы использовать ее в качестве выходной переменной при вызове audioread
.
Thisневерно, поскольку вы фактически назначаете строку, созданную с помощью sprintf
, переменной nameSpeaker
, а не «меняете» ее имя.
Кроме того, вы должны управлять «нулями», включенными в имя файла.
Часть этой ошибки (которую можно исправить), как правило, не рекомендуется использовать динамически создаваемую переменную.
Возможным решением может быть сохранение wav data
в структуре, которая позволяет динамически создавать имя поля.
Более того, поскольку в соответствии с опубликованным кодом вы заранее знаете path
и корневое имя файлов inout, вы можетеСоздайте полное имя файла, просто добавив различные строки вместо использования 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