clear all;
load mtlb;
data_before = mtlb;
data_before = filter([1 -0.97],1,data_before);          %プリエンファシス
frameSize = 0.025;                                      % フレーム長：0.025秒（25ms）
frameShift = 0.010;                                     % フレームシフト長：0.010秒（10ms）
frameSizeSample = fix( Fs * frameSize );                % フレーム長：サンプル換算
frameShiftSample = fix( Fs * frameShift );              % フレームシフト長：サンプル換算
maxFrame = fix((length(data_before) - (frameSizeSample - frameShiftSample)) / frameShiftSample) - 1;
startThisFrame = 1;                                     % フレームの開始サンプル番号
endThisFrame = startThisFrame + frameSizeSample - 1;    % フレームの終了サンプル番号
data_after = zeros(length(data_before), 1);             % 結合後の音声データの格納用

for count = 1 : maxFrame
	thisData = data_before(startThisFrame : endThisFrame);
    
    %フーリエ変換前の窓掛け
    window = hanning(frameSizeSample);
    thisData = thisData .* window;

	%高速フーリエ変換
	fftsize = frameSizeSample * 2;              % FFT次数は【１フレームのサンプルサイズの2倍】にします
	dft = fft(thisData, fftsize);               % フーリエ変換

	%逆フーリエ変換
	sound_part = real(ifft(dft, fftsize));      % 逆フーリエ変換をして実部を取り出す
    sound_part_cut = sound_part(1:fftsize/2);   %【波形成分は1番目〜半分まで】　→　サンプル数が thisData と一致する

	% 音声を結合
	data_after(startThisFrame:endThisFrame) = data_after(startThisFrame:endThisFrame) + sound_part_cut;

    startThisFrame = startThisFrame + frameShiftSample;
	endThisFrame = startThisFrame + frameSizeSample - 1;
end
%プロット
subplot(2, 1, 1); 
spectrogram(data_before, hamming(64), 32, 256, Fs, 'yaxis'); title('元の波形');
subplot(2, 1, 2); 
spectrogram(data_after, hamming(64), 32, 256, Fs, 'yaxis'); title('再結合した波形');
%再生
wavplay(data_before, Fs);
wavplay(data_after, Fs);
