Mercurial > hg > audio-degradation-toolbox
diff demo_degradationUnits.m @ 4:053a55a91d20
- pimped the demos
- re-added some missing degradation data
author | SebastianEwert |
---|---|
date | Tue, 20 Aug 2013 16:35:54 +0100 |
parents | 9d682f5e3927 |
children | a4173509bc43 |
line wrap: on
line diff
--- a/demo_degradationUnits.m Tue Aug 20 12:31:29 2013 +0100 +++ b/demo_degradationUnits.m Tue Aug 20 16:35:54 2013 +0100 @@ -3,7 +3,7 @@ % % Centre for Digital Music, Queen Mary University of London. % This file copyright 2013 Sebastian Ewert, Matthias Mauch and QMUL. -% +% % This program is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation; either version 2 of the @@ -20,153 +20,209 @@ %% clear +close all addpath(fullfile(pwd,'AudioDegradationToolbox')); pathOutputDemo = 'demoOutput/'; if ~exist(pathOutputDemo,'dir'), mkdir(pathOutputDemo); end -%% -filename = 'testdata/472TNA3M_snippet.wav'; -[f_audio,samplingFreq]=wavread(filename); +filenames = { + 'testdata/RWC_G39.wav'; + 'testdata/RWC_G72.wav'; + 'testdata/RWC_G84.wav'; + 'testdata/RWC_P009m_drum.wav'; + 'testdata/RWC-C08.wav'; + }; -% with default settings: -f_audio_out = degradationUnit_addNoise(f_audio, samplingFreq); - -% adjusting some parameters: -parameter.snrRatio = 10; % in dB -parameter.noiseColor = 'pink'; % convenient access to several noise types -f_audio_out = degradationUnit_addNoise(f_audio, samplingFreq, [], parameter); - -wavwrite(f_audio,samplingFreq,16,fullfile(pathOutputDemo,'audio01_in.wav')); -wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,'audio01_out.wav')); - +createSpectrograms = 0; %% -filename = 'testdata/472TNA3M_snippet.wav'; -[f_audio,samplingFreq]=wavread(filename); - -parameter.snrRatio = 20; % in dB -parameter.loadInternalSound = 1; -parameter.internalSound = 'OldDustyRecording'; -f_audio_out = degradationUnit_addSound(f_audio, samplingFreq, [], parameter); - -wavwrite(f_audio,samplingFreq,16,fullfile(pathOutputDemo,'audio02_in.wav')); -wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,'audio02_out.wav')); +% just copying original files to the demo folder +for k=1:length(filenames) + copyfile(filenames{k}, fullfile(pathOutputDemo,sprintf('00_Original_file%d.wav',k))) + if createSpectrograms + [f_audio,samplingFreq]=wavread(filenames{k}); + [s,f,t] = spectrogram(f_audio,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq); + figure; imagesc(t,f,log10(abs(s)+1)); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('00_Original_file%d.png',k))) + end +end %% -filename = 'testdata/clarinet.wav'; -[f_audio,samplingFreq]=wavread(filename); - -parameter.dsFrequency = 8000; -f_audio_out = degradationUnit_applyAliasing(f_audio, samplingFreq, [], parameter); - -wavwrite(f_audio,samplingFreq,16,fullfile(pathOutputDemo,'audio03_in.wav')); -wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,'audio03_out.wav')); +for k=1:length(filenames) + [f_audio,samplingFreq]=wavread(filenames{k}); + + % with default settings: + %f_audio_out = degradationUnit_addNoise(f_audio, samplingFreq); + + % adjusting some parameters: + parameter.snrRatio = 10; % in dB + parameter.noiseColor = 'pink'; % convenient access to several noise types + f_audio_out = degradationUnit_addNoise(f_audio, samplingFreq, [], parameter); + + wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_01_addNoise_file%d.wav',k))); + if createSpectrograms + [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq); + figure; imagesc(t,f,log10(abs(s)+1)); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_01_addNoise_file%d.png',k))) + end +end %% -filename = 'testdata/472TNA3M_snippet.wav'; -[f_audio,samplingFreq]=wavread(filename); - -parameter.preNormalization = -5; % 95% quantile will be at this dB level -f_audio_out = degradationUnit_applyClipping(f_audio, samplingFreq, [], parameter); - -wavwrite(f_audio,samplingFreq,16,fullfile(pathOutputDemo,'audio04_in.wav')); -wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,'audio04_out.wav')); +for k=1:length(filenames) + [f_audio,samplingFreq]=wavread(filenames{k}); + + parameter.snrRatio = 10; % in dB + parameter.loadInternalSound = 1; + parameter.internalSound = 'OldDustyRecording'; + f_audio_out = degradationUnit_addSound(f_audio, samplingFreq, [], parameter); + + wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_02_addSound_file%d.wav',k))); + if createSpectrograms + [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq); + figure; imagesc(t,f,log10(abs(s)+1)); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_02_addSound_file%d.png',k))) + end +end; %% -filename = 'testdata/472TNA3M_snippet.wav'; -[f_audio,samplingFreq]=wavread(filename); - -parameter.percentOfSamples = 5; % signal is scaled so that n% of samples clip -f_audio_out = degradationUnit_applyClippingAlternative(f_audio, samplingFreq, [], parameter); - -wavwrite(f_audio,samplingFreq,16,fullfile(pathOutputDemo,'audio05_in.wav')); -wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,'audio05_out.wav')); +for k=1:length(filenames) + [f_audio,samplingFreq]=wavread(filenames{k}); + + parameter.dsFrequency = 4000; + f_audio_out = degradationUnit_applyAliasing(f_audio, samplingFreq, [], parameter); + + wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_03_applyAliasing_file%d.wav',k))); + if createSpectrograms + [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq); + figure; imagesc(t,f,log10(abs(s)+1)); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_03_applyAliasing_file%d.png',k))) + end +end; %% -filename = 'testdata/RWC-C08.wav'; -[f_audio,samplingFreq]=wavread(filename); - -parameter.compressorSlope = 0.9; -parameter.normalizeOutputAudio = 1; -f_audio_out = degradationUnit_applyDynamicRangeCompression(f_audio, samplingFreq, [], parameter); - -wavwrite(f_audio,samplingFreq,16,fullfile(pathOutputDemo,'audio06_in.wav')); -wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,'audio06_out.wav')); +for k=1:length(filenames) + [f_audio,samplingFreq]=wavread(filenames{k}); + + parameter.percentOfSamples = 10; % signal is scaled so that n% of samples clip + f_audio_out = degradationUnit_applyClippingAlternative(f_audio, samplingFreq, [], parameter); + + wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_04_applyClipping_file%d.wav',k))); + if createSpectrograms + [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq); + figure; imagesc(t,f,log10(abs(s)+1)); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_04_applyClipping_file%d.png',k))) + end +end; +%% +for k=1:length(filenames) + [f_audio,samplingFreq]=wavread(filenames{k}); + + parameter.compressorSlope = 0.9; + parameter.normalizeOutputAudio = 1; + f_audio_out = degradationUnit_applyDynamicRangeCompression(f_audio, samplingFreq, [], parameter); + + wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_05_applyDynamicRangeCompression_file%d.wav',k))); + if createSpectrograms + [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq); + figure; imagesc(t,f,log10(abs(s)+1)); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_05_applyDynamicRangeCompression_file%d.png',k))) + end +end; %% -filename = 'testdata/clarinet.wav'; -[f_audio,samplingFreq]=wavread(filename); - -parameter.nApplications = 3; -f_audio_out = degradationUnit_applyHarmonicDistortion(f_audio, samplingFreq, [], parameter); - -wavwrite(f_audio,samplingFreq,16,fullfile(pathOutputDemo,'audio07_in.wav')); -wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,'audio07_out.wav')); +for k=1:length(filenames) + [f_audio,samplingFreq]=wavread(filenames{k}); + + parameter.nApplications = 5; + f_audio_out = degradationUnit_applyHarmonicDistortion(f_audio, samplingFreq, [], parameter); + + wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_06_applyHarmonicDistortion_file%d.wav',k))); + if createSpectrograms + [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq); + figure; imagesc(t,f,log10(abs(s)+1)); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_06_applyHarmonicDistortion_file%d.png',k))) + end +end; %% -filename = 'testdata/p009m_drum.wav'; -[f_audio,samplingFreq]=wavread(filename); - -parameter.LameOptions = '--preset cbr 128'; -f_audio_out = degradationUnit_applyMp3Compression(f_audio, samplingFreq, [], parameter); - -wavwrite(f_audio,samplingFreq,16,fullfile(pathOutputDemo,'audio08_in.wav')); -wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,'audio08_out.wav')); +for k=1:length(filenames) + [f_audio,samplingFreq]=wavread(filenames{k}); + + parameter.LameOptions = '--preset cbr 32'; + f_audio_out = degradationUnit_applyMp3Compression(f_audio, samplingFreq, [], parameter); + + wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_07_applyMp3Compression_file%d.wav',k))); + if createSpectrograms + [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq); + figure; imagesc(t,f,log10(abs(s)+1)); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_07_applyMp3Compression_file%d.png',k))) + end +end; %% -filename = 'testdata/clarinet.wav'; -[f_audio,samplingFreq]=wavread(filename); +for k=1:length(filenames) + [f_audio,samplingFreq]=wavread(filenames{k}); + + parameter.changeInPercent = +5; + f_audio_out = degradationUnit_applySpeedup(f_audio, samplingFreq, [], parameter); + -parameter.changeInPercent = +3; -f_audio_out = degradationUnit_applySpeedup(f_audio, samplingFreq, [], parameter); - -wavwrite(f_audio,samplingFreq,16,fullfile(pathOutputDemo,'audio09_in.wav')); -wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,'audio09_out.wav')); + wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_08_applySpeedup_file%d.wav',k))); + if createSpectrograms + [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq); + figure; imagesc(t,f,log10(abs(s)+1)); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_08_applySpeedup_file%d.png',k))) + end +end; %% -filename = 'testdata/RWC-C08.wav'; -[f_audio,samplingFreq]=wavread(filename); - -parameter.intensityOfChange = 1.5; -parameter.frequencyOfChange = 0.5; -f_audio_out = degradationUnit_applyWowResampling(f_audio, samplingFreq, [], parameter); - -wavwrite(f_audio,samplingFreq,16,fullfile(pathOutputDemo,'audio10_in.wav')); -wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,'audio10_out.wav')); +for k=1:length(filenames) + [f_audio,samplingFreq]=wavread(filenames{k}); + + parameter.intensityOfChange = 3; + parameter.frequencyOfChange = 0.5; + f_audio_out = degradationUnit_applyWowResampling(f_audio, samplingFreq, [], parameter); + + wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_09_applyWowResampling_file%d.wav',k))); + if createSpectrograms + [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq); + figure; imagesc(t,f,log10(abs(s)+1)); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_09_applyWowResampling_file%d.png',k))) + end +end; %% -filename = 'testdata/RWC-C08.wav'; -[f_audio,samplingFreq]=wavread(filename); - -parameter.stopFrequency = 100; -f_audio_out = degradationUnit_applyHighpassFilter(f_audio, samplingFreq, [], parameter); - -wavwrite(f_audio,samplingFreq,16,fullfile(pathOutputDemo,'audio11_in.wav')); -wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,'audio11_out.wav')); +for k=1:length(filenames) + [f_audio,samplingFreq]=wavread(filenames{k}); + + parameter.stopFrequency = 1000; + f_audio_out = degradationUnit_applyHighpassFilter(f_audio, samplingFreq, [], parameter); + + wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_10_applyHighpassFilter_file%d.wav',k))); + if createSpectrograms + [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq); + figure; imagesc(t,f,log10(abs(s)+1)); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_10_applyHighpassFilter_file%d.png',k))) + end +end; %% -filename = 'testdata/472TNA3M_snippet.wav'; -[f_audio,samplingFreq]=wavread(filename); - % Some degradations delay the input signal. If some timepositions are given % via timepositions_beforeDegr, the corresponding positions will be returned -% in timepositions_afterDegr. +% in timepositions_afterDegr. timepositions_beforeDegr = [2, 3]; % Processing the time positions even works without processing the audio data (f_audio_out is empty afterwards) +parameter.loadInternalIR = 0; +parameter.impulseResponse = [1 -1 1 -1 1 -1 ] / 6; % some impulse response +parameter.impulseResponseSampFreq = samplingFreq; parameter.normalizeOutputAudio = 1; -parameter.impulseResponse = [0.5 -0.5 0.5 -0.5 0.5 -0.5 ]; -parameter.impulseResponseSampFreq = samplingFreq; [f_audio_out,timepositions_afterDegr] = degradationUnit_applyImpulseResponse([], [], timepositions_beforeDegr, parameter); -% time positions and audio can also be processed at the same time: -[f_audio_out,timepositions_afterDegr] = degradationUnit_applyImpulseResponse(f_audio, samplingFreq, timepositions_beforeDegr, parameter); -fprintf('degradation_applyFirFilter: adjusting time positions\n'); -for k=1:length(timepositions_afterDegr) fprintf('%g -> %g\n',timepositions_beforeDegr(k),timepositions_afterDegr(k)); end +for k=1:length(filenames) + [f_audio,samplingFreq]=wavread(filenames{k}); + + % time positions and audio can also be processed at the same time: + [f_audio_out,timepositions_afterDegr] = degradationUnit_applyImpulseResponse(f_audio, samplingFreq, timepositions_beforeDegr, parameter); + fprintf('degradation_applyFirFilter: adjusting time positions\n'); + for m=1:length(timepositions_afterDegr) fprintf('%g -> %g\n',timepositions_beforeDegr(m),timepositions_afterDegr(m)); end + + wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_11_applyImpulseResponse_file%d.wav',k))); + if createSpectrograms + [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq); + figure; imagesc(t,f,log10(abs(s)+1)); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_11_applyImpulseResponse_file%d.png',k))) + end +end; -wavwrite(f_audio,samplingFreq,16,fullfile(pathOutputDemo,'audio12_in.wav')); -wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,'audio12_out.wav')); -