Mercurial > hg > camir-aes2014
diff core/magnatagatune/MTTAudioFeatureRAW.m @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/magnatagatune/MTTAudioFeatureRAW.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,127 @@ +% -- +% This class loads and hanles the aufdio features included with the MTT +% Library +% --- + + +classdef MTTAudioFeatureRAW < AudioFeatureRAW & handle + + + properties(Constant = true) + + my_revision = str2double(substr('$Rev: 2284 $', 5, -1)); + end + + properties + % --- + % Set default parameters + % --- + + end + % --- + % member functions + % --- + methods + + % --- + % constructor: pointer to feature in database + % --- + function feature = MTTAudioFeatureRAW(varargin) + + feature = feature@AudioFeatureRAW(varargin{:}); + + end + + % --- + % load feature data from xml file + % --- + function data = extract(feature, clip) + % load feature data by parsing xml + + global globalvars; + + % fprintf('parsing features for clip %d \n',clip.id()); + + % parse feature + data = xml_parse_mtt(clip.featurefile_full()); + + % precombine the segmentst information for better + % interoperability with MSD data later + + data.segments_pitches = [data.segments(:).pitches]; + data.segments_timbre = [data.segments(:).timbre]; + + data.segments_duration = [data.segments(:).duration]; + data.segments_start = [data.segments(:).start]; + + data.sections_start = [data.sections(:).start]; + data.sections_duration = [data.sections(:).duration]; + + data.segments_duration = [data.segments(:).duration]; + + data.segments_loudness_max_time = [data.segments(:).loudness_max_time]; + data.segments_loudness_max = [data.segments(:).loudness_max]; + data.segments_loudness = [data.segments(:).loudness]; + + % --- + % TODO: feature.data.bars + % --- + [data.bars, data.beats, data.tatums] = MTTAudioFeatureRAW.infer_bar_times(data.bars); + + % save info data + data.info.type = 'MTTAudioFeatureRAW'; + data.info.owner = clip; + data.info.owner_id = clip.id; + data.info.creatorrev = feature.my_revision; + + data.info.params = feature.my_params; + end + end + + methods(Static) + function [bars, beats, tatums] = infer_bar_times(bar) + % [bars, beats, tatums] = infer_bar_times(feature) + % + % extract bar and beat starting times from tatums + beats = []; + bars = []; + tatums = []; + + % bars + for i = 1:numel(bar) + % beats + for j = 1:numel(bar(i).beat) + % tatums + for k = 1:numel(bar(i).beat(j).tatum) + tatum = bar(i).beat(j).tatum(k); + + % collect tatums and confidence + tatums(1:2,end+1) = [tatum.time,tatum.confidence]; + + + % --- + % save beat if this is the first tatum in it + % --- + if k == 1 + beats(1:2,end+1) = [tatum.time,... + bar(i).beat(j).confidence]; + + % --- + % save bar if this is the first tatum in it + % --- + if j == 1 + bars(1:2,end+1) = [tatum.time,... + bar(i).confidence]; + end + end + + + end + end + end + + % end function + end + end + +end \ No newline at end of file