annotate demo_degradationUnits.m @ 11:2d0ed50c547f version 0.11

Removed tag version 0.11
author matthiasm
date Wed, 21 Aug 2013 19:18:43 +0100
parents 75ea9e8bcd88
children 48e065a17454
rev   line source
matthiasm@0 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 2 % Audio Degradation Toolbox
matthiasm@0 3 %
matthiasm@0 4 % Centre for Digital Music, Queen Mary University of London.
matthiasm@0 5 % This file copyright 2013 Sebastian Ewert, Matthias Mauch and QMUL.
SebastianEwert@4 6 %
matthiasm@0 7 % This program is free software; you can redistribute it and/or
matthiasm@0 8 % modify it under the terms of the GNU General Public License as
matthiasm@0 9 % published by the Free Software Foundation; either version 2 of the
matthiasm@0 10 % License, or (at your option) any later version. See the file
matthiasm@0 11 % COPYING included with this distribution for more information.
matthiasm@0 12 %
matthiasm@0 13 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 14
matthiasm@0 15 % Note: Some degradations impose a delay/temporal distortion on the input
matthiasm@0 16 % data. The last example shows, given time positions before the
matthiasm@0 17 % degradation, how the corresponding time positions after the degradation
matthiasm@0 18 % can be retrieved
matthiasm@0 19
matthiasm@0 20 %%
matthiasm@0 21
matthiasm@0 22 clear
SebastianEwert@4 23 close all
matthiasm@0 24
matthiasm@0 25 addpath(fullfile(pwd,'AudioDegradationToolbox'));
matthiasm@0 26
matthiasm@0 27 pathOutputDemo = 'demoOutput/';
matthiasm@0 28 if ~exist(pathOutputDemo,'dir'), mkdir(pathOutputDemo); end
matthiasm@0 29
SebastianEwert@4 30 filenames = {
SebastianEwert@4 31 'testdata/RWC_G39.wav';
SebastianEwert@4 32 'testdata/RWC_G72.wav';
SebastianEwert@4 33 'testdata/RWC_G84.wav';
SebastianEwert@4 34 'testdata/RWC_P009m_drum.wav';
SebastianEwert@4 35 'testdata/RWC-C08.wav';
matthiasm@7 36 'testdata/session5-faure_elegie2c-001-0.wav';
matthiasm@7 37 'testdata/175234__kenders2000__nonsense-sentence.wav';
SebastianEwert@4 38 };
matthiasm@0 39
matthiasm@9 40 createSpectrograms = 0;
matthiasm@0 41
matthiasm@0 42 %%
SebastianEwert@4 43 % just copying original files to the demo folder
SebastianEwert@5 44 maxValueRangeVis = zeros(length(filenames));
SebastianEwert@4 45 for k=1:length(filenames)
SebastianEwert@4 46 copyfile(filenames{k}, fullfile(pathOutputDemo,sprintf('00_Original_file%d.wav',k)))
SebastianEwert@4 47 if createSpectrograms
SebastianEwert@4 48 [f_audio,samplingFreq]=wavread(filenames{k});
SebastianEwert@4 49 [s,f,t] = spectrogram(f_audio,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
SebastianEwert@4 50 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)))
SebastianEwert@5 51 maxValueRangeVis(k) = max(max(log10(abs(s)+1)));
SebastianEwert@4 52 end
SebastianEwert@4 53 end
matthiasm@0 54
matthiasm@0 55 %%
SebastianEwert@4 56 for k=1:length(filenames)
SebastianEwert@4 57 [f_audio,samplingFreq]=wavread(filenames{k});
SebastianEwert@4 58
SebastianEwert@4 59 % with default settings:
SebastianEwert@4 60 %f_audio_out = degradationUnit_addNoise(f_audio, samplingFreq);
SebastianEwert@4 61
SebastianEwert@4 62 % adjusting some parameters:
SebastianEwert@4 63 parameter.snrRatio = 10; % in dB
SebastianEwert@4 64 parameter.noiseColor = 'pink'; % convenient access to several noise types
SebastianEwert@4 65 f_audio_out = degradationUnit_addNoise(f_audio, samplingFreq, [], parameter);
SebastianEwert@4 66
SebastianEwert@4 67 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_01_addNoise_file%d.wav',k)));
SebastianEwert@4 68 if createSpectrograms
SebastianEwert@4 69 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
SebastianEwert@5 70 figure; imagesc(t,f,log10(abs(s)+1),[0 maxValueRangeVis(k)]); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_01_addNoise_file%d.png',k)))
SebastianEwert@4 71 end
SebastianEwert@4 72 end
matthiasm@0 73
matthiasm@0 74 %%
SebastianEwert@4 75 for k=1:length(filenames)
SebastianEwert@4 76 [f_audio,samplingFreq]=wavread(filenames{k});
SebastianEwert@4 77
SebastianEwert@4 78 parameter.snrRatio = 10; % in dB
SebastianEwert@4 79 parameter.loadInternalSound = 1;
matthiasm@7 80 parameter.internalSound = 'PubEnvironment1';
SebastianEwert@4 81 f_audio_out = degradationUnit_addSound(f_audio, samplingFreq, [], parameter);
SebastianEwert@4 82
SebastianEwert@4 83 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_02_addSound_file%d.wav',k)));
SebastianEwert@4 84 if createSpectrograms
SebastianEwert@4 85 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
SebastianEwert@5 86 figure; imagesc(t,f,log10(abs(s)+1),[0 maxValueRangeVis(k)]); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_02_addSound_file%d.png',k)))
SebastianEwert@4 87 end
SebastianEwert@4 88 end;
matthiasm@0 89
matthiasm@0 90 %%
SebastianEwert@4 91 for k=1:length(filenames)
SebastianEwert@4 92 [f_audio,samplingFreq]=wavread(filenames{k});
SebastianEwert@4 93
SebastianEwert@4 94 parameter.dsFrequency = 4000;
SebastianEwert@4 95 f_audio_out = degradationUnit_applyAliasing(f_audio, samplingFreq, [], parameter);
SebastianEwert@4 96
SebastianEwert@4 97 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_03_applyAliasing_file%d.wav',k)));
SebastianEwert@4 98 if createSpectrograms
SebastianEwert@4 99 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
SebastianEwert@5 100 figure; imagesc(t,f,log10(abs(s)+1),[0 maxValueRangeVis(k)]); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_03_applyAliasing_file%d.png',k)))
SebastianEwert@4 101 end
SebastianEwert@4 102 end;
matthiasm@0 103
matthiasm@0 104 %%
SebastianEwert@4 105 for k=1:length(filenames)
SebastianEwert@4 106 [f_audio,samplingFreq]=wavread(filenames{k});
SebastianEwert@4 107
SebastianEwert@4 108 parameter.percentOfSamples = 10; % signal is scaled so that n% of samples clip
SebastianEwert@4 109 f_audio_out = degradationUnit_applyClippingAlternative(f_audio, samplingFreq, [], parameter);
SebastianEwert@4 110
SebastianEwert@4 111 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_04_applyClipping_file%d.wav',k)));
SebastianEwert@4 112 if createSpectrograms
SebastianEwert@4 113 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
SebastianEwert@5 114 figure; imagesc(t,f,log10(abs(s)+1),[0 maxValueRangeVis(k)]); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_04_applyClipping_file%d.png',k)))
SebastianEwert@4 115 end
SebastianEwert@4 116 end;
SebastianEwert@4 117 %%
SebastianEwert@4 118 for k=1:length(filenames)
SebastianEwert@4 119 [f_audio,samplingFreq]=wavread(filenames{k});
SebastianEwert@4 120
SebastianEwert@4 121 parameter.compressorSlope = 0.9;
SebastianEwert@4 122 parameter.normalizeOutputAudio = 1;
SebastianEwert@4 123 f_audio_out = degradationUnit_applyDynamicRangeCompression(f_audio, samplingFreq, [], parameter);
SebastianEwert@4 124
SebastianEwert@4 125 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_05_applyDynamicRangeCompression_file%d.wav',k)));
SebastianEwert@4 126 if createSpectrograms
SebastianEwert@4 127 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
SebastianEwert@5 128 figure; imagesc(t,f,log10(abs(s)+1),[0 maxValueRangeVis(k)]); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_05_applyDynamicRangeCompression_file%d.png',k)))
SebastianEwert@4 129 end
SebastianEwert@4 130 end;
matthiasm@0 131
matthiasm@0 132 %%
SebastianEwert@4 133 for k=1:length(filenames)
SebastianEwert@4 134 [f_audio,samplingFreq]=wavread(filenames{k});
SebastianEwert@4 135
SebastianEwert@4 136 parameter.nApplications = 5;
SebastianEwert@4 137 f_audio_out = degradationUnit_applyHarmonicDistortion(f_audio, samplingFreq, [], parameter);
SebastianEwert@4 138
SebastianEwert@4 139 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_06_applyHarmonicDistortion_file%d.wav',k)));
SebastianEwert@4 140 if createSpectrograms
SebastianEwert@4 141 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
SebastianEwert@5 142 figure; imagesc(t,f,log10(abs(s)+1),[0 maxValueRangeVis(k)]); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_06_applyHarmonicDistortion_file%d.png',k)))
SebastianEwert@4 143 end
SebastianEwert@4 144 end;
matthiasm@0 145
matthiasm@0 146 %%
SebastianEwert@4 147 for k=1:length(filenames)
SebastianEwert@4 148 [f_audio,samplingFreq]=wavread(filenames{k});
SebastianEwert@4 149
SebastianEwert@4 150 parameter.LameOptions = '--preset cbr 32';
SebastianEwert@4 151 f_audio_out = degradationUnit_applyMp3Compression(f_audio, samplingFreq, [], parameter);
SebastianEwert@4 152
SebastianEwert@4 153 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_07_applyMp3Compression_file%d.wav',k)));
SebastianEwert@4 154 if createSpectrograms
SebastianEwert@4 155 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
SebastianEwert@5 156 figure; imagesc(t,f,log10(abs(s)+1),[0 maxValueRangeVis(k)]); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_07_applyMp3Compression_file%d.png',k)))
SebastianEwert@4 157 end
SebastianEwert@4 158 end;
matthiasm@0 159
matthiasm@0 160 %%
SebastianEwert@4 161 for k=1:length(filenames)
SebastianEwert@4 162 [f_audio,samplingFreq]=wavread(filenames{k});
SebastianEwert@4 163
SebastianEwert@4 164 parameter.changeInPercent = +5;
SebastianEwert@4 165 f_audio_out = degradationUnit_applySpeedup(f_audio, samplingFreq, [], parameter);
SebastianEwert@4 166
matthiasm@0 167
SebastianEwert@4 168 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_08_applySpeedup_file%d.wav',k)));
SebastianEwert@4 169 if createSpectrograms
SebastianEwert@4 170 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
SebastianEwert@5 171 figure; imagesc(t,f,log10(abs(s)+1),[0 maxValueRangeVis(k)]); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_08_applySpeedup_file%d.png',k)))
SebastianEwert@4 172 end
SebastianEwert@4 173 end;
matthiasm@0 174
matthiasm@0 175 %%
SebastianEwert@4 176 for k=1:length(filenames)
SebastianEwert@4 177 [f_audio,samplingFreq]=wavread(filenames{k});
SebastianEwert@4 178
SebastianEwert@4 179 parameter.intensityOfChange = 3;
SebastianEwert@4 180 parameter.frequencyOfChange = 0.5;
SebastianEwert@4 181 f_audio_out = degradationUnit_applyWowResampling(f_audio, samplingFreq, [], parameter);
SebastianEwert@4 182
SebastianEwert@4 183 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_09_applyWowResampling_file%d.wav',k)));
SebastianEwert@4 184 if createSpectrograms
SebastianEwert@4 185 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
SebastianEwert@5 186 figure; imagesc(t,f,log10(abs(s)+1),[0 maxValueRangeVis(k)]); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_09_applyWowResampling_file%d.png',k)))
SebastianEwert@4 187 end
SebastianEwert@4 188 end;
matthiasm@0 189
matthiasm@0 190 %%
SebastianEwert@4 191 for k=1:length(filenames)
SebastianEwert@4 192 [f_audio,samplingFreq]=wavread(filenames{k});
SebastianEwert@4 193
SebastianEwert@4 194 parameter.stopFrequency = 1000;
SebastianEwert@4 195 f_audio_out = degradationUnit_applyHighpassFilter(f_audio, samplingFreq, [], parameter);
SebastianEwert@4 196
SebastianEwert@4 197 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_10_applyHighpassFilter_file%d.wav',k)));
SebastianEwert@4 198 if createSpectrograms
SebastianEwert@4 199 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
SebastianEwert@5 200 figure; imagesc(t,f,log10(abs(s)+1),[0 maxValueRangeVis(k)]); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_10_applyHighpassFilter_file%d.png',k)))
SebastianEwert@4 201 end
SebastianEwert@4 202 end;
matthiasm@0 203
matthiasm@0 204
matthiasm@0 205 %%
matthiasm@0 206 % Some degradations delay the input signal. If some timepositions are given
matthiasm@0 207 % via timepositions_beforeDegr, the corresponding positions will be returned
SebastianEwert@4 208 % in timepositions_afterDegr.
matthiasm@0 209 timepositions_beforeDegr = [2, 3];
matthiasm@0 210
matthiasm@0 211 % Processing the time positions even works without processing the audio data (f_audio_out is empty afterwards)
SebastianEwert@4 212 parameter.loadInternalIR = 0;
SebastianEwert@4 213 parameter.impulseResponse = [1 -1 1 -1 1 -1 ] / 6; % some impulse response
SebastianEwert@4 214 parameter.impulseResponseSampFreq = samplingFreq;
matthiasm@0 215 parameter.normalizeOutputAudio = 1;
matthiasm@0 216 [f_audio_out,timepositions_afterDegr] = degradationUnit_applyImpulseResponse([], [], timepositions_beforeDegr, parameter);
matthiasm@0 217
SebastianEwert@4 218 for k=1:length(filenames)
SebastianEwert@4 219 [f_audio,samplingFreq]=wavread(filenames{k});
SebastianEwert@4 220
SebastianEwert@4 221 % time positions and audio can also be processed at the same time:
SebastianEwert@4 222 [f_audio_out,timepositions_afterDegr] = degradationUnit_applyImpulseResponse(f_audio, samplingFreq, timepositions_beforeDegr, parameter);
SebastianEwert@4 223 fprintf('degradation_applyFirFilter: adjusting time positions\n');
SebastianEwert@4 224 for m=1:length(timepositions_afterDegr) fprintf('%g -> %g\n',timepositions_beforeDegr(m),timepositions_afterDegr(m)); end
SebastianEwert@4 225
SebastianEwert@4 226 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_11_applyImpulseResponse_file%d.wav',k)));
SebastianEwert@4 227 if createSpectrograms
SebastianEwert@4 228 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
SebastianEwert@5 229 figure; imagesc(t,f,log10(abs(s)+1),[0 maxValueRangeVis(k)]); axis xy; colormap(hot); ylim([0,8000]); colorbar; print('-dpng', fullfile(pathOutputDemo,sprintf('Unit_11_applyImpulseResponse_file%d.png',k)))
SebastianEwert@4 230 end
SebastianEwert@4 231 end;
matthiasm@0 232