我正在处理音频处理,但卡住了。我有一个视频文件,首先我转换为.wav文件。实际上我只需要提取声乐部分。我所做的是我能够移除声乐部分和仅背景声音。这意味着我有两个文件,现在一个主文件另一个只有音乐文件,即Karoake文件。两者的文件采样率都相同。我计划在每次主文件和karoake文件完全同时比较文件时,如果两者都相同则给出零。在这个过程中,我只能提取声乐部分。我是octave和matlab的新手。我正在附上我的日期工作。
[wave,fs]=wavread('music.wav');
[wave1,fs1]=wavread('sound.wav');
t=0:1/fs:(length(wave)-1)/fs;
t1=0:1/fs1:(length(wave1)-1)/fs1;
for x=0:length(wave)
if (wave{x}==wave1{x})
wave2{x}=wave{x}-wave1{x};
else
endif
endfor
for循环显示错误。
编辑:好的,我问的问题实际上不是问题。我想要的是仅提取音频文件的声乐部分。
答案 0 :(得分:2)
在Matlab(或Octave)中,您只能使用"()"索引矩阵。此外,Matlab中的起始索引是1,而不是像C或Java中的0。所以我认为你的代码必须是正确的:
for x=1:length(wave)
if (wave(x)==wave1(x))
wave2(x)=wave(x)-wave1(x);
end
您还可以使用某些数组乘法删除 for 指令:
wave2 = (wave - wave1).*(wave1==wave);