Mercurial > hg > nimfks
comparison src/matlab/chromsynth.m @ 0:c52bc3e8d3ad tip
user: boblsturm
branch 'default'
added README.md
added assets/.DS_Store
added assets/playButton.jpg
added assets/stopButton.png
added assets/swapButton.jpg
added data/.DS_Store
added data/fiveoctaves.mp3
added data/glock2.wav
added data/sinScale.mp3
added data/speech_female.mp3
added data/sweep.wav
added nimfks.m.lnk
added src/.DS_Store
added src/matlab/.DS_Store
added src/matlab/AnalysisCache.m
added src/matlab/CSS.m
added src/matlab/DataHash.m
added src/matlab/ExistsInCache.m
added src/matlab/KLDivCost.m
added src/matlab/LoadFromCache.m
added src/matlab/SA_B_NMF.m
added src/matlab/SaveInCache.m
added src/matlab/Sound.m
added src/matlab/SynthesisCache.m
added src/matlab/chromagram_E.m
added src/matlab/chromagram_IF.m
added src/matlab/chromagram_P.m
added src/matlab/chromsynth.m
added src/matlab/computeSTFTFeat.m
added src/matlab/controller.m
added src/matlab/decibelSliderReleaseCallback.m
added src/matlab/drawClickCallBack.m
added src/matlab/fft2chromamx.m
added src/matlab/hz2octs.m
added src/matlab/ifgram.m
added src/matlab/ifptrack.m
added src/matlab/istft.m
added src/matlab/nimfks.fig
added src/matlab/nimfks.m
added src/matlab/nmfFn.m
added src/matlab/nmf_beta.m
added src/matlab/nmf_divergence.m
added src/matlab/nmf_euclidean.m
added src/matlab/prune_corpus.m
added src/matlab/rot_kernel.m
added src/matlab/templateAdditionResynth.m
added src/matlab/templateDelCb.m
added src/matlab/templateScrollCb.m
author | boblsturm |
---|---|
date | Sun, 18 Jun 2017 06:26:13 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c52bc3e8d3ad |
---|---|
1 function [x,CF,CM] = chromsynth(F,bp,sr) | |
2 % [x,CF,CM] = chromsynth(F,bp,sr) | |
3 % Resynthesize a chroma feature vector to audio | |
4 % F is 12 rows x some number of columns, one per beat | |
5 % bp is the period of one beat in sec (or a vector of beat times) | |
6 % sr is the sampling rate of the output waveform | |
7 % x is returned as a 12 semitone-spaced sines modulated by F | |
8 % CF,CM return actual sinusoid matrices passed to synthtrax | |
9 % Actual Shepard tones now implemented! 2007-04-19 | |
10 % 2006-07-14 dpwe@ee.columbia.edu | |
11 | |
12 if nargin < 2; bp = 0.5; end % 120 bpm | |
13 if nargin < 3; sr = 22050; end | |
14 | |
15 [nchr,nbts] = size(F); | |
16 | |
17 % resynth | |
18 if length(bp) == 1 | |
19 bups = 8; % upsampling factor | |
20 framerate = bups/bp; | |
21 ncols = nbts*bups; | |
22 CMbu = zeros(nchr, ncols); | |
23 for i = 1:bups | |
24 CMbu = CMbu + upsample(F', bups, i-1)'; | |
25 end | |
26 else | |
27 % vector of beat times - quantize | |
28 framerate = 50; % frames per sec | |
29 nbeats = length(bp); | |
30 lastbeat = bp(nbeats) + (bp(nbeats) - bp(nbeats-1)); | |
31 ncols = round(lastbeat * framerate); | |
32 CMbu = zeros(nchr, ncols); | |
33 xF = [zeros(12,1),F]; | |
34 for i = 1:ncols | |
35 CMbu(:,i) = xF(:,max(find(i/framerate >= [0,bp]))); | |
36 end | |
37 end | |
38 | |
39 %CFbu = repmat(440*2.^([0:(nchr-1)]'/nchr),1,ncols); | |
40 %x = synthtrax(CFbu,CMbu,sr,round(sr/framerate)); | |
41 octs = 7; | |
42 basefrq = 27.5; % A1; +6 octaves = 3520 | |
43 CFbu = repmat(basefrq*2.^([0:(nchr-1)]'/nchr),1,ncols); | |
44 CF = []; | |
45 CM = []; | |
46 % what bin is the center freq? | |
47 f_ctr = 440; | |
48 f_sd = 0.5; | |
49 f_bins = basefrq*2.^([0:(nchr*octs - 1)]/nchr); | |
50 f_dist = log(f_bins/f_ctr)/log(2)/f_sd; | |
51 % actually just = ([0:(nchr*octs - 1)]/nchr-log2(f_ctr/basefrq))/f_sd | |
52 % Gaussian weighting centered of f_ctr, with f_sd | |
53 f_wts = exp(-0.5*f_dist.^2); | |
54 for oct = 1:octs | |
55 CF = [CF;(2^oct)*CFbu]; | |
56 % pick out particular weights | |
57 CM = [CM;diag(f_wts((oct-1)*nchr+[1:nchr]))*CMbu]; | |
58 end | |
59 % Remove sines above nyquist | |
60 CFok = (CF(:,1) < sr/2); | |
61 CF = CF(CFok,:); | |
62 CM = CM(CFok,:); | |
63 % Synth the sines | |
64 x = synthtrax(CF,CM,sr,round(sr/framerate)); | |
65 | |
66 % Playing synth along with audio: | |
67 %>> rdc = chromsynth(Dy.F(:,160+[1:300]),Dy.bts(160+[1:300]) - Dy.bts(160),sr); | |
68 %>> Dy.bts(161)*sr | |
69 %ans = | |
70 % 279104 | |
71 %>> size(rdc) | |
72 %ans = | |
73 % 1 498401 | |
74 %>> ddd = db(279104+[1:498401]); | |
75 %>> soundsc([ddd,rdc'/40],sr) |