comparison demo_degradationUnits.m @ 28:76f45f5c9afd DoP tip

- added units * adaptiveEqualizer * applyMfccMeanAdaption - added corresponding data files for presets - modified applyImpulseReponse to use the estimated average group delay to adjust the output audio and keep the timestamps as is (was vice versa before) - added new units demos, incl one for applyLowpass
author SebastianEwert
date Tue, 21 Jan 2014 18:08:28 +0000
parents 48e065a17454
children
comparison
equal deleted inserted replaced
27:5ab87a0152e7 28:76f45f5c9afd
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))) 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)))
71 end 71 end
72 end 72 end
73 73
74 %% 74 %%
75 for k=1:length(filenames)
76 [f_audio,samplingFreq]=wavread(filenames{k});
77
78 parameter.snrRatio = 10; % in dB
79 parameter.loadInternalSound = 1;
80 parameter.internalSound = 'PubEnvironment1';
81 f_audio_out = degradationUnit_addSound(f_audio, samplingFreq, [], parameter);
82
83 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_02_addSound_file%d.wav',k)));
84 if createSpectrograms
85 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
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)))
87 end
88 end;
89
90 %%
91 for k=1:length(filenames)
92 [f_audio,samplingFreq]=wavread(filenames{k});
93
94 parameter.dsFrequency = 4000;
95 f_audio_out = degradationUnit_applyAliasing(f_audio, samplingFreq, [], parameter);
96
97 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_03_applyAliasing_file%d.wav',k)));
98 if createSpectrograms
99 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
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)))
101 end
102 end;
103
104 %%
105 for k=1:length(filenames)
106 [f_audio,samplingFreq]=wavread(filenames{k});
107
108 parameter.percentOfSamples = 10; % signal is scaled so that n% of samples clip
109 f_audio_out = degradationUnit_applyClippingAlternative(f_audio, samplingFreq, [], parameter);
110
111 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_04_applyClipping_file%d.wav',k)));
112 if createSpectrograms
113 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
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)))
115 end
116 end;
117 %%
118 for k=1:length(filenames)
119 [f_audio,samplingFreq]=wavread(filenames{k});
120
121 parameter.compressorSlope = 0.9;
122 parameter.normalizeOutputAudio = 1;
123 f_audio_out = degradationUnit_applyDynamicRangeCompression(f_audio, samplingFreq, [], parameter);
124
125 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_05_applyDynamicRangeCompression_file%d.wav',k)));
126 if createSpectrograms
127 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
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)))
129 end
130 end;
131
132 %%
133 for k=1:length(filenames)
134 [f_audio,samplingFreq]=wavread(filenames{k});
135
136 parameter.nApplications = 5;
137 f_audio_out = degradationUnit_applyHarmonicDistortion(f_audio, samplingFreq, [], parameter);
138
139 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_06_applyHarmonicDistortion_file%d.wav',k)));
140 if createSpectrograms
141 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
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)))
143 end
144 end;
145
146 %%
147 for k=1:length(filenames)
148 [f_audio,samplingFreq]=wavread(filenames{k});
149
150 parameter.LameOptions = '--preset cbr 32';
151 f_audio_out = degradationUnit_applyMp3Compression(f_audio, samplingFreq, [], parameter);
152
153 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_07_applyMp3Compression_file%d.wav',k)));
154 if createSpectrograms
155 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
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)))
157 end
158 end;
159
160 %%
161 for k=1:length(filenames)
162 [f_audio,samplingFreq]=wavread(filenames{k});
163
164 parameter.changeInPercent = +5;
165 f_audio_out = degradationUnit_applySpeedup(f_audio, samplingFreq, [], parameter);
166
167
168 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_08_applySpeedup_file%d.wav',k)));
169 if createSpectrograms
170 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
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)))
172 end
173 end;
174
175 %%
176 for k=1:length(filenames)
177 [f_audio,samplingFreq]=wavread(filenames{k});
178
179 parameter.intensityOfChange = 3;
180 parameter.frequencyOfChange = 0.5;
181 f_audio_out = degradationUnit_applyWowResampling(f_audio, samplingFreq, [], parameter);
182
183 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_09_applyWowResampling_file%d.wav',k)));
184 if createSpectrograms
185 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
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)))
187 end
188 end;
189
190 %%
191 for k=1:length(filenames)
192 [f_audio,samplingFreq]=wavread(filenames{k});
193
194 parameter.stopFrequency = 1000;
195 f_audio_out = degradationUnit_applyHighpassFilter(f_audio, samplingFreq, [], parameter);
196
197 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_10_applyHighpassFilter_file%d.wav',k)));
198 if createSpectrograms
199 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
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)))
201 end
202 end;
203
204
205 %%
206 % Some degradations delay the input signal. If some timepositions are given 75 % Some degradations delay the input signal. If some timepositions are given
207 % via timepositions_beforeDegr, the corresponding positions will be returned 76 % via timepositions_beforeDegr, the corresponding positions will be returned
208 % in timepositions_afterDegr. 77 % in timepositions_afterDegr.
209 timepositions_beforeDegr = [2, 3]; 78 timepositions_beforeDegr = [2, 3];
210 79
221 % time positions and audio can also be processed at the same time: 90 % time positions and audio can also be processed at the same time:
222 [f_audio_out,timepositions_afterDegr] = degradationUnit_applyImpulseResponse(f_audio, samplingFreq, timepositions_beforeDegr, parameter); 91 [f_audio_out,timepositions_afterDegr] = degradationUnit_applyImpulseResponse(f_audio, samplingFreq, timepositions_beforeDegr, parameter);
223 fprintf('degradation_applyFirFilter: adjusting time positions\n'); 92 fprintf('degradation_applyFirFilter: adjusting time positions\n');
224 for m=1:length(timepositions_afterDegr) fprintf('%g -> %g\n',timepositions_beforeDegr(m),timepositions_afterDegr(m)); end 93 for m=1:length(timepositions_afterDegr) fprintf('%g -> %g\n',timepositions_beforeDegr(m),timepositions_afterDegr(m)); end
225 94
226 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_11_applyImpulseResponse_file%d.wav',k))); 95 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_02_applyImpulseResponse_file%d.wav',k)));
227 if createSpectrograms 96 if createSpectrograms
228 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq); 97 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
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))) 98 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_applyImpulseResponse_file%d.png',k)))
230 end 99 end
231 end; 100 end;
232 101
102 %%
103 for k=1:length(filenames)
104 [f_audio,samplingFreq]=wavread(filenames{k});
105
106 parameter.snrRatio = 10; % in dB
107 parameter.loadInternalSound = 1;
108 parameter.internalSound = 'PubEnvironment1';
109 f_audio_out = degradationUnit_addSound(f_audio, samplingFreq, [], parameter);
110
111 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_03_addSound_file%d.wav',k)));
112 if createSpectrograms
113 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
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_03_addSound_file%d.png',k)))
115 end
116 end;
117
118 %%
119 for k=1:length(filenames)
120 [f_audio,samplingFreq]=wavread(filenames{k});
121
122 parameter.dsFrequency = 4000;
123 f_audio_out = degradationUnit_applyAliasing(f_audio, samplingFreq, [], parameter);
124
125 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_04_applyAliasing_file%d.wav',k)));
126 if createSpectrograms
127 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
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_04_applyAliasing_file%d.png',k)))
129 end
130 end;
131
132 %%
133 for k=1:length(filenames)
134 [f_audio,samplingFreq]=wavread(filenames{k});
135
136 parameter.percentOfSamples = 10; % signal is scaled so that n% of samples clip
137 f_audio_out = degradationUnit_applyClippingAlternative(f_audio, samplingFreq, [], parameter);
138
139 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_05_applyClipping_file%d.wav',k)));
140 if createSpectrograms
141 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
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_05_applyClipping_file%d.png',k)))
143 end
144 end;
145 %%
146 for k=1:length(filenames)
147 [f_audio,samplingFreq]=wavread(filenames{k});
148
149 parameter.compressorSlope = 0.9;
150 parameter.normalizeOutputAudio = 1;
151 f_audio_out = degradationUnit_applyDynamicRangeCompression(f_audio, samplingFreq, [], parameter);
152
153 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_06_applyDynamicRangeCompression_file%d.wav',k)));
154 if createSpectrograms
155 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
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_06_applyDynamicRangeCompression_file%d.png',k)))
157 end
158 end;
159
160 %%
161 for k=1:length(filenames)
162 [f_audio,samplingFreq]=wavread(filenames{k});
163
164 parameter.nApplications = 5;
165 f_audio_out = degradationUnit_applyHarmonicDistortion(f_audio, samplingFreq, [], parameter);
166
167 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_07_applyHarmonicDistortion_file%d.wav',k)));
168 if createSpectrograms
169 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
170 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_applyHarmonicDistortion_file%d.png',k)))
171 end
172 end;
173
174 %%
175 for k=1:length(filenames)
176 [f_audio,samplingFreq]=wavread(filenames{k});
177
178 parameter.LameOptions = '--preset cbr 32';
179 f_audio_out = degradationUnit_applyMp3Compression(f_audio, samplingFreq, [], parameter);
180
181 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_08_applyMp3Compression_file%d.wav',k)));
182 if createSpectrograms
183 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
184 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_applyMp3Compression_file%d.png',k)))
185 end
186 end;
187
188 %%
189 for k=1:length(filenames)
190 [f_audio,samplingFreq]=wavread(filenames{k});
191
192 parameter.changeInPercent = +5;
193 f_audio_out = degradationUnit_applySpeedup(f_audio, samplingFreq, [], parameter);
194
195
196 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_09_applySpeedup_file%d.wav',k)));
197 if createSpectrograms
198 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
199 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_applySpeedup_file%d.png',k)))
200 end
201 end;
202
203 %%
204 for k=1:length(filenames)
205 [f_audio,samplingFreq]=wavread(filenames{k});
206
207 parameter.intensityOfChange = 3;
208 parameter.frequencyOfChange = 0.5;
209 f_audio_out = degradationUnit_applyWowResampling(f_audio, samplingFreq, [], parameter);
210
211 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_10_applyWowResampling_file%d.wav',k)));
212 if createSpectrograms
213 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
214 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_applyWowResampling_file%d.png',k)))
215 end
216 end;
217
218 %%
219 for k=1:length(filenames)
220 [f_audio,samplingFreq]=wavread(filenames{k});
221
222 parameter.stopFrequency = 1000;
223 f_audio_out = degradationUnit_applyHighpassFilter(f_audio, samplingFreq, [], parameter);
224
225 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_11_applyHighpassFilter_file%d.wav',k)));
226 if createSpectrograms
227 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
228 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_applyHighpassFilter_file%d.png',k)))
229 end
230 end;
231
232 %%
233 for k=1:length(filenames)
234 [f_audio,samplingFreq]=wavread(filenames{k});
235
236 parameter.stopFrequency = 1000;
237 f_audio_out = degradationUnit_applyLowpassFilter(f_audio, samplingFreq, [], parameter);
238
239 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_12_applyLowpassFilter_file%d.wav',k)));
240 if createSpectrograms
241 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
242 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_12_applyLowpassFilter_file%d.png',k)))
243 end
244 end;
245
246
247 %%
248 for k=1:length(filenames)
249 [f_audio,samplingFreq]=wavread(filenames{k});
250
251 % There are four ways to specify the destination mean spectrum: 1. by
252 % loading example files provided with the toolbox, 2. by using specific
253 % noise "color" profiles, 3. by providing the destination mean spectrum
254 % using the parameter destMagFreqResp, 4. by providing audio data from
255 % which the destination mean spectrum is computed.
256 parameter.loadInternalMagFreqResp = 1;
257 parameter.internalMagFreqResp = 'Beethoven_Appasionata_Rwc';
258 f_audio_out = degradationUnit_adaptiveEqualizer(f_audio, samplingFreq, [], parameter);
259
260 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_13_adaptiveEqualizer_file%d.wav',k)));
261 if createSpectrograms
262 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
263 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_13_adaptiveEqualizer_file%d.png',k)))
264 end
265 end;
266
267 %%
268 if 1
269 for k=1:length(filenames)
270 [f_audio,samplingFreq]=wavread(filenames{k});
271
272 [parameter.audioDataForDestMfcc,parameter.audioDataForDestMfcc_sf]=wavread('testdata/RWC_P009m_drum.wav');
273
274 % After this unit, the mean MFCC vector of f_audio_out is almost identical to
275 % the one of RWC_P009m_drum.wav
276 parameter.visualizations = createSpectrograms;
277 f_audio_out = degradationUnit_applyMfccMeanAdaption(f_audio, samplingFreq, [], parameter);
278
279 wavwrite(f_audio_out,samplingFreq,16,fullfile(pathOutputDemo,sprintf('Unit_14_applyMfccMeanAdaption_file%d.wav',k)));
280 if createSpectrograms
281 [s,f,t] = spectrogram(f_audio_out,hamming(round(samplingFreq*0.093)),round(samplingFreq*0.093/2),[],samplingFreq);
282 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_14_applyMfccMeanAdaption_file%d.png',k)))
283 end
284 end
285 end
286
287
288