comparison Problems/generateAudioDeclippingProblem.m @ 144:19e0af570914 release_1.5

Merge from branch "ivand_dev"
author Ivan <ivan.damnjanovic@eecs.qmul.ac.uk>
date Tue, 26 Jul 2011 15:14:15 +0100
parents 31d2864dfdd4
children b14209313ba4
comparison
equal deleted inserted replaced
143:8d866d96f006 144:19e0af570914
1 function data = generateAudioDeclippingProblem(soundfile, clippingLevel, windowSize, overlap, wa, ws, wd, Dict_fun, redundancyFactor)
2 %% Generate Audio Declipping Problem
3 %
4 % generateAudioDeclippingProblem is part of the SMALLbox [1] and generates
5 % Audio declipping is a problem proposed in Audio Inpaining Toolbox and
6 % in [2].
7 %
8 % [1] I. Damnjanovic, M. E. P. Davies, and M. P. Plumbley "SMALLbox - an
9 % evaluation framework for sparse representations and dictionary
10 % learning algorithms," V. Vigneron et al. (Eds.): LVA/ICA 2010,
11 % Springer-Verlag, Berlin, Germany, LNCS 6365, pp. 418-425
12 % [2] A. Adler, V. Emiya, M. G. Jafari, M. Elad, R. Gribonval, and M. D.
13 % Plumbley, “Audio Inpainting,” submitted to IEEE Trans. Audio, Speech,
14 % and Lang. Proc., 2011, http://hal.inria.fr/inria-00577079/en/.
15
16
17 % Centre for Digital Music, Queen Mary, University of London.
18 % This file copyright 2011 Ivan Damnjanovic.
19 %
20 % This program is free software; you can redistribute it and/or
21 % modify it under the terms of the GNU General Public License as
22 % published by the Free Software Foundation; either version 2 of the
23 % License, or (at your option) any later version. See the file
24 % COPYING included with this distribution for more information.
25 %
26 %%
27 FS=filesep;
28 TMPpath=pwd;
29
30 if ~ exist( 'soundfile', 'var' ) || isempty(soundfile)
31 %ask for file name
32 [pathstr1, name, ext, versn] = fileparts(which('SMALLboxSetup.m'));
33 cd([pathstr1,FS,'data',FS,'audio']);
34 [filename,pathname] = uigetfile({'*.mat; *.mid; *.wav'},'Select a file to transcribe');
35 [pathstr, name, ext, versn] = fileparts(filename);
36 data.name=name;
37
38 if strcmp(ext,'.mid')
39 midi=readmidi(filename);
40 % data.notesOriginal=midiInfo(midi);
41 y=midi2audio(midi);
42 wavwrite(y, 44100, 16, 'temp.wav');
43 [x.signal, x.fs, x.nbits]=wavread('temp.wav');
44 delete('temp.wav');
45 elseif strcmp(ext,'.wav')
46 % cd([pathstr1,FS, 'data', FS, 'audio', FS, 'midi']);
47 % filename1=[name, '.mid'];
48 % if exist(filename1, 'file')
49 % midi=readmidi(filename1);
50 % data.notesOriginal=midiInfo(midi);
51 % end
52 cd([pathstr1,FS, 'data', FS, 'audio', FS, 'wav']);
53 [x.signal, x.fs, x.nbits]=wavread(filename);
54 else
55 % cd([pathstr1,FS, 'data', FS, 'audio', FS, 'midi']);
56 % filename1=[name, '.mid'];
57 % if exist(filename1, 'file')
58 % midi=readmidi(filename1);
59 % data.notesOriginal=midiInfo(midi);
60 % end
61 cd([pathstr1,FS, 'data', FS, 'audio', FS, 'mat']);
62 x=load([pathname,filename]);
63 end
64 else
65 [x.signal, x.fs, x.nbits]=wavread(soundfile);
66 [pathstr, name, ext, versn] = fileparts(soundfile);
67 data.name=name;
68 end
69
70 if ~ exist( 'clippingLevel', 'var' ) || isempty(clippingLevel), clippingLevel = 0.6; end
71 if ~ exist( 'windowSize', 'var' ) || isempty(windowSize), windowSize = 256; end
72 if ~ exist( 'overlap', 'var' ) || isempty(overlap), overlap = 0.5; end
73 if ~ exist( 'wa', 'var' ) || isempty(wa), wa = @wRect; end % Analysis window
74 if ~ exist( 'ws', 'var' ) || isempty(ws), ws = @wSine; end % Synthesis window
75 if ~ exist( 'wd', 'var' ) || isempty(wd), wd = @wRect; end % Weighting window for dictionary atoms
76
77 %% preparing signal
78
79 [problemData, solutionData] = generateDeclippingProblem(x.signal,clippingLevel);
80
81 x_clip = im2colstep(problemData.x,[windowSize 1],[overlap*windowSize 1]);
82 x_clip= diag(wa(windowSize)) * x_clip;
83 blkMask=im2colstep(double(~problemData.IMiss),[windowSize 1],[overlap*windowSize 1]);
84
85 %% Building dictionary
86 if ~exist( 'redundancyFactor', 'var' ) || isempty(redundancyFactor), redundancyFactor = 2; end % Weighting window for dictionary atoms
87 if exist('Dict_fun', 'var')&&~isempty(Dict_fun)
88 param=struct('N', windowSize, 'redundancyFactor', redundancyFactor, 'wd', wd);
89 data.B = Dict_fun(param);
90 end
91
92 data.b = x_clip;
93 data.M = blkMask;
94 data.original = solutionData.xClean;
95 data.clipped = problemData.x;
96 data.clipMask = problemData.IMiss;
97 data.clippingLevel = clippingLevel;
98 data.windowSize = windowSize;
99 data.overlap = overlap;
100 data.ws = ws;
101 data.wa = wa;
102 data.wd = wd;
103
104 data.fs = x.fs;
105 data.nbits = x.nbits;
106
107 [data.m, data.n] = size(x_clip);
108 data.p = windowSize*redundancyFactor; %number of dictionary elements
109
110 cd(TMPpath);
111
112 end