function vocoder() %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Task: To create a vocoded version % % Inputs: - % % Outputs: - % % % Author: Charles Stelandre - charles.stelandre@ecam.fr % % Date: 01/05/2025 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all close all clc modfile = './sound/modulator22.wav'; carfile = ['./sound/white_periodic.wav']; %outfile = 'vocodedsound.wav' [modul, sr1] = audioread(modfile); [carrier, sr2] = audioread(carfile); if sr1~=sr2, disp('your sampling rates dont match'); end y = chanvocoder(carrier, modul, 512, 16, 0.1); %audiowrite(outfile, y, sr1); sr = sr1; % Assuming sampling rates are the same or we proceed with the modulator's rate % --- Play the modulator sound --- disp('Playing the modulator sound...'); sound(modul, sr); pause(length(modul)/sr + 0.5); % Add a small pause % --- Play the vocoded sound --- disp('Playing the vocoded sound...'); sound(y, sr); % audiowrite(outfile, y, sr); % --- Plot Temporal Variations --- t_modul = (0:length(modul)-1) / sr; plot(t_modul, modul); title('Temporal Variation of Modulator'); xlabel('Time (s)'); ylabel('Amplitude'); t_carrier = (0:length(carrier)-1) / sr; plot(t_carrier, carrier); title('Temporal Variation of Carrier'); xlabel('Time (s)'); ylabel('Amplitude'); t_output = (0:length(y)-1) / sr; plot(t_output, y); title('Temporal Variation of Vocoded Output'); xlabel('Time (s)'); ylabel('Amplitude'); window_size = 30; % Example window size (20ms) step_size = 5; % Example step size (10ms overlap) spectrogram(modul, sr, step_size, window_size); title('Spectrogram of Modulator'); colorbar; ylabel('Frequency (Hz)'); xlabel('Time (s)'); spectrogram(carrier, sr, step_size, window_size); title('Spectrogram of Carrier'); colorbar; ylabel('Frequency (Hz)'); xlabel('Time (s)'); spectrogram(y, sr, step_size, window_size); title('Spectrogram of Vocoded Output'); colorbar; ylabel('Frequency (Hz)'); xlabel('Time (s)'); end