Ignore:
Timestamp:
2015-05-18T16:42:17+12:00 (9 years ago)
Author:
davidb
Message:

Completed version of Krumhansl's algorithm. Plus adding in of About bar. Plus tidy up of the 'by xxx' template

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/js/game-on.js

    r29888 r29893  
    8888}
    8989
     90
     91function computeMidiStats(track)
     92{
     93    var min_midi_pitch = num_midi_pitches-1;
     94    var max_midi_pitch = 0;
     95
     96    var track_chromatic_durations = [];
     97    for (var i=0; i<12; i++) {
     98    track_chromatic_durations[i] = 0;
     99    }
     100
     101    // Process each block within the track
     102    for (var b=0; b<track.length; b++) {
     103    var track_block = track[b];
     104    //var base_ctime = track_block.baseCTime;
     105    var block_events = track_block.events;
     106
     107    var block_chromatic_durations = [];
     108    for (var i=0; i<12; i++) {
     109        block_chromatic_durations[i] = 0;
     110    }
     111   
     112    for (var ne=0; ne<block_events.length; ne++) {
     113        var midi_pitch = block_events[ne].midiPitch;
     114
     115        if (midi_pitch < min_midi_pitch) {
     116        min_midi_pitch = midi_pitch;
     117        }
     118        if (midi_pitch > max_midi_pitch) {
     119        max_midi_pitch = midi_pitch;
     120        }
     121
     122        var chromatic_pitch = midi_pitch % 12;
     123        var chromatic_duration = block_events[ne].duration;
     124        block_chromatic_durations[chromatic_pitch] += chromatic_duration;
     125
     126        track_chromatic_durations[chromatic_pitch] += chromatic_duration;
     127    }
     128
     129    if (!("_computedKey" in track_block)) {
     130        var strongest_profile = khKeyDetection(block_chromatic_durations);
     131        track_block._computedKey = strongest_profile;
     132        console.log("***### key prediction: " + strongest_profile);
     133    }
     134
     135    }
     136
     137    if (!("_computedKey" in track)) {
     138    var strongest_profile = khKeyDetection(track_chromatic_durations);
     139    track._computedKey = strongest_profile;
     140    }
     141
     142    return { "max_midi_pitch": max_midi_pitch, "min_midi_pitch": min_midi_pitch};
     143}
     144
     145
    90146function displayActiveTrackLayers(docStorage)
    91147{
     
    116172        if (track != null) {
    117173
     174
     175        var midi_stats = computeMidiStats(track);
     176
     177        if (midi_stats.min_midi_pitch < min_midi_pitch) {
     178            min_midi_pitch = midi_stats.min_midi_pitch;
     179        }
     180        if (midi_stats.max_midi_pitch > max_midi_pitch) {
     181            max_midi_pitch = midi_stats.max_midi_pitch;
     182        }
     183
     184
    118185        // calculate range of midi pitches present
     186/*
    119187        for (var b=0; b<track.length; b++) {
    120188            var track_block = track[b];
     
    132200            }
    133201        }
     202*/
     203
    134204        }
    135205    }
Note: See TracChangeset for help on using the changeset viewer.