www.pudn.com > voiceprocessingtoolbox.rar > epDetect01.m


wavefile='清華大學資訊系.wav'; 
[wave, fs, nbits] = wavReadInt(wavefile);	% wave 是整數 
 
frameSize = 256; 
overlap = 128; 
 
wave=wave-mean(wave);				% 零點校正 
frameMat=buffer2(wave, frameSize, overlap);	% 切出音框 
frameNum=size(frameMat, 2);			% 音框的個數 
volume=sum(abs(frameMat));			% 計算音量 
volumeTh1=max(volume)*0.1;			% 音量門檻值之一 
volumeTh2=min(volume)*5;			% 音量門檻值之二 
volumeTh3=volume(1)*4;				% 音量門檻值之三 
index1 = find(volume>volumeTh1);		% 找出超過音量門檻值之一的音框 
index2 = find(volume>volumeTh2);		% 找出超過音量門檻值之二的音框 
index3 = find(volume>volumeTh3);		% 找出超過音量門檻值之三的音框 
endPoint1=frame2sampleIndex([index1(1), index1(end)], frameSize, overlap);	% 由 frame index 轉成 sample index 
endPoint2=frame2sampleIndex([index2(1), index2(end)], frameSize, overlap);	% 由 frame index 轉成 sample index 
endPoint3=frame2sampleIndex([index3(1), index3(end)], frameSize, overlap);	% 由 frame index 轉成 sample index 
 
subplot(2,1,1); 
time=(1:length(wave))/fs; 
plot(time, wave); 
ylabel('Amplitude'); title('Waveform'); 
axis([-inf inf -2^nbits/2 2^nbits/2]); 
line(time(endPoint1(  1))*[1 1], 2^nbits*[-1, 1], 'color', 'm'); 
line(time(endPoint1(end))*[1 1], 2^nbits*[-1, 1], 'color', 'm'); 
line(time(endPoint2(  1))*[1 1], 2^nbits*[-1, 1], 'color', 'g'); 
line(time(endPoint2(end))*[1 1], 2^nbits*[-1, 1], 'color', 'g'); 
line(time(endPoint3(  1))*[1 1], 2^nbits*[-1, 1], 'color', 'k'); 
line(time(endPoint3(end))*[1 1], 2^nbits*[-1, 1], 'color', 'k'); 
 
subplot(2,1,2); 
frameTime=frame2sampleIndex(1:frameNum, frameSize, overlap); 
plot(frameTime, volume, '.-'); 
ylabel('Sum of Abs.'); title('Volume'); 
axis tight; 
line([min(frameTime), max(frameTime)], volumeTh1*[1 1], 'color', 'm'); 
line(frameTime(index1(  1))*[1 1], [0, max(volume)], 'color', 'm'); 
line(frameTime(index1(end))*[1 1], [0, max(volume)], 'color', 'm'); 
line([min(frameTime), max(frameTime)], volumeTh2*[1 1], 'color', 'g'); 
line(frameTime(index2(  1))*[1 1], [0, max(volume)], 'color', 'g'); 
line(frameTime(index2(end))*[1 1], [0, max(volume)], 'color', 'g'); 
line([min(frameTime), max(frameTime)], volumeTh3*[1 1], 'color', 'k'); 
line(frameTime(index3(  1))*[1 1], [0, max(volume)], 'color', 'k'); 
line(frameTime(index3(end))*[1 1], [0, max(volume)], 'color', 'k');