//============================================================================= // Brass Fingering Plugin // // Copyright (C) 2016/2022 Alexander Schwedler, alt trp/tb by Babecka // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 // as published by the Free Software Foundation and appearing in // the file LICENCE.GPL //============================================================================= //Modified by Abel Sánchez import QtQuick 2.0 import MuseScore 3.0 MuseScore { version: "2.0" description: qsTr("This plugin adds fingering for brass instruments--Schwedler, alt by Babecka") menuPath: qsTr("Plugins.Brass Fingering Alt abelsMod") property variant seperator: "\n"; property variant offsetFactor: -2.3; property variant verbose: true; property variant baseKey: -2; //offset for trumpet in matrix, default basekey property variant baseKeyEuphonium: 8; //offset for euphonium in matrix property variant baseKeyC: -4; //offset for trumpet in C property variant baseKeyTuba: 22; //ofset for tuba property variant noteTable: { 26: {fingering: "1\n2\n3"}, // E 27: {fingering: "1\n3"}, // F 28: {fingering: "2\n3"}, // Gb 29: {fingering: "1\n2"}, // G 30: {fingering: "1"}, // Ab 31: {fingering: "2"}, // A 32: {fingering: "0"}, // Bb 33: {fingering: "1\n2\n3"}, // B 34: {fingering: "1\n3"}, // C 35: {fingering: "2\n3"}, // Db 36: {fingering: "1\n2"}, // D 37: {fingering: "1", tuba:""}, // Eb 38: {fingering: "2", slide: "7", tuba:""}, // E 39: {fingering: "0", slide: "6", tuba:""}, // F 40: {fingering: "2\n3", slide: "5", tuba: "1\n2\n3"}, // Gb 41: {fingering: "1\n2", slide: "4", tuba: "1\n3"}, // G 42: {fingering: "1", slide: "3", tuba: "2\n3"}, // Ab 43: {fingering: "2", slide: "2", tuba: "1\n2"}, // A 44: {fingering: "0", slide: "1", tuba: "1"}, // Bb 45: {fingering: "1\n2", slide: "7", tuba: "2"}, // B 46: {fingering: "1", slide: "6", tuba: "0"}, // C 47: {fingering: "2\n3", slide: "5", tuba:""}, // Db 48: {fingering: "0", slide: "4", tuba: "1\n2\n3\n4"}, // D 49: {fingering: "1", slide: "3", tuba: "1\n3\n4"}, // Eb 50: {fingering: "1\n2\n3", slide: "2", tuba: "2\n3\n4"}, // E 51: {fingering: "1\n3", slide: "1", tuba: "1\n2\n4"}, // F 52: {fingering: "2\n3", slide: "5", tuba: "1\n2\n3"}, // Gb 53: {fingering: "1\n2", slide: "4", tuba: "1\n3"}, // G 54: {fingering: "1", slide: "3", tuba: "2\n3"}, // Ab 55: {fingering: "2", slide: "2", tuba: "1\n2"}, // A 56: {fingering: "0", slide: "1", tuba: "1"}, // Bb 57: {fingering: "1\n2\n3", slide: "4", tuba: "2"}, // B 58: {fingering: "1\n3", slide: "3", tuba: "0"}, // C <----- 59: {fingering: "2\n3", slide: "2", tuba: "1\n2\n3"}, // Db 60: {fingering: "1\n2", slide: "1", tuba: "1\n3"}, // D 61: {fingering: "1", slide: "3", tuba: "2\n3"}, // Eb 62: {fingering: "2", slide: "2", tuba: "1\n2"}, // E 63: {fingering: "0", slide: "1", tuba: "1"}, // F 64: {fingering: "2\n3", slide: "3", tuba: "2"}, // Gb 65: {fingering: "1\n2", slide: "2", tuba: "0"}, // G 66: {fingering: "1", slide: "3", tuba: "2\n3"}, // Ab 67: {fingering: "2", slide: "2", tuba: "1\n2"}, // A 68: {fingering: "0", slide: "1", tuba: "1"}, // Bb 69: {fingering: "1\n2", tuba: "2"}, // B 70: {fingering: "1", tuba: "0", bugle: "0"}, // C 71: {fingering: "2", tuba: "1\n2", bugle: "1\n2"}, // Db 72: {fingering: "0", tuba: "1", bugle: "2"}, // D 73: {fingering: "1", tuba: "2", bugle: "1"}, // Eb 74: {fingering: "2", tuba: "0", bugle:"0"}, // E 75: {fingering: "0", tuba: "1", bugle: "2"}, // F 76: {fingering: "2\n3", tuba: "2", bugle: "1"}, // Gb 77: {fingering: "1\n2", tuba: "0", bugle: "0"}, // G 78: {fingering: "1", tuba: "2\n3", bugle: "2"}, // Ab 79: {fingering: "2", tuba: "1\n2", bugle: "1"}, // A 80: {fingering: "0", tuba: "1", bugle: "0"}, // Bb 81: {fingering: "1\n2", tuba: "2", bugle: "2"}, // B 82: {fingering: "1", tuba: "0", bugle: "0"}, // C 83: {fingering: "2", tuba: "2", bugle: "2"}, // Db 84: {fingering: "0", tuba: "0", bugle: "0"}, // D 85: {tuba: "2", bugle: "2"}, // Eb 86: {tuba: "0", bugle: "0"}, // E 87: {tuba: "1", bugle: "1"}, // F 88: {tuba: "2", bugle: "0"}, // Gb 89: {tuba: "0"}, // G 90: {tuba: "1"}, // Ab 91: {tuba: "2"}, // A 92: {tuba: "1"}, // Bb 93: {tuba: "2"}, // B 94: {tuba: "0"}, // C } function getNoteName (tpc) { var noteName = ""; switch (tpc) { case -1: noteName = qsTranslate("InspectorAmbitus", "Fbb") + noteName; break; case 0: noteName = qsTranslate("InspectorAmbitus", "Cbb") + noteName; break; case 1: noteName = qsTranslate("InspectorAmbitus", "Gbb") + noteName; break; case 2: noteName = qsTranslate("InspectorAmbitus", "Dbb") + noteName; break; case 3: noteName = qsTranslate("InspectorAmbitus", "Abb") + noteName; break; case 4: noteName = qsTranslate("InspectorAmbitus", "Ebb") + noteName; break; case 5: noteName = qsTranslate("InspectorAmbitus", "Bbb") + noteName; break; case 6: noteName = qsTranslate("InspectorAmbitus", "Fb") + noteName; break; case 7: noteName = qsTranslate("InspectorAmbitus", "Cb") + noteName; break; case 8: noteName = qsTranslate("InspectorAmbitus", "Gb") + noteName; break; case 9: noteName = qsTranslate("InspectorAmbitus", "Db") + noteName; break; case 10: noteName = qsTranslate("InspectorAmbitus", "Ab") + noteName; break; case 11: noteName = qsTranslate("InspectorAmbitus", "Eb") + noteName; break; case 12: noteName = qsTranslate("InspectorAmbitus", "Bb") + noteName; break; case 13: noteName = qsTranslate("InspectorAmbitus", "F") + noteName; break; case 14: noteName = qsTranslate("InspectorAmbitus", "C") + noteName; break; case 15: noteName = qsTranslate("InspectorAmbitus", "G") + noteName; break; case 16: noteName = qsTranslate("InspectorAmbitus", "D") + noteName; break; case 17: noteName = qsTranslate("InspectorAmbitus", "A") + noteName; break; case 18: noteName = qsTranslate("InspectorAmbitus", "E") + noteName; break; case 19: noteName = qsTranslate("InspectorAmbitus", "B") + noteName; break; case 20: noteName = qsTranslate("InspectorAmbitus", "F♯") + noteName; break; case 21: noteName = qsTranslate("InspectorAmbitus", "C♯") + noteName; break; case 22: noteName = qsTranslate("InspectorAmbitus", "G♯") + noteName; break; case 23: noteName = qsTranslate("InspectorAmbitus", "D♯") + noteName; break; case 24: noteName = qsTranslate("InspectorAmbitus", "A♯") + noteName; break; case 25: noteName = qsTranslate("InspectorAmbitus", "E♯") + noteName; break; case 26: noteName = qsTranslate("InspectorAmbitus", "B♯") + noteName; break; case 27: noteName = qsTranslate("InspectorAmbitus", "F♯♯") + noteName; break; case 28: noteName = qsTranslate("InspectorAmbitus", "C♯♯") + noteName; break; case 29: noteName = qsTranslate("InspectorAmbitus", "G♯♯") + noteName; break; case 30: noteName = qsTranslate("InspectorAmbitus", "D♯♯") + noteName; break; case 31: noteName = qsTranslate("InspectorAmbitus", "A♯♯") + noteName; break; case 32: noteName = qsTranslate("InspectorAmbitus", "E♯♯") + noteName; break; case 33: noteName = qsTranslate("InspectorAmbitus", "B♯♯") + noteName; break; default: noteName = qsTr("?") + noteName; break; } return noteName; } function log(msg) { if (verbose) console.log(msg); } function getFingering(instrument, notes) { var sections = instrument.split("."); if (sections == "undefined" || sections.length < 1) return ""; if(sections[2]=="c"){ baseKey=baseKeyC; } else if(sections[1]=="tuba"){ baseKey=baseKeyTuba; } else{ baseKey = sections[1] =="euphonium" ? baseKeyEuphonium : -2 } var mode; switch(sections[1]){ case "trombone": mode="slide"; break; case "tuba": mode="tuba"; break; case "bugle": mode="bugle"; break; case "cornet": mode="bugle"; break; default: mode="fingering"; break; } var text; var arrayText=new Array(); for (var i = 0; i < notes.length; i++) { text = ""; var index = notes[i].pitch ; log("Pitch: " + index + " | NoteName: " + getNoteName(notes[i].tpc)); index+=baseKey if (index in noteTable && notes[i].tieBack == null) if (mode in noteTable[index]) text += qsTr(noteTable[index][mode]); arrayText.push(text); } return arrayText; } onRun: { if (typeof curScore === 'undefined') //current score is not defined Qt.quit(); var cursor = curScore.newCursor(); var startStaff; var endStaff; var endTick; var fullScore = false; //setting cursor cursor.rewind(1); //cursor in position 1 if (!cursor.segment) { fullScore = true; startStaff = 0; endStaff = curScore.nstaves - 1; // final staff } else { startStaff = cursor.staffIdx; //current staff cursor.rewind(2); if (cursor.tick == 0) { // this happens when the selection includes // the last measure of the score. // rewind(2) goes behind the last segment (where // there's none) and sets tick=0 endTick = curScore.lastSegment.tick + 1; } else { endTick = cursor.tick; } endStaff = cursor.staffIdx; } for (var staff = startStaff; staff <= endStaff; staff++) { cursor.rewind(1) cursor.voice = 0; cursor.staffIdx = staff; if (fullScore) // no selection cursor.rewind(0); // beginning of score var instrument = curScore.parts[staff].instrumentId; log("Instrumento "+instrument) if (instrument.substring(0, 6) != "brass.") { log("Skipped instrument: " + instrument) continue; } while (cursor.segment && (fullScore || cursor.tick < endTick)) { if (!cursor.element || cursor.element.type != Element.CHORD) { cursor.next(); continue; } var fingering = getFingering(instrument, cursor.element.notes); if (fingering) { for(var i=0;i