To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Revision:

root / _song / song_segchroma.m

History | View | Annotate | Download (1.34 KB)

1
function song = song_segchroma(song, param)
2
switch param.seg.type
3
    case 'none' % no segmentation, segchroma equals syncchroma
4
        song.segchroma = song.syncchroma;
5
    otherwise
6
        song = overlaychroma(song, param);
7
end
8

    
9
function song = overlaychroma(song,param)
10
song.segchroma.treble = zeros(size(song.syncchroma.treble));
11
song.segchroma.bass = zeros(size(song.syncchroma.bass));
12
nPart = numel(song.parts);
13
for iPart = 1:nPart
14
    song.parts(iPart).nInd = length(song.parts(iPart).indices);
15
    for iOccur = 1:song.parts(iPart).nInd
16
        iStartIndex = song.parts(iPart).indices(iOccur);
17
        iEndIndex = iStartIndex + song.parts(iPart).n - 1;
18
        for kOccur = 1:song.parts(iPart).nInd
19
            kStartIndex = song.parts(iPart).indices(kOccur);
20
            kEndIndex = kStartIndex + song.parts(iPart).n - 1;
21
            song.segchroma.treble(iStartIndex:iEndIndex,:) = ...
22
                song.segchroma.treble(iStartIndex:iEndIndex,:) + ...
23
                song.syncchroma.treble(kStartIndex:kEndIndex,:);
24
            song.segchroma.bass(iStartIndex:iEndIndex,:) = ...
25
                song.segchroma.bass(iStartIndex:iEndIndex,:) + ...
26
                song.syncchroma.bass(kStartIndex:kEndIndex,:);
27
        end
28
    end
29
end
30
song.segchroma.treble = qnormalise(song.segchroma.treble,inf,2);
31
song.segchroma.bass = qnormalise(song.segchroma.bass,inf,2);