To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.
root / _segmentation / makeparts.m
History | View | Annotate | Download (1.39 KB)
| 1 |
function outparts = makeparts(beattimes,segtimes,seglevel) |
|---|---|
| 2 |
|
| 3 |
parts = struct('n',[], 'indices',[], 'letter', [],'level',[]);
|
| 4 |
nPart = 0; |
| 5 |
nSeg = size(segtimes,1); |
| 6 |
|
| 7 |
for iSeg = 1:nSeg |
| 8 |
newpart = true; |
| 9 |
% tempbeat = struct([]); |
| 10 |
segbeats = find(mean(beattimes,2) >= segtimes(iSeg,1) & mean(beattimes,2) < segtimes(iSeg,2)); |
| 11 |
lenSegbeats = length(segbeats); |
| 12 |
for iPart = 1:nPart |
| 13 |
if seglevel(iSeg) == parts(iPart).level && lenSegbeats == parts(iPart).n |
| 14 |
parts(iPart).indices = [parts(iPart).indices segbeats(1)]; |
| 15 |
% parts(iPart).beat = [parts(iPart).beat tempbeat]; |
| 16 |
newpart = false; |
| 17 |
break; |
| 18 |
else |
| 19 |
newpart = true; |
| 20 |
end |
| 21 |
end |
| 22 |
if newpart && ~isempty(segbeats) |
| 23 |
nPart = nPart + 1; |
| 24 |
parts(nPart).indices = segbeats(1); |
| 25 |
parts(nPart).n = lenSegbeats; |
| 26 |
parts(nPart).level = seglevel(iSeg); |
| 27 |
% parts(nPart).beat = tempbeat; |
| 28 |
end |
| 29 |
|
| 30 |
end |
| 31 |
partnind = zeros(nPart,1); |
| 32 |
partlen = zeros(nPart,1); |
| 33 |
for iPart = 1:nPart |
| 34 |
partnind(iPart) = length(parts(iPart).indices); |
| 35 |
partlen(iPart) = parts(iPart).n; |
| 36 |
end |
| 37 |
[partind,partind] = sort(partnind.*partlen,'descend'); |
| 38 |
letters = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U'};
|
| 39 |
outparts = parts; |
| 40 |
for iPart = 1:nPart |
| 41 |
kPart = partind(iPart); |
| 42 |
parts(kPart).letter = letters{iPart};
|
| 43 |
outparts(iPart) = parts(kPart); |
| 44 |
end |