Impulse Response Capture & FFT Reverb MATLAB Script

%Default Test Function: projectimpulsemagicfft6("s_2_hands.mp3","r_LX48L_x_Small RChrch.wav",0.5,1)
function fft6verb = projectimpulsemagicfft6(signal_name,reverb_name,wet,speed_multiplier)
[signal,fs]=audioread(signal_name);
reverb=audioread(reverb_name);

%Move into GPU
signal = gpuArray(signal);
reverb = gpuArray(reverb);

%FFT
reverb_length = length(signal)+length(reverb);
f_signal=complex(fft(signal,reverb_length));
f_reverb=complex(fft(reverb,reverb_length));

%Cleanup
clear reverb;

%Convolution
f_conv=complex(f_signal.*f_reverb);

%Cleanup
clear f_signal f_reverb;

%IFFT
conv = real(ifft(f_conv));

%Fix Array Sizes
[m,n] = size(signal);
[m1,n1] = size(conv);
if m < m1
    signal(m1,:) = 0; % extend A with rows of zeros, up to the number of rows of A1
elseif m > m1
    conv(m,:) = 0; % extend A1 with rows of zeros, up to the number of rows of A
end
if n < n1
    signal(:,n1) = 0; % extend A with columns of zeros, up to the number of columns of A1
elseif n > n1
    conv(:,n) = 0; % extend A1 with columns of zeros, up to the number of columns of A
end

%Normalize Audio to Prevent Clipping
max_signal = max(signal);
signal_n = signal./max_signal;

max_conv = max(conv);
conv_n = conv./max_conv;

%Wet Dry Parameter
par_ng = 0.9*(wet*conv_n+(1-wet)*signal_n);

%Move GPU Array Back to Memory
par_n = gather(par_ng);

%Output
%sound(par_n,44100);
%fft5verb = par_n;
output_name = strrep(("o_" + signal_name + "_" + reverb_name + "_" + wet + "_wet_" + speed_multiplier + "x_speed"),".","_") + ".wav";
audiowrite(output_name, par_n, round(fs*speed_multiplier));
clearvars