登录论坛

查看完整版本 : [求助]新手编程求助


xiaopeng1823
2008-12-02, 17:53
function code = train(traindir, n)
% 计算wav文件的VQ码码本
% Speaker Recognition: Training Stage
%
% Input:
% traindir : string name of directory contains all train sound files
% n : number of train files in traindir
%
% Output:
% code : trained VQ codebooks, code{i} for i-th speaker
%
% Note:
% Sound files in traindir is supposed to be:
% s1.wav, s2.wav, ..., sn.wav
% Example:
% >> code = train('C:\data\train\', 8);
k = 16; % number of centroids required
for i = 1:n % train a VQ codebook for each speaker
file = sprintf('%ss%d.wav', traindir, i);
disp(file);

[s, fs] = wavread(file);

v = mfcc(s, fs); % Compute MFCC's

code{i} = vqlbg(v, k); % Train VQ codebook
end

此为一段对n个说话人的录音生成n个码本的程序,我想该为几个说话人的录音生成1个码本的程序。
觉得应该从,提取的采样值s,入手,把每个人的采样值s连起来,如第一个人s=a,第二个人s=b,表示两个人特征的
采样值s=[a b].
这是我改的:
(刚接触matlab,对于编程不太了解,程序根本就运行不了,放在这里就是想让把自己的想法明确一点)
k = 16; % number of centroids required
for i = 1:n % train a VQ codebook for each speaker
file = sprintf('%ss%d.wav', traindir, i);
disp(file);

[s, fs] = wavread(file);
s{i}=s

end
s=[s{i}...s{n}]
v = mfcc(s, fs); % Compute MFCC's
code{i} = vqlbg(v, k); % Train VQ codebook