//=========================================================================================\\ // Counterpoint v0.3 \\ // \\ // Copyright (C)2018 Rogério Tavares Constante \\ // \\ // This program is free software: you can redistribute and/or modify \\ // it under the GNU General Public License as published by \\ // Free Software Foundation, see version 3 of the license, or any later. \\ // \\ // This program is distributed with the intention of being useful, \\ // but WITHOUT ANY WARRANTY; See GNU for more details. \\ // \\ // A copy of GNU General Public License can be found at \\ // . \\ // \\ //=========================================================================================\\ import QtQuick 2.3 import QtQuick.Controls 1.3 import QtQuick.Dialogs 1.2 import QtQuick.Window 2.1 import MuseScore 3.0 MuseScore { menuPath: "Plugins.Counterpoint" description: "Counterpoint.\nPlugin help in correcting counterpoint exercises by species." version: "0.31ms323" //pluginType: "dialog" // ----------------------------- configuration window ----------------------- ApplicationWindow { id: window visible: true title: "Counterpoint" width: 667; height: 580 color: "#000022" // ------------------------------ top bar -------------------------- Rectangle { id: menu width: 510; height: 30 color: "#091a23" border.color: "#383d47" border.width: 1 x: 1 Row { anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left; anchors.leftMargin: 3 spacing: 3 // CF Rectangle { id: button27 property string text: "C.F." signal clicked width: bLabel27.width + 20; height: bLabel27.height + 7 border { width: 1; color: "#555555" } smooth: true radius: 2 gradient: Gradient { GradientStop { position: 0.0 color: { if (mArea27.pressed) return "#888d96" else return "#a0a8af" } } GradientStop { position: 1.0; color: "#334455" } } onClicked: { melodies.visible = true; bLabel27.color = "#002e77"; saveCfg(); bLabel26.color = "#002e77"; bLabel28.color = "#000000"; category5.visible = false; bLabel25.color = "#000000"; category4.visible = false; bLabel24.color = "#000000"; category3.visible = false; bLabel23.color = "#000000"; category2.visible = false; bLabel2.color = "#000000"; category1.visible = false; bLabel1.color = "#000000"; general.visible = false; priEsp = false; secEsp = false; terEsp = false; quaEsp = false; quiEsp = false; melody = true; loadCfg(); // ambInp.text = "12"; repPadQt.text = "0"; arpMelQt.text = "1"; varDirQt.text = "4"; //melody // tritone1.checked = true; priviGC.checked = true; // third.checked = false; quinta.checked = false; thirdF.checked = false; quintaF.checked = false; } MouseArea { id: mArea27 anchors.fill: parent onClicked: button27.clicked(); } Text { id: bLabel27 anchors.centerIn: button27 color: "#000000" text: button27.text } } // first category Rectangle { id: button1 property string text: "1ª esp." signal clicked width: bLabel1.width + 20; height: bLabel1.height + 7 border { width: 1; color: "#555555" } smooth: true radius: 2 gradient: Gradient { GradientStop { position: 0.0 color: { if (mArea1.pressed) return "#888d96" else return "#a0a8af" } } GradientStop { position: 1.0; color: "#334455" } } onClicked: {melodies.visible = false; saveCfg(); bLabel27.color = "#000000"; bLabel26.color = "#002e77"; bLabel28.color = "#000000"; category5.visible = false; bLabel25.color = "#000000"; category4.visible = false; bLabel24.color = "#000000"; category3.visible = false; bLabel23.color = "#000000"; category2.visible = false; bLabel2.color = "#000000"; category1.visible = true; bLabel1.color = "#002e77"; general.visible = true; priEsp = true; secEsp = false; terEsp = false; quaEsp = false; quiEsp = false; melody = false; loadCfg(); // ambInp.text = "12"; repPadQt.text = "0"; arpMelQt.text = "1"; varDirQt.text = "4"; //melody // tritone1.checked = true; melPFi.checked = true; priviGC.checked = true; // third.checked = true; quinta.checked = true; thirdF.checked = true; quintaF.checked = true; // // 1ª type // lastNotes.checked = true; cons.checked = true; // parallel5.checked = true; parallel8.checked = true; parallel4.checked = false; // parallel36.checked = true; hidden5.checked = true; hidden8.checked = true; // hiddenSalto.checked = true; consecObli.checked = false; // consecCont.checked = false; inter5.checked = true; inter8.checked = true; // uniss.checked = true; cruzavoices.checked = true; falsaR.checked = true; // distance.checked = true; distQt.text = "0"; // tF.checked = false; dissNP.checked = false; // 2ª type // noteP.checked = false; cambi.checked = false; borda.checked = false; // 3ª type // susp4.checked = false; // 4ª type } MouseArea { id: mArea1 anchors.fill: parent onClicked: button1.clicked(); } Text { id: bLabel1 anchors.centerIn: button1 color: "#000000" text: button1.text } } // second type Rectangle { id: button2 property string text: "2ª esp." signal clicked width: bLabel2.width + 20; height: bLabel2.height + 7 border { width: 1; color: "#555555" } smooth: true radius: 2 gradient: Gradient { GradientStop { position: 0.0 color: { if (mArea2.pressed) return "#888d96" else return "#a0a8af" } } GradientStop { position: 1.0; color: "#334455" } } onClicked: {melodies.visible = false; bLabel27.color = "#000000"; saveCfg(); bLabel26.color = "#002e77"; bLabel28.color = "#000000"; category5.visible = false; bLabel25.color = "#000000"; category4.visible = false; bLabel24.color = "#000000"; category3.visible = false; bLabel23.color = "#000000"; category2.visible = true; bLabel2.color = "#002e77"; category1.visible = false; bLabel1.color = "#000000"; general.visible = true; priEsp = false; secEsp = true; terEsp = false; quaEsp = false; quiEsp = false; melody = false; loadCfg(); // ambInp.text = "19"; repPadQt.text = "0"; arpMelQt.text = "3"; varDirQt.text = "6"; // melody // tritone1.checked = false; melPFi.checked = false; priviGC.checked = false; // third.checked = true; quinta.checked = true; thirdF.checked = true; quintaF.checked = true; // // 1ª type // LastNotes.checked = true; cons.checked = false; // parallel5.checked = true; parallel8.checked = true; parallel4.checked = false; // parallel36.checked = true; hidden5.checked = true; hidden8.checked = true; // hiddenSalto.checked = true; consecObli.checked = false; // consecCont.checked = false; inter5.checked = true; inter8.checked = true; // uniss.checked = true; cruzavoices.checked = true; falsaR.checked = true; // distance.checked = true; distQt.text = "3"; // tF.checked = true; dissNP.checked = true; // 2ª type // noteP.checked = false; cambi.checked = false; borda.checked = false; // 3ª type // susp4.checked = false; // 4ª type } MouseArea { id: mArea2 anchors.fill: parent onClicked: button2.clicked(); } Text { id: bLabel2 anchors.centerIn: button2 color: "#000000" text: button2.text } } // terceira category Rectangle { id: button23 property string text: "3ª esp." signal clicked width: bLabel23.width + 20; height: bLabel23.height + 7 border { width: 1; color: "#555555" } smooth: true radius: 2 gradient: Gradient { GradientStop { position: 0.0 color: { if (mArea23.pressed) return "#888d96" else return "#a0a8af" } } GradientStop { position: 1.0; color: "#334455" } } onClicked: {melodies.visible = false; bLabel27.color = "#000000"; saveCfg(); bLabel26.color = "#002e77"; bLabel28.color = "#000000"; category5.visible = false; bLabel25.color = "#000000"; category4.visible = false; bLabel24.color = "#000000"; category3.visible = true; bLabel23.color = "#002e77"; category2.visible = false; bLabel2.color = "#000000"; category1.visible = false; bLabel1.color = "#000000"; general.visible = true; priEsp = false; secEsp = false; terEsp = true; quaEsp = false; quiEsp = false; melody = false; loadCfg(); // ambInp.text = "19"; repPadQt.text = "1"; arpMelQt.text = "3"; varDirQt.text = "8"; // melody // tritone1.checked = false; melPFi.checked = false; priviGC.checked = false; // third.checked = true; quinta.checked = true; thirdF.checked = true; quintaF.checked = true; // // 1ª type // LastNotes.checked = true; cons.checked = false; // parallel5.checked = true; parallel8.checked = true; parallel4.checked = false; // parallel36.checked = true; hidden5.checked = true; hidden8.checked = true; // hiddenSalto.checked = true; consecObli.checked = false; // consecCont.checked = false; inter5.checked = true; inter8.checked = true; // uniss.checked = false; cruzavoices.checked = true; falsaR.checked = true; // distance.checked = true; distQt.text = "4"; // tF.checked = false; dissNP.checked = false; // 2ª type // noteP.checked = true; cambi.checked = true; borda.checked = true; // 3ª type // susp4.checked = false; // 4ª type } MouseArea { id: mArea23 anchors.fill: parent onClicked: button23.clicked(); } Text { id: bLabel23 anchors.centerIn: button23 color: "#000000" text: button23.text } } // fourth type Rectangle { id: button24 property string text: "4ª esp." signal clicked width: bLabel24.width + 20; height: bLabel24.height + 7 border { width: 1; color: "#555555" } smooth: true radius: 2 gradient: Gradient { GradientStop { position: 0.0 color: { if (mArea24.pressed) return "#888d96" else return "#a0a8af" } } GradientStop { position: 1.0; color: "#334455" } } onClicked: {melodies.visible = false; bLabel27.color = "#000000"; saveCfg(); bLabel26.color = "#002e77"; bLabel28.color = "#000000"; category5.visible = false; bLabel25.color = "#000000"; category4.visible = true; bLabel24.color = "#002e77"; category3.visible = false; bLabel23.color = "#000000"; category2.visible = false; bLabel2.color = "#000000"; category1.visible = false; bLabel1.color = "#000000"; general.visible = true; priEsp = false; secEsp = false; terEsp = false; quaEsp = true; quiEsp = false; melody = false; loadCfg(); // ambInp.text = "19"; repPadQt.text = "0"; arpMelQt.text = "3"; varDirQt.text = "6"; // melody // tritone1.checked = false; melPFi.checked = false; priviGC.checked = false; // third.checked = true; quinta.checked = true; thirdF.checked = true; quintaF.checked = true; // // 1ª type // LastNotes.checked = true; cons.checked = false; // parallel5.checked = true; parallel8.checked = true; parallel4.checked = false; // parallel36.checked = true; hidden5.checked = true; hidden8.checked = true; // hiddenSalto.checked = true; consecObli.checked = false; // consecCont.checked = false; inter5.checked = true; inter8.checked = true; // uniss.checked = false; cruzavoices.checked = true; falsaR.checked = true; // distance.checked = true; distQt.text = "3"; // tF.checked = false; dissNP.checked = true; // 2ª type // noteP.checked = false; cambi.checked = false; borda.checked = false; // 3ª type // susp4.checked = true; // 4ª type } MouseArea { id: mArea24 anchors.fill: parent onClicked: button24.clicked(); } Text { id: bLabel24 anchors.centerIn: button24 color: "#000000" text: button24.text } } // quinta type Rectangle { id: button25 property string text: "5ª esp." signal clicked width: bLabel25.width + 20; height: bLabel25.height + 7 border { width: 1; color: "#555555" } smooth: true radius: 2 gradient: Gradient { GradientStop { position: 0.0 color: { if (mArea25.pressed) return "#888d96" else return "#a0a8af" } } GradientStop { position: 1.0; color: "#334455" } } onClicked: { melodies.visible = false; bLabel27.color = "#000000"; saveCfg(); bLabel26.color = "#002e77"; bLabel28.color = "#000000"; category5.visible = true; bLabel25.color = "#002e77"; category4.visible = false; bLabel24.color = "#000000"; category3.visible = false; bLabel23.color = "#000000"; category2.visible = false; bLabel2.color = "#000000"; category1.visible = false; bLabel1.color = "#000000"; general.visible = true; priEsp = false; secEsp = false; terEsp = false; quaEsp = false; quiEsp = true; melody = false; loadCfg(); } MouseArea { id: mArea25 anchors.fill: parent onClicked: button25.clicked(); } Text { id: bLabel25 anchors.centerIn: button25 color: "#000000" text: button25.text } } } } // botões das types Rectangle { id: menu2 width: 120; height: 30 color: "#002b72" border.color: "#383838" border.width: 1 x: 525 Row { anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left; anchors.leftMargin: 3 spacing: 3 // general Rectangle { id: button26 property string text: "pág.1" signal clicked width: bLabel26.width + 20; height: bLabel26.height + 7 border { width: 1; color: "#555555" } smooth: true radius: 2 gradient: Gradient { GradientStop { position: 0.0 color: { if (mArea26.pressed) return "#888d96" else return "#a0a8af" } } GradientStop { position: 1.0; color: "#334455" } } onClicked: { melodies.visible = false; bLabel26.color = "#002e77"; bLabel28.color = "#000000"; if (bLabel27.color == "#002e77") { melodies.visible = true } else { general.visible = true } } MouseArea { id: mArea26 anchors.fill: parent onClicked: button26.clicked(); } Text { id: bLabel26 anchors.centerIn: button26 color: "#000000" text: button26.text } } // melody Rectangle { id: button28 property string text: "pág.2" signal clicked width: bLabel28.width + 20; height: bLabel28.height + 7 border { width: 1; color: "#555555" } smooth: true radius: 2 gradient: Gradient { GradientStop { position: 0.0 color: { if (mArea28.pressed) return "#888d96" else return "#a0a8af" } } GradientStop { position: 1.0; color: "#334455" } } onClicked: { if (bLabel27.color == "#000000") { melodies.visible = true; bLabel28.color = "#002e77"; bLabel26.color = "#000000"; general.visible = false; } } MouseArea { id: mArea28 anchors.fill: parent onClicked: button28.clicked(); } Text { id: bLabel28 anchors.centerIn: button28 color: "#000000" text: button28.text } } } } // botões para seleção de páginas // ------------------------------ barra inferior -------------------------- Rectangle { id: barraInferior y: 550 width: 664; height: 30 color: "#091a23" border.color: "#383d47" border.width: 1 x: 1 Text { x: 6; y: 4; font.pointSize: 7; color: "#aaa31e"; text: "criado por" } Text { x: 5; y: 13; font.pointSize: 9; color: "#aaa31e"; text: "Rogério Tavares Constante" } Text { x: 633; y: 10; font.pointSize: 9; color: "#aaa31e"; text: "2019" } Rectangle { id: btcheck property string text: "checkr" signal clicked anchors.verticalCenter: parent.verticalCenter anchors.right: parent.horizontalCenter //; anchors.leftMargin: 3 width: bLabel3.width + 20; height: bLabel3.height + 7 border { width: 1; color: "#555555" } smooth: true radius: 2 gradient: Gradient { GradientStop { position: 0.0 color: { if (mArea3.pressed) return "#888d96" else return "#a0a8af" } } GradientStop { position: 1.0; color: "#334455" } } MouseArea { id: mArea3 anchors.fill: parent onClicked: { msgResult.close(); window.lower(); checkr(); } } Text { id: bLabel3 anchors.centerIn: btcheck color: "#000000" text: btcheck.text } } // botão checkr Rectangle { id: btclosurer property string text: "closurer" signal clicked anchors.verticalCenter: parent.verticalCenter anchors.left: parent.horizontalCenter; anchors.leftMargin: 3 width: bLabel4.width + 20; height: bLabel4.height + 7 border { width: 1; color: "#555555" } smooth: true radius: 2 gradient: Gradient { GradientStop { position: 0.0 color: { if (mArea4.pressed) return "#888d96" else return "#a0a8af" } } GradientStop { position: 1.0; color: "#334455" } } MouseArea { id: mArea4 anchors.fill: parent onClicked: { Qt.quit(); window.close(); msgResult.close(); } } Text { id: bLabel4 anchors.centerIn: btclosurer color: "#000000" text: btclosurer.text } } // botão closurer } // ------------------------------ Apresentação --------------------------- Item { id: apresenta; visible: true Text { x: 175; y: 250; font.pointSize: 19; color: "#aaa31e"; text: "Contraponto 0.3" } Text { x: 196; y: 278; font.pointSize: 9; color: "#aaa31e"; text: "Extensão para MuseScore" } } // ------------------------------ configurações general -------------------------- Item { id: configura; visible: true; Rectangle { x: 513; y: 35; width: 150; height: 512; color: "#3d0909"; radius: 2 Text { x: 3; y: 5; color: "#d1d10a"; text: "Configurações general" } Rectangle { id: tonalidade; x: 5; y: 35; width: 140; height: 125; color: "#260000"; radius: 2 Text { x: 5; y: 5; color: "#f9ff8c"; font.pixelSize: 15; text: "Tônica/Endis:" } Button { id: btTonica text: "Dó" width: 60 menu: menuTonica x: 5; y: 30 Text { x: 65; color: "#fcffbc"; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 13; text: "Tônica" } } Button { id: btAcid text: "" width: 50 menu: menuAcid x: 5; y: 60 Text { x: 55; color: "#fcffbc"; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 13; text: "Acidente" } } Button { id: btModo text: "Maior" width: 90 menu: menuModo x: 5; y: 90 Text { x: 95; color: "#fcffbc"; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 13; text: "Modo" } } Menu { id: menuTonica property int value: 1 MenuItem { text: "Dó"; onTriggered: { menuTonica.value = 1; btTonica.text = "Dó" } } MenuItem { text: "Ré"; onTriggered: { menuTonica.value = 2; btTonica.text = "Ré" } } MenuItem { text: "Mi"; onTriggered: { menuTonica.value = 3; btTonica.text = "Mi" } } MenuItem { text: "Fá"; onTriggered: { menuTonica.value = 4; btTonica.text = "Fá" } } MenuItem { text: "Sol"; onTriggered: { menuTonica.value = 5; btTonica.text = "Sol" } } MenuItem { text: "Lá"; onTriggered: { menuTonica.value = 6; btTonica.text = "Lá" } } MenuItem { text: "Si"; onTriggered: { menuTonica.value = 7; btTonica.text = "Si" } } } Menu { id: menuAcid property string value: "" MenuItem { text: "Natural"; onTriggered: { menuAcid.value = 1; btAcid.text = "" } } MenuItem { text: "#"; onTriggered: { menuAcid.value = 2; btAcid.text = "#" } } MenuItem { text: "b"; onTriggered: { menuAcid.value = 3; btAcid.text = "b" } } } Menu { id: menuModo property int value: 1 MenuItem { text: "Maior"; onTriggered: { menuModo.value = 1; btModo.text = "Maior" } } MenuItem { text: "Menor"; onTriggered: { menuModo.value = 2; btModo.text = "Menor" } } MenuItem { text: "Jônico"; onTriggered: { menuModo.value = 3; btModo.text = "Jônico" } } MenuItem { text: "Dórico"; onTriggered: { menuModo.value = 4; btModo.text = "Dórico" } } MenuItem { text: "Frígio"; onTriggered: { menuModo.value = 5; btModo.text = "Frígio" } } MenuItem { text: "Lídio"; onTriggered: { menuModo.value = 6; btModo.text = "Lídio" } } MenuItem { text: "Mixolídio"; onTriggered: { menuModo.value = 7; btModo.text = "Mixolídio" } } MenuItem { text: "Eólio"; onTriggered: { menuModo.value = 8; btModo.text = "Eólio" } } MenuItem { text: "Lócrio"; onTriggered: { menuModo.value = 9; btModo.text = "Lócrio" } } } } Rectangle { x: 5; y: 170; width: 140; height: 29; color: "#260000"; radius: 2 // voice do CF Text { x: 6; y: 5; color: "#f9ff8c"; font.pixelSize: 15; text: "voice do C.F. :" Rectangle { anchors.left: parent.right; anchors.leftMargin: 8; anchors.verticalCenter: parent.verticalCenter; width: 25; height: 22; color: "#9c9c9c"; radius: 2 Rectangle { x: 1; y: 1; width: 23; height: 20; color: "#0c0000"; radius: 2 TextInput { id: voiceCantusFirmus; anchors.horizontalCenter: parent.horizontalCenter; anchors.verticalCenter: parent.verticalCenter; text: "1"; font.pixelSize: 15; color: "yellow"; validator: IntValidator{bottom: 1; top: 8; } } } } } } Rectangle { id: preConfigurações; x: 5; y: 209; width: 140; height: 170; color: "#260000"; radius: 2 Text { x: 5; y: 5; color: "#f9ff8c"; font.pixelSize: 15; text: "Pré-configurações:" } Rectangle { x: 4; y: 30; width: 132; height: 22; color: "#9c9c9c"; radius: 2 Rectangle { x: 1; y: 1; width: 130; height: 20; color: "#0c0000"; radius: 2 Text { id: nomePre; x: 5; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#d1d10a"; text: "sem nome" } } } Rectangle { id: saveCnfiguração property string text: "save" signal clicked x: 5; y: 70; width: 130; height: 40 border { width: 1; color: "#555555" } smooth: true radius: 2 gradient: Gradient { GradientStop { position: 0.0 color: { if (mArea41.pressed) return "#888d96" else return "#a0a8af" } } GradientStop { position: 1.0; color: "#5b2b2b" } } MouseArea { id: mArea41 anchors.fill: parent onClicked: { saveFileDialog.open(); } } Text { id: bLabel41 anchors.centerIn: saveCnfiguração color: "#101010" font.pointSize: 13 text: saveCnfiguração.text } } Rectangle { id: loadCnfiguração property string text: "load" signal clicked x: 5; y: 120; width: 130; height: 40 border { width: 1; color: "#555555" } smooth: true radius: 2 gradient: Gradient { GradientStop { position: 0.0 color: { if (mArea42.pressed) return "#888d96" else return "#a0a8af" } } GradientStop { position: 1.0; color: "#5b2b2b" } } MouseArea { id: mArea42 anchors.fill: parent onClicked: { openFileDialog.open(); } } Text { id: bLabel42 anchors.centerIn: loadCnfiguração color: "#101010" font.pointSize: 13 text: loadCnfiguração.text } } } } } // ------------------------------ checkções ----------------------------------- Item { id: general; visible: false; Rectangle { x: 2; y: 149; width: 508; height: 398; color: "#3a3a3a"; radius: 2 // primeiro intervalo Rectangle { id: item; x: 3; y: 3; width: 502; height: 57; color: "#282828"; radius: 2 CheckBox { id: primInt; checked: true; x: 3; y: 2; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "Start diferente de unís./8ªJ" } CheckBox { id: ex5Ji; checked: true; x: 20; y: 18; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 12; text: "except 5ªJ, se CF voice inf." } } CheckBox { id: ex3i; checked: true; x: 20; y: 35; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 12; text: "except 3ª, se CF voice inf." } } } // ultimo intervalo CheckBox { id: ultInt; checked: true; x: 260; y: 2; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "End diferente de unís./8ªJ" } CheckBox { id: ex5Jf; checked: true; x: 20; y: 18; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 12; text: "except 5ªJ, se CF voice inf." } } CheckBox { id: ex3f; checked: true; x: 20; y: 35; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 12; text: "except 3ª, se CF voice inf." } } } } // últimas notes de cada voice alcançadas por grau conjunto descendente e ascendente Rectangle { id: item1a; x: 3; y: 63; width: 502; height: 47; color: "#282828"; radius: 2 CheckBox { id: LastNotes; checked: true; x: 5; y: 3; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter ; color: "#e0dfc3"; font.pixelSize: 14; text: "Não alcançar último intervalo por grau conj. e mov. contrário" } CheckBox { id: fourthJi; checked: true; x: -3; y: 22; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 12; text: "except 4ªJ asc / 5ªJ desc, voice inf." } } CheckBox { id: fourthJs; checked: true; x: 240; y: 22; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 12; text: "except 4ªJ asc / 5ªJ desc, voice sup." } } } } // parallels Rectangle { id: item1; x: 3; y: 113; width: 502; height: 83; color: "#1c1c1c"; radius: 2 CheckBox { id: parallel8; checked: true; x: 5; y: 3; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "8ª parallel" } Text { id: par8RepTxt; x: 5; y: 20; color: "#e0dfc3"; font.pixelSize: 12; text: "- se ocorrer" } TextInput { id: par8Rep; anchors.left: par8RepTxt.right; anchors.leftMargin: 5; y: par8RepTxt.y; font.underline: true; text: "1"; font.pixelSize: 12; color: "yellow"; validator: IntValidator{bottom: 0; top: 99;} Text { anchors.left: parent.right; anchors.leftMargin: 5; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 12; text: "parallel(s)" } } } CheckBox { id: parallel5; checked: true; x: 5; y: 44; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "5ª parallel" } Text { id: par5RepTxt; x: 5; y: 20; color: "#e0dfc3"; font.pixelSize: 12; text: "- se ocorrer" } TextInput { id: par5Rep; anchors.left: par5RepTxt.right; anchors.leftMargin: 5; y: par5RepTxt.y; font.underline: true; text: "1"; font.pixelSize: 12; color: "yellow"; validator: IntValidator{bottom: 0; top: 99;} Text { anchors.left: parent.right; anchors.leftMargin: 5; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 12; text: "parallel(s)" } } } CheckBox { id: parallel4; checked: false; x: 245; y: 3; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "4ªJ parallel" } Text { id: par4RepTxt; x: 5; y: 20; color: "#e0dfc3"; font.pixelSize: 12; text: "- se ocorrer" } TextInput { id: par4Rep; anchors.left: par4RepTxt.right; anchors.leftMargin: 5; y: par4RepTxt.y; font.underline: true; text: "1"; font.pixelSize: 12; color: "yellow"; validator: IntValidator{bottom: 0; top: 99;} Text { anchors.left: parent.right; anchors.leftMargin: 5; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 12; text: "parallel(s)" } } } CheckBox { id: parallel36; checked: true; x: 245; y: 44; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "3ª e 6ª parallel" } Text { id: par36RepTxt; x: 5; y: 20; color: "#e0dfc3"; font.pixelSize: 12; text: "- se ocorrer" } TextInput { id: par36Rep; anchors.left: par36RepTxt.right; anchors.leftMargin: 5; y: par36RepTxt.y; font.underline: true; text: "4"; font.pixelSize: 12; color: "yellow"; validator: IntValidator{bottom: 0; top: 99;} Text { anchors.left: parent.right; anchors.leftMargin: 5; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 12; text: "parallel(s)" } } } } // hiddens Rectangle { id: item2; x: 3; y: 199; width: 502; height: 50; color: "#1c1c1c"; radius: 2 CheckBox { id: hidden8; checked: true; x: 5; y: 3; onClicked: {if (!hidden8.checked && !hidden5.checked) { hiddensc.checked = false; hiddenExt.checked = false; hiddenSalto.checked = false;}} Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "8ª hidden/direct" } } CheckBox { id: hidden5; checked: true; x: 5; y: 26; onClicked: {if (!hidden8.checked && !hidden5.checked) { hiddensc.checked = false; hiddenExt.checked = false; hiddenSalto.checked = false;}} Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "5ª hidden/direct" } } CheckBox { id: hiddenEx; checked: true; x: 190; y: 6; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 12; text: "except no End" } } CheckBox { id: hiddenSalto; checked: true; x: 190; y: 24; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 12; text: "Only jump in the upper voice" } } } // consecutive by opposite and oblique motion Rectangle { id: item3; x: 3; y: 252; width: 267; height: 50; color: "#1c1c1c"; radius: 2 CheckBox { id: consecObli; checked: false; x: 5; y: 3; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "5ª e 8ª consecutive oblíquo" } } CheckBox { id: consecCont; checked: false; x: 5; y: 26; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "5ª e 8ª consecutive contrário" } } } // 5ªs e 8ªs intermittents Rectangle { id: item3a; x: 275; y: 252; width: 230; height: 50; color: "#1c1c1c"; radius: 2 CheckBox { id: inter8; checked: true; x: 5; y: 5; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "8ª intermittent" } } CheckBox { id: inter5; checked: true; x: 5; y: 25; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "5ª intermittent" } } } // uníssono Rectangle { id: item3b; x: 3; y: 305; width: 263; height: 45; color: "#282828"; radius: 2 CheckBox { id: uniss; checked: true; x: 3; y: 5; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "Uníssono" } CheckBox { id: unissIF; checked: true; x: 105; y: 0 Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 12; text: "except Start/End" }} Text { id: unissTxt; x: 5; y: 22; color: "#e0dfc3"; font.pixelSize: 12; text: "- se a quantidade for maior do que" } TextInput { id: unissQt; anchors.left: unissTxt.right; anchors.leftMargin: 5; y: unissTxt.y; font.underline: true; text: "0"; font.pixelSize: 12; color: "yellow"; validator: IntValidator{bottom: 0; top: 20;}} } } // cruzamento de voices Rectangle { id: item4; x: 270; y: 305; width: 235; height: 45; color: "#282828"; radius: 2 CheckBox { id: cruzavoices; checked: true; x: 5; y: 3 Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "Cruzamento de voices" } } CheckBox { id: falsaR; checked: true; x: 5; y: 23 Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "Falsa relação" } } } // distance Rectangle { id: item4a; x: 3; y: 353; width: 502; height: 42; color: "#282828"; radius: 2 CheckBox { id: distance; checked: true; x: 5; y: 3; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 14; text: "distance between as voices" } Text { id: distTxt; x: 5; y: 20; color: "#e0dfc3"; font.pixelSize: 12; text: "- se uma sequencia maior do que" } TextInput { id: distQt; anchors.left: distTxt.right; anchors.leftMargin: 5; y: distTxt.y; font.underline: true; text: "1"; font.pixelSize: 12; color: "yellow"; validator: IntValidator{bottom: 0; top: 20;} Text { anchors.left: parent.right; anchors.leftMargin: 5; anchors.verticalCenter: parent.verticalCenter; color: "#e0dfc3"; font.pixelSize: 12; text: "intervalo(s) maior(es) do que a décima" } } } } } } Item { id: category1; visible: false; Rectangle { x: 2; y: 35; width: 508; height: 111; color: "#003f87"; radius: 2 // consonances Rectangle { id: item1b; x: 3; y: 3; width: 502; height: 105; color: "#b2b2b2"; radius: 2 CheckBox { id: cons; checked: true; x: 5; y: 5; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter ; font.pixelSize: 12; text: "Dissonâncias" } } CheckBox { id: maiorCons; checked: true; x: 5; y: 30; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; text: "If most of the intervals is not imperfect consonance" } } } } } Item { id: category2; visible: false; Rectangle { x: 2; y: 35; width: 508; height: 111; color: "#003f87"; radius: 2 // strong times Rectangle { id: item6; x: 3; y: 3; width: 502; height: 105; color: "#b2b2b2"; radius: 2 CheckBox { id: tF; checked: true; x: 5; y: 5; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; text: "strong times, when not consonant" } } // weak times CheckBox { id: dissNP; checked: true; x: 5; y: 30; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; text: "Dissonances, unless otherwise noted" } } } } } Item { id: category3; visible: false; Rectangle { x: 2; y: 35; width: 508; height: 111; color: "#003f87"; radius: 2 Rectangle { id: item8; x: 3; y: 3; width: 502; height: 105; color: "#b2b2b2"; radius: 2 Text { x: 5; y: 5; font.pixelSize: 13; text: "Dissonâncias:" } CheckBox { id: noteP; checked: true; x: 5; y: 25; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; text: "except if note of Passage" } } CheckBox { id: cambi; checked: true; x: 5; y: 50; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; text: "except se for Cambiata" } } CheckBox { id: borda; checked: true; x: 5; y: 75; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; text: "except se for Bordadura" } } } } } Item { id: category4; visible: false; Rectangle { x: 2; y: 35; width: 508; height: 111; color: "#003f87"; radius: 2 Rectangle { id: item9; x: 3; y: 3; width: 502; height: 105; color: "#b2b2b2"; radius: 2 CheckBox { id: susp4; checked: true; x: 5; y: 5; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; text: "Dissonances, except if Suspension" } } } } } Item { id: category5; visible: false; Rectangle { x: 2; y: 35; width: 508; height: 111; color: "#003f87"; radius: 2 Rectangle { id: item10; x: 3; y: 3; width: 502; height: 105; color: "#b2b2b2"; radius: 2 Text { x: 3; y: 3; font.pixelSize: 13; text: "Dissonâncias:" } CheckBox { id: nP5; checked: true; x: 93; y: 3; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; text: "except if note of Passage" } } CheckBox { id: bord5; checked: true; x: 93; y: 23; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; text: "except se for Bordadura" } } CheckBox { id: cambi5; checked: true; x: 93; y: 43; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; text: "except se for Cambiata" } } CheckBox { id: susp5; checked: true; x: 93; y: 63; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; text: "except se for Suspensão/Retardo" } } CheckBox { id: sRI5; checked: true; x: 93; y: 83; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; text: "except se for Suspensão/Retardo com resolução interrompida" } } } } } Item { id: melodies; visible: false; Rectangle { x: 2; y: 35; width: 508; height: 512; color: "#5b5b5b"; radius: 2 Rectangle { x: 3; y: 5; width: 502; height: 80; color: "#303030"; radius: 2 CheckBox { id: penote; checked: true; x: 5; y: 5; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Second-to-last note:" Text { anchors.left: parent.right; anchors.leftMargin: 5; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 11; color: "#e0dfc3"; text: "se não pertencer ao V ou vii grau (quando tonal), \nou não conduzir por grau conjunto para a Endis (quando modal)" } } } CheckBox { id: ambito; checked: true; x: 5; y: 32; Text { id: ambTxt1; anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Melodic range: se maior do que" } TextInput { id: ambInp; anchors.left: ambTxt1.right; anchors.leftMargin: 5; y: ambTxt1.y; font.underline: true; font.pixelSize: 12; color: "yellow"; text: "12"; validator: IntValidator{bottom: 0; top: 99;}} Text { anchors.left: ambInp.right; anchors.leftMargin: 5; y: ambInp.y; font.pixelSize: 12; color: "#e0dfc3"; text: "semitons" } } CheckBox { id: priviGC; checked: true; x: 5; y: 55; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Se não privilegiar graus conjuntos" CheckBox { id: priviGCEx; checked: true; anchors.left: parent.right; anchors.leftMargin: 5; anchors.verticalCenter: parent.verticalCenter; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "e thirds" } } } } } Rectangle { x: 3; y: 88; width: 502; height: 118; color: "#303030"; radius: 2 Text { x: 5; y: 3; font.pixelSize: 13; color: "#e0dfc3"; text: "Melodic intervals:" CheckBox { id: salt7; checked: true; x: 0; y: 16; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Sétimas maiores e menores" } } CheckBox { id: salt6M; checked: true; x: 0; y: 35; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Sextas maiores" CheckBox { id: salt6MEx; checked: true; anchors.left: parent.right; anchors.leftMargin: 10; anchors.verticalCenter: parent.verticalCenter Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "except se ascendente" } } } } CheckBox { id: salt6m; checked: true; x: 0; y: 54; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Sextas menores" CheckBox { id: salt6mEx; checked: false; anchors.left: parent.right; anchors.leftMargin: 10; anchors.verticalCenter: parent.verticalCenter Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "except se ascendente" } } } } CheckBox { id: saltAum; checked: true; x: 0; y: 73; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Aumentados e diminutos" } } CheckBox { id: saltM8; checked: true; x: 0; y: 92; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Maiores do que a oitava" } } } } Rectangle { x: 3; y: 210; width: 502; height: 100; color: "#303030"; radius: 2 CheckBox { id: tritone2; checked: true; x: 5; y: 4; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Tritone at both ends of melodic movement" } } CheckBox { id: tritone1; checked: false; x: 5; y: 24; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Tritone at one end of melodic movements" } } CheckBox { id: dissoC; checked: true; x: 5; y: 44; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Composite dissonance" } } CheckBox { id: saltM5; checked: true; x: 5; y: 70; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Salto maior do que 5ªJ deve ser compensado \ncom direcionamento contrário" } CheckBox { id: saltM5Ex1; checked: true; x: 300; y: -7; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 11; color: "#e0dfc3"; text: "por grau conjunto" } } CheckBox { id: saltM5Ex2; checked: true; x: 300; y: 9; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 11; color: "#e0dfc3"; text: "por salto < 5ª" } } } } Rectangle { x: 3; y: 314; width: 502; height: 88; color: "#303030"; radius: 2 CheckBox { id: varDir; checked: true; x: 5; y: 4; Text { id: varDirTxt; anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Variedade de direcionamentos: se >" } TextInput { id: varDirQt; anchors.left: varDirTxt.right; anchors.leftMargin: 5; y: varDirTxt.y; font.underline: true; font.pixelSize: 12; color: "yellow"; text: "4"; validator: IntValidator{bottom: 0; top: 99;} } Text { anchors.left: varDirQt.right; anchors.leftMargin: 5; y: varDirQt.y; font.pixelSize: 12; color: "#e0dfc3"; text: "movimento(s) na mesma direction" } } CheckBox { id: repnote; checked: true; x: 5; y: 24; Text { id: repnoteTxt; anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3";text: "Repetição de notes: se >" } TextInput { id: repnoteQt; anchors.left: repnoteTxt.right; anchors.leftMargin: 5; y: repnoteTxt.y; font.underline: true; font.pixelSize: 12; color: "yellow"; text: "1"; validator: IntValidator{bottom: 0; top: 99;} } Text { anchors.left: repnoteQt.right; anchors.leftMargin: 5; y: repnoteQt.y; font.pixelSize: 12; color: "#e0dfc3"; text: "repetição(ões)" CheckBox { id: repeatNoutra; checked: true; anchors.left: parent.right; anchors.leftMargin: 5; anchors.verticalCenter: parent.verticalCenter; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3";text: "sem mudar note noutra voice" } } } } CheckBox { id: repPad; checked: true; x: 5; y: 44; Text { id: repPadTxt; anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Repetição de padrões: se >" } TextInput { id: repPadQt; anchors.left: repPadTxt.right; anchors.leftMargin: 5; y: repPadTxt.y; font.underline: true; font.pixelSize: 12; color: "yellow"; text: "0"; validator: IntValidator{bottom: 0; top: 99;} } Text { anchors.left: repPadQt.right; anchors.leftMargin: 5; y: repPadQt.y; font.pixelSize: 12; color: "#e0dfc3"; text: "repetição(ões)" } } CheckBox { id: arpMel; checked: true; x: 5; y: 64; Text { id: arpMelTxt; anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Arpejo de acordes na linha melódica: se mais do que" } TextInput { id: arpMelQt; anchors.left: arpMelTxt.right; anchors.leftMargin: 5; y: arpMelTxt.y; font.underline: true; font.pixelSize: 12; color: "yellow"; text: "1"; validator: IntValidator{bottom: 0; top: 99;} } Text { anchors.left: arpMelQt.right; anchors.leftMargin: 5; y: arpMelQt.y; font.pixelSize: 12; color: "#e0dfc3"; text: "arpejo(s)" } } } Rectangle { x: 3; y: 406; width: 150; height: 50; color: "#303030"; radius: 2 CheckBox { id: melPFs; checked: true; x: 5; y: 5; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Ponto focal acute" } } CheckBox { id: melPFi; checked: true; x: 5; y: 25; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Ponto focal grave" } } } Rectangle { x: 158; y: 406; width: 347; height: 50; color: "#303030"; radius: 2 CheckBox { id: neutA; checked: true; x: 5; y: 5; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Se não conduzir 6° e 7° alterados" CheckBox { id: neutAim; checked: false; anchors.left: parent.right; anchors.leftMargin: 5; anchors.verticalCenter: parent.verticalCenter; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 11; color: "#e0dfc3"; text: "imediatamente" }}} } CheckBox { id: neutN; checked: true; x: 5; y: 25; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "Se não neutralizar 6° e 7° naturais" CheckBox { id: neutNim; checked: false; anchors.left: parent.right; anchors.leftMargin: 5; anchors.verticalCenter: parent.verticalCenter; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 11; color: "#e0dfc3"; text: "imediatamente" }}} } } Rectangle { x: 3; y: 459; width: 502; height: 50; color: "#303030"; radius: 2 CheckBox { id: tonic; checked: true; x: 5; y:5; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "note inicial diferente de tônica/Endis," } CheckBox { id: third; checked: false; x: 255; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "third," } } CheckBox { id: quinta; checked: false; x: 340; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "ou quinta" } } } CheckBox { id: tonicF; checked: true; x: 5; y:25; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "note End diferente de tônica/Endis," } CheckBox { id: thirdF; checked: false; x: 250; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "third," } } CheckBox { id: quintaF; checked: false; x: 335; Text { anchors.left: parent.right; anchors.leftMargin: 0; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: 12; color: "#e0dfc3"; text: "ou quinta" } } } } } } } // window //-------------------------------------------------------------------------------- // janela com as mensagens de resultado ApplicationWindow { id: msgResult visible: false; title: "Resultado" width: 450; height: 40 color: "#343530" Rectangle { id: btResult property alias text: lresult.text signal clicked visible: true width: 100; height: 25 x: 110 border { width: 1; color: "#555555" } smooth: true radius: 3 gradient: Gradient { GradientStop { position: 0.0 color: { if (mArea6.pressed) return "#888d96" else return "#a0a8af" } } GradientStop { position: 1.0; color: "#035b25" } } Text { id: lresult anchors.centerIn: parent text: "closurer" color: "#aaf0e1" } MouseArea { id: mArea6 anchors.fill: parent onClicked: { window.raise(); msgResult.close(); apagaCor(); return } } // mouseArea } // Rectangle btResult Rectangle { id: btAtualiza property alias text: latual.text signal clicked visible: true width: 100; height: 25 x: 240 border { width: 1; color: "#555555" } smooth: true radius: 3 gradient: Gradient { GradientStop { position: 0.0 color: { if (mArea61.pressed) return "#888d96" else return "#a0a8af" } } GradientStop { position: 1.0; color: "#035b25" } } Text { id: latual anchors.centerIn: parent text: "Atualizar" color: "#aaf0e1" } MouseArea { id: mArea61 anchors.fill: parent onClicked: { msgResult.close(); apagaCor(); checkr(); } } // mouseArea } // Rectangle btAtualiza Component { id: component Rectangle { id: msg property alias text: lResul.text property int value: 0 signal clicked visible: true width: 450; height: 21 border { width: 1; color: "#000000" } smooth: true radius: 3 color: "#6c6d6d" Text { id: lResul anchors.left: parent.left; anchors.leftMargin: 3 anchors.verticalCenter: parent.verticalCenter text: "-" color: "#aaf0e1" } MouseArea { id: msgClick anchors.fill: parent onClicked: { colorir(parent.value); } } } // retângulo msg } // componente } // msgResult // ---------------------------------------------------------------------------------------------------------------- MessageDialog { id: msgError title: "Error!" text: "-" property bool estado: false onAccepted: { window.raise(); msgError.visible=false; } visible: false; } // msgError // ----------------------------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------------- // ---- variáveis globais ---- property bool processaTudo: false; property var voices: []; property var resultado: []; property var mensagem: []; property var verified: 0; property var acordeGrau: []; property var voiceCF: null; property bool priEsp: false; property bool secEsp: false; property bool terEsp: false; property bool quaEsp: false; property bool quiEsp: false; property bool melody: false; property bool Endiza: false; property var config: []; // ----------- funções --------- function saveCfg() { var i; var j = 0; if (melody) { i = 0; } else if (priEsp) { i = 1; } else if (secEsp) { i = 2; } else if (terEsp) { i = 3; } else if (quaEsp) { i = 4; } else if (quiEsp) { i = 5; }; config[i] = []; // -------------- melody ------------- if(penote.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(ambito.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; config[i][j] = ambInp.text; j++; if(priviGC.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(priviGCEx.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(salt7.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(salt6M.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(salt6MEx.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(salt6m.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(salt6mEx.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(saltAum.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(saltM8.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(tritone2.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(tritone1.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(dissoC.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(saltM5.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(saltM5Ex1.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(saltM5Ex2.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(varDir.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; config[i][j] = varDirQt.text; j++; if(repnote.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; config[i][j] = repnoteQt.text; j++; if(repeatNoutra.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(repPad.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; config[i][j] = repPadQt.text; j++; if(arpMel.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; config[i][j] = arpMelQt.text; j++; if(melPFs.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(melPFi.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(neutA.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(neutAim.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(neutN.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(neutNim.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(tonic.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(third.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(quinta.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(tonicF.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(thirdF.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(quintaF.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; // ---------------- general ----------- if(primInt.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(ex5Ji.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(ex3i.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(ultInt.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(ex5Jf.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(ex3f.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(LastNotes.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(fourthJi.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(fourthJs.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(parallel8.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; config[i][j] = par8Rep.text; j++; if(parallel5.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; config[i][j] = par5Rep.text; j++; if(parallel4.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; config[i][j] = par4Rep.text; j++; if(parallel36.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; config[i][j] = par36Rep.text; j++; if(hidden8.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(hidden5.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(hiddenEx.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(hiddenSalto.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(consecObli.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(consecCont.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(inter8.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(inter5.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(uniss.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(unissIF.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; config[i][j] = unissQt.text; j++; if(cruzavoices.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(falsaR.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; if(distance.checked){ config[i][j] = true; } else { config[i][j] = false; }; j++; config[i][j] = distQt.text; } function loadCfg() { var i; var j = 0; if (melody) { i = 0; } else if (priEsp) { i = 1; } else if (secEsp) { i = 2; } else if (terEsp) { i = 3; } else if (quaEsp) { i = 4; } else if (quiEsp) { i = 5; }; // config[i] = []; penote.checked = config[i][j]; j++; ambito.checked = config[i][j]; j++; ambInp.text = config[i][j]; j++; priviGC.checked = config[i][j]; j++; priviGCEx.checked = config[i][j]; j++; salt7.checked = config[i][j]; j++; salt6M.checked = config[i][j]; j++; salt6MEx.checked = config[i][j]; j++; salt6m.checked = config[i][j]; j++; salt6mEx.checked = config[i][j]; j++; saltAum.checked = config[i][j]; j++; saltM8.checked = config[i][j]; j++; tritone2.checked = config[i][j]; j++; tritone1.checked = config[i][j]; j++; dissoC.checked = config[i][j]; j++; saltM5.checked = config[i][j]; j++; saltM5Ex1.checked = config[i][j]; j++; saltM5Ex2.checked = config[i][j]; j++; varDir.checked = config[i][j]; j++; varDirQt.text = config[i][j]; j++; repnote.checked = config[i][j]; j++; repnoteQt.text = config[i][j]; j++; repeatNoutra.checked = config[i][j]; j++; repPad.checked = config[i][j]; j++; repPadQt.text = config[i][j]; j++; arpMel.checked = config[i][j]; j++; arpMelQt.text = config[i][j]; j++; melPFs.checked = config[i][j]; j++; melPFi.checked = config[i][j]; j++; neutA.checked = config[i][j]; j++; neutAim.checked = config[i][j]; j++; neutN.checked = config[i][j]; j++; neutNim.checked = config[i][j]; j++; tonic.checked = config[i][j]; j++; third.checked = config[i][j]; j++; quinta.checked = config[i][j]; j++; tonicF.checked = config[i][j]; j++; thirdF.checked = config[i][j]; j++; quintaF.checked = config[i][j]; j++; // ---------------- general ----------- primInt.checked = config[i][j]; j++; ex5Ji.checked = config[i][j]; j++; ex3i.checked = config[i][j]; j++; ultInt.checked = config[i][j]; j++; ex5Jf.checked = config[i][j]; j++; ex3f.checked = config[i][j]; j++; LastNotes.checked = config[i][j]; j++; fourthJi.checked = config[i][j]; j++; fourthJs.checked = config[i][j]; j++; parallel8.checked = config[i][j]; j++; par8Rep.text = config[i][j]; j++; parallel5.checked = config[i][j]; j++; par5Rep.text = config[i][j]; j++; parallel4.checked = config[i][j]; j++; par4Rep.text = config[i][j]; j++; parallel36.checked = config[i][j]; j++; par36Rep.text = config[i][j]; j++; hidden8.checked = config[i][j]; j++; hidden5.checked = config[i][j]; j++; hiddenEx.checked = config[i][j]; j++; hiddenSalto.checked = config[i][j]; j++; consecObli.checked = config[i][j]; j++; consecCont.checked = config[i][j]; j++; inter8.checked = config[i][j]; j++; inter5.checked = config[i][j]; j++; uniss.checked = config[i][j]; j++; unissIF.checked = config[i][j]; j++; unissQt.text = config[i][j]; j++; cruzavoices.checked = config[i][j]; j++; falsaR.checked = config[i][j]; j++; distance.checked = config[i][j]; j++; distQt.text = config[i][j]; } function openFile(fileUrl) { var request = new XMLHttpRequest(); request.open("GET", fileUrl, false); request.send(null); var preSet = request.responseText.split("\n"); nomePre.text = fileUrl; var nomeSplit = nomePre.text.split('/'); nomePre.text = nomeSplit[nomeSplit.length-1]; //console.log(preSet.length) for (var i=0;i 0) { return "c" }; switch(metrica) { case 1: case 2: case 3: if (tempo == 1) { return "F"; } else { return "f"; }; break; case 4: if (tempo == 1 || tempo == 3) { return "F"; } else { return "f"; }; break; case 6: if (tempo == 1 || tempo == 4) { return "F"; } else { return "f"; }; break; case 8: if (tempo == 1 || tempo == 3 || tempo == 5 || tempo == 7) { return "F"; } else { return "f"; }; break; case 9: if (tempo == 1 || tempo == 4 || tempo == 7) { return "F"; } else { return "f"; }; break; case 12: if (tempo == 1 || tempo == 4 || tempo == 7 || tempo == 10) { return "F"; } else { return "f"; }; break; }; } function checksConsonance(x) { var int1 = x % 12; if (int1 == 0 || int1 == 7) { return "CP"; } else if (int1 == 3 || int1 == 4 || int1 == 8 || int1 == 9) { return "CI"; } else { return "D" }; } function direction(x) { if (x > 0) return(1); // ascendente else if (x == 0) return(0); // sem direction else return(-1); // descendente } function tonicaTPC(nome,acidente) { var tonica = nome+acidente switch (tonica) { case "Dó": return 14; break; case "Dó#": return 21; break; case "Dób": return 7; break; case "Ré": return 16; break; case "Ré#": return 23; break; case "Réb": return 9; break; case "Mi": return 18; break; case "Mi#": return 25; break; case "Mib": return 11; break; case "Fá": return 13; break; case "Fá#": return 20; break; case "Fáb": return 6; break; case "Sol": return 15; break; case "Sol#": return 22; break; case "Solb": return 8; break; case "Lá": return 17; break; case "Lá#": return 24; break; case "Láb": return 10; break; case "Si": return 19; break; case "Si#": return 26; break; case "Sib": return 12; break; } } function n2m(texto) { if (texto.length > 3 || texto.length < 2) { msgError.text += "Índice inválido para o cálculo da extensão das voices!\n"; msgError.estado = true; return null; } else if (texto.length == 2) {var note = texto.substr(0,1);} else { var note = texto.substr(0,2); }; note = note.toUpperCase(); switch(note.substr(0,1)) { case "C": var midi = 0; break; case "D": var midi = 2; break; case "E": var midi = 4; break; case "F": var midi = 5; break; case "G": var midi = 7; break; case "A": var midi = 9; break; case "B": var midi = 11; break; }; if (note.length == 2) { switch(note.substr(1,1)) { case "#": midi = midi + 1; break; case "B": midi = midi - 1; break; }; }; var oitava = parseInt(texto.substr(-1,1)); if (oitava > 5 || oitava < 1) { msgError.text += "Índice inválido para o cálculo da extensão das voices!\n"; msgError.estado = true; return null; }; switch(oitava) { case 1: midi = midi + 36; break; case 2: midi = midi + 48; break; case 3: midi = midi + 60; break; case 4: midi = midi + 72; break; case 5: midi = midi + 84; break; }; return midi; } function semi2Int(st) { // converte qt de semitons para intervalos switch(st){ case 0: return "U"; case 1: case 2: return 2; case 3: case 4: return 3; case 5: return 4; case 6: return "trit"; case 7: return 5; case 8: case 9: return 6; case 10: case 11: return 7; case 12: return 8; case 13: case 14: return 9; case 15: case 16: return 10; case 17: return 11; case 18: return "trit+"; case 19: return 12 case 20: case 21: return 13; case 22: case 23: return 14; case 24: return 15; }; } function tpc2Int(st) { // converte intervalo tpc para intervalos switch(st){ case -7: return "Ud" case 0: return "UJ"; case 7: return "Ua"; case -12: return "2d"; case 0: return "2m"; case 2: return "2M"; case 9: return "2a"; case -10: return "3d"; case -3: return "3m"; case 4: return "3M"; case 11: return "3a"; case -8: return "4d"; case -1: return "4J"; case 6: return "4a"; case -6: return "5d"; case 1: return "5J"; case 8: return "5a"; case -11: return "6d"; case -4: return "6m"; case 3: return "6M"; case 10: return "6a"; case -9: return "7d"; case -2: return "7m"; case 5: return "7M"; case 12: return "7a"; }; } //----------------------------------------------- function checkr() { voiceCF = null; Endiza = false; msgError.text = ""; msgError.estado = false; msgResult.height = 40; if (!priEsp && !secEsp && !terEsp && !quaEsp && !quiEsp && !melody) { msgError.text += "Erro! \n Nenhuma opção selecionada!\n Verifique a barra superior."; msgError.visible=true; return; }; destroirMsg(); resultado = []; loadnotes(); vCantusFirmus(); if (Endiza) { return; }; // --------------- melody -------------------- if (penote.checked) { penultimanote(); }; if (ambito.checked) { ambitoMelodico(); }; if (priviGC.checked) { privilegiaConj(); }; if (salt7.checked) { melody7(); }; if (salt6M.checked || salt6m.checked) { melody6(); }; if (saltAum.checked) { melodyAum(); }; if (saltM8.checked) { melody8(); }; if (tritone2.checked) { tritone2Ext(); }; if (tritone1.checked) { tritone1Ext(); }; if (dissoC.checked) { melodyDC(); }; if (saltM5.checked) { melody5(); }; if (varDir.checked) { variedadeDirecionamento(); }; if (repnote.checked) { repetiçãonotes(); }; if (repPad.checked) { repeatStandard(); }; if (arpMel.checked) { melodyArpejo(); }; if (melPFs.checked || melPFi.checked) { melodyPF(); }; if (btModo.text != "Maior" && (neutA.checked || neutN.checked)) { neutralterações(); }; if (tonic.checked || tonicF.checked) { noteIniFin(); }; // --------------- primeira type ------------ if (!melody && (primInt.checked || ultInt.checked)) { primUltIntervalo(); }; if (!melody && LastNotes.checked) { alcançarMovContra(); }; if (!melody && priEsp && cons.checked) { consonances(); }; if (!melody && (parallel5.checked || parallel8.checked)) { quintasOitavas(); }; if (!melody && parallel4.checked) { fourths(); }; if (!melody && parallel36.checked) { thirdsSextas(); }; if (!melody && (hidden5.checked || hidden8.checked)) { hiddens(); }; if (!melody && (consecObli.checked || consecCont.checked)) { consecutive(); }; if (!melody && (inter5.checked || inter8.checked)) { intermittents(); }; if (!melody && uniss.checked) { unissono(); }; if (!melody && cruzavoices.checked) { cruzamento(); }; if (!melody && falsaR.checked) { falsaRelação(); }; if (!melody && distance.checked) { espaçamento(); }; // --------------- second type -------------- if (secEsp && tF.checked) { tempoForte(); }; if (secEsp && dissNP.checked) { notePassagem(); }; // --------------- terceira type ------------- if (terEsp && (noteP.checked || cambi.checked || borda.checked)) { dissonancias3(); }; // --------------- fourth type --------------- if (quaEsp && susp4.checked) { suspensao4() }; // --------------- quinta type --------------- if (quiEsp) { dissonancias5(); }; // ---------------------------------------------- for (var i=0;i ", tempo); voices[seg] = { note: [], tonal: [], posição: [], duração: [], trilha: [], objeto: [], tie: [], tempo: [] }; // Passo 1: ler as notes e guardar em "voices" for (trilha = trilhaInicial; trilha < trilhaEnd; trilha++) { cursor.track = trilha; if (segmento.elementAt(trilha)) { if (segmento.elementAt(trilha).type == Element.REST) { if (trilha == trilhaInicial) { pausa = true; } else { cursor.next(); segmento = cursor.segment; trilha--; continue; }; } else if (segmento.elementAt(trilha).type == Element.CHORD) { var duração = segmento.elementAt(trilha).duration.ticks; var notes = segmento.elementAt(trilha).notes; for (var j=notes.length-1; j>=0;j--) { voices[seg].note[voice] = notes[j].pitch; voices[seg].tonal[voice] = notes[j].tpc voices[seg].trilha[voice] = trilha; voices[seg].posição[voice] = segmento.tick; voices[seg].duração[voice] = duração; voices[seg].compasso = compasso; voices[seg].formula = [numerador, denominador]; voices[seg].objeto[voice] = notes[j]; if (notes[j].tieBack) { voices[seg].tie[voice] = true; } else { voices[seg].tie[voice] = false; } voices[seg].tempo[voice] = tempo; voice++; carregou = true; }; }; } else { if (voices[seg-1]) { for (var y=0; y segmento.tick) { var prolonga = true; } else { var prolonga = false; }; if (prolonga) { voices[seg].note[voice] = voices[seg-1].note[y]; voices[seg].tonal[voice] = voices[seg-1].tonal[y]; voices[seg].trilha[voice] = voices[seg-1].trilha[y]; voices[seg].posição[voice] = segmento.tick; voices[seg].duração[voice] = voices[seg-1].duração[y] - (segmento.tick - voices[seg-1].posição[y]); voices[seg].compasso = compasso; voices[seg].formula = [numerador, denominador]; voices[seg].objeto[voice] = voices[seg-1].objeto[y]; voices[seg].tie[voice] = true; voices[seg].tempo[voice] = tempo; voice++; carregou = true; }; break; }; }; }; }; }; if (carregou) { cursor.track = trilhaInicial; for (var i=1;i= voices[voices.length-1].note.length) { msgError.text = "Erro! \n voice do Cantus Firmus não detectado! \n Por favor, insira um valor válido na aba de Configurações general."; msgError.visible=true; Endiza = true; return; }; } //------------------- melody ----------- function penultimanote() { if (voices.length<3) { msgError.text += "Não possui a quantidade mínima de notes para a checkção da Second-to-last note!\n"; msgError.estado = true; return; }; var tom = tonicaTPC(btTonica.text, btAcid.text); if (melody) { var voice = voiceCF; } else { var voice = 1 - voiceCF; }; var x = voices.length - 1; var g1 = parseInt(checksMelodicGrade(voices[x-1].tonal[voice], tom)); //console.log("----",parseInt(menuModo.value)) if (parseInt(menuModo.value) < 3) { if (g1 != 5 && g1 != 7 && g1 != 2 && g1 != 4) { verified++; createResult(verified, x-1, voice, voice, "Second-to-last note não pertence ao V ou viiº", 1, 1); }; } else { if (g1 != 2 && g1 != 7) { verified++; createResult(verified, x-1, voice, voice, "não conduz para Endis por grau conj.", 1, 1); }; }; } function ambitoMelodico() { if (melody) { var voice = voiceCF; } else { var voice = 1 - voiceCF; }; var acute = 0, grave = 128; var pos1, pos2, posI, posF; for (var i=0;i acute) { acute = note; pos1 = i; }; if (note < grave) { grave = note; pos2 = i; }; }; if (pos1 > pos2) { posI = pos2; posF = pos1; } else { posI = pos1; posF = pos2; }; var extensive = acute - grave; var numAcordes = (posF - posI)+1; var extQt = parseInt(ambInp.text); if (extensive > extQt) { verified++; createResult(verified, posF, voice, voice, "Melodic range", numAcordes, 1); }; } function privilegiaConj() { if (voices.length<2) { msgError.text += "Não possui a quantidade mínima de acordes para a checkção de privilegiar grau conjunto!\n"; msgError.estado = true; return; }; var tom = tonicaTPC(btTonica.text, btAcid.text); if (melody) { var voice = voiceCF; } else { var voice = 1 - voiceCF; }; var numAcordes = voices.length; var conj = 0, disj = 0; for (var x=1;x 4) { disj++; } else { conj++ }; } else if (intervalo > 2) { disj++; } else { conj++ }; }; }; if (priviGCEx.checked) { var nome = "Não privilegia graus conj. e 3ªs"; } else { var nome = "Não privilegia grau conjunto"; } if (conj <= disj) { verified++; createResult(verified, x-1, voice, voice, nome, numAcordes, 1); }; } function melody7() { if (voices.length<2) { msgError.text += "Não possui a quantidade mínima de acordes para a checkção de Salto de sétima!\n"; msgError.estado=true; return; }; if (melody) { var voice = voiceCF; } else { var voice = 1 - voiceCF; }; for (var x=1;x 0) { continue; }; verified++; createResult(verified, x, voice, voice, "intervalo melódico de 6ªM", 2, 1); } else if (intervalo == 8 || intervalo == -8) { if (salt6mEx.checked && intervalo > 0) { continue; }; verified++; createResult(verified, x, voice, voice, "intervalo melódico de 6ªm", 2, 1); }; }; } function melodyAum() { if (voices.length<2) { msgError.text += "Não possui a quantidade mínima de acordes para a checkção de intervalo melódico aumentado!\n"; msgError.estado = true; return; }; var tom = tonicaTPC(btTonica.text, btAcid.text); if (melody) { var voice = voiceCF; } else { var voice = 1 - voiceCF; }; for (var x=1;x 12) { verified++; createResult(verified, x, voice, voice, "intervalo melódico > 8ª", 2, 1); }; }; } function tritone2Ext() { if (voices.length<3) { msgError.text += "Não possui a quantidade mínima de notes para a checkção de trítono!\n"; msgError.estado = true; return; }; if (melody) { var voice = voiceCF; } else { var voice = 1 - voiceCF; }; var newvoice = [], mov = [], qtM = 0, posI = 0; for (var x=0;x=2 && mov[x-1] != mov[x-2] && dir1 != 0) { if (qtM >= 2) { var intervalo = Math.abs(newvoice[posI].note - newvoice[x-1].note); var pIni = (newvoice[x-1].pos - newvoice[posI].pos); var pEnd = newvoice[x-1].pos; listacheck(intervalo); }; posI = x-1; qtM = 0; }; if (qtM > 0 && x == newvoice.length-1) { var intervalo = Math.abs(newvoice[posI].note - newvoice[x].note); var pIni = newvoice[x].pos - newvoice[posI].pos; var pEnd = newvoice[x].pos; listacheck(intervalo); }; }; function listacheck(intervalo) { if ((intervalo == 6 || intervalo == 18) && pIni > 1) { verified++; createResult(verified, pEnd , voice, voice, "trítono nas 2 extremidades", pIni + 1, 1); }; }; } function tritone1Ext() { if (voices.length<3) { msgError.text += "Não possui a quantidade mínima de notes para a checkção de trítono!\n"; msgError.estado = true; return; }; if (melody) { var voice = voiceCF; } else { var voice = 1 - voiceCF; }; var newvoice = [], mov = [], qtM = 0, posI = 0; for (var x=0;x=2 && mov[x-1] != mov[x-2]) { for (var i = posI+1; i < x-2; i++) { // console.log("voice:", voice, " | ", newvoice[i].note, newvoice[x-1].note); if (qtM >= 2) { var intervalo = Math.abs(newvoice[i].note - newvoice[x-1].note); var pIni = (newvoice[x-1].pos - newvoice[i].pos); var pEnd = newvoice[x-1].pos; listacheck(intervalo); }; }; for (var i = posI+1; i < x-1; i++) { //console.log("voice:", voice, " x: ", " | ", newvoice[posI].note, newvoice[i].note) if (qtM >= 2) { var intervalo = Math.abs(newvoice[posI].note - newvoice[i].note); var pIni = (newvoice[i].pos - newvoice[posI].pos); var pEnd = newvoice[i].pos; listacheck(intervalo); }; }; posI = x-1; qtM = 0; }; if (qtM > 0 && x == newvoice.length-1) { for (var i = posI+1; i < x-2; i++) { //console.log("voice:", voice, " | ", newvoice[i].note, newvoice[x].note); var intervalo = Math.abs(newvoice[i].note - newvoice[x].note); var pIni = newvoice[x].pos - newvoice[i].pos; var pEnd = newvoice[x].pos; listacheck(intervalo); }; for (var i = posI+1; i < x; i++) { //console.log("voice:", voice, " | ", newvoice[posI].note, newvoice[i].note) var intervalo = Math.abs(newvoice[posI].note - newvoice[i].note); var pIni = newvoice[i].pos - newvoice[posI].pos; var pEnd = newvoice[i].pos; listacheck(intervalo); }; }; }; function listacheck(intervalo) { if ((intervalo == 6 || intervalo == 18) && pIni > 1) { verified++; createResult(verified, pEnd , voice, voice, "trítono em 1 extremidade", pIni + 1, 1); }; }; } function melodyDC() { if (voices.length<3) { msgError.text += "It does not have the minimum amount of chords for the checktion of Composite dissonance!\n"; msgError.estado=true; return; }; if (melody) { var voice = voiceCF; } else { var voice = 1 - voiceCF; }; var newvoice = []; for (var x=0;x 7) { if (dir3 != dir2 && dir3 != 0 && int2 < compensa) { continue; } else { verified++; createResult(verified, newvoice[x-1].pos, voice, voice, "intervalo melódico > 5ªJ", 2, 1); }; }; }; } function variedadeDirecionamento() { var qtMov = parseInt(varDirQt.text); if (melody) { var voice = voiceCF; } else { var voice = 1 - voiceCF; }; var asc = [], desc = [], mov = [], newvoice = []; var qtA = 0, qtD = 0, qtN = 0, pos1 = 0; for (var x=0;x=3 && mov[x-1] != mov[x-3]) { testaQt(qtN); pos1 = x-1; asc = []; qtA = 0; desc = []; qtD = 0; }; break; case -1: case 1: if (x>=2 && mov[x-1] != mov[x-2] && mov[x-1] != 0) { testaQt(qtN); pos1 = x-1; asc = []; qtA = 0; desc = []; qtD = 0; }; break; }; if (dir1 == 1) { asc[qtA] = dir1; qtA++; qtN = asc.length; } else if (dir1 == -1) { desc[qtD] = dir1; qtD++; qtN = desc.length; }; }; testaQt(qtN); function testaQt(qt) { if (qt > qtMov) { verified++; createResult(verified, newvoice[x-1].pos, voice, voice, "movimentos na mesma direction", posIni, 1); }; }; } function repetiçãonotes() { var qtRep = parseInt(repnoteQt.text); if (melody) { var voice = voiceCF; } else { var voice = 1 - voiceCF; }; var newvoice = []; var qt = 0, pos1 = 0; for (var x=0;x 1) { newvoice[newvoice.length-1].pos = x; }; }; for (var x=1;x qtRep) { verified++; createResult(verified, newvoice[x-1].pos, voice, voice, "repetição de notes", posIni, 1); }; }; } function repeatStandard() { if (voices.length<4) {msgError.text += "It does not have the minimum amount of chords for the repeating check of Melodic Standard!\n"; msgError.estado=true; return; } var qtRep = parseInt(repPadQt.text); if (melody) { var voice = voiceCF; } else { var voice = 1 - voiceCF; }; var newvoice = []; for (var x=0;x=5 && newvoice[x].note == newvoice[x-2].note && newvoice[x-1].note == newvoice[x-3].note && newvoice[x].note == newvoice[x-4].note && newvoice[x-1].note == newvoice[x0].note && newvoice[x].note != newvoice[x-1].note) { verRepPad(6,2); }; if (x >= 6 && newvoice[x].note == newvoice[x-3].note && newvoice[x-1].note == newvoice[x-4].note && newvoice[x-2].note == newvoice[x].note && (newvoice[x].note != newvoice[x-1].note || newvoice[x].note != newvoice[x-2].note)) { verRepPad(6,3); }; if (x >= 9 && newvoice[x].note == newvoice[x-3].note && newvoice[x-1].note == newvoice[x-4].note && newvoice[x-2].note == newvoice[x0].note && newvoice[x].note == newvoice[x-6].note && newvoice[x-1].note == newvoice[x-7].note && newvoice[x-2].note == newvoice[x-8].note && (newvoice[x].note != newvoice[x-1].note || newvoice[x].note != newvoice[x-2].note)) { verRepPad(9,3); }; }; function verRepPad(a,b) { var numAcordes = (newvoice[x].pos - newvoice[x-(a-1)].pos) + 1; var rep = (a/b) - 1; if (rep > qtRep) { verified++; createResult(verified, newvoice[x].pos, voice, voice, "repetição de Standard mel.", numAcordes, 1); }; }; } function melodyArpejo() { if (voices.length<3) { msgError.text += "It does not have the minimum amount of chords for the checktion of consecutive jumps in the same direction!\n"; msgError.estado=true; return; }; var qtArp = parseInt(arpMelQt.text); var arp = 0; if (melody) { var voice = voiceCF; } else { var voice = 1 - voiceCF; }; var newvoice = []; for (var x=0;x 2 && int2 > 2 && dir1 == dir2 && dir1 != 0 && ((int1 == 3 && int2 == 3) || (int1 == 3 && int2 == 4) || (int1 == 4 && int2 == 3) || (int1 == 4 && int2 == 4) || (int1 == 3 && int2 == 6) || (int1 == 4 && int2 == 5) || (int1 == 3 && int2 == 5) || (int1 == 6 && int2 == 3) || (int1 == 5 && int2 == 3) || (int1 == 5 && int2 == 4))) { arp++; if (arp > qtArp) { var posIni = (newvoice[x].pos - newvoice[x-2].pos) + 1 verified++; createResult(verified, newvoice[x].pos, voice, voice, "arpejo de acorde", posIni, 1); }; }; }; } function melodyPF() { if (voices.length<3) { msgError.text += "Não possui a quantidade mínima de acordes para a checkção de Ponto focal!\n"; msgError.estado=true; return; }; if (melody) { var voice = voiceCF; } else { var voice = 1 - voiceCF; }; var voiceSup = []; var pfSs = 0, pfSi = 127; // ponto focal da voice Superior/Inferior, inferior/superior var pfSsc = 0, pfSic = 0; // var para contagem dos pontos focais; for (var x=0;x pfSs) { pfSs = voiceSup[x]; }; if (voiceSup[x] < pfSi) { pfSi = voiceSup[x]; }; }; for (var x=1;x 1) { verified++; createResult(verified, x, voice, voice, "repeat ponto focal superior", 1, 1); }; }; if (voiceSup[x] == pfSi) { pfSic++; if ((voiceSup[x-1] == pfSi) || (x == voices.length-1 && voiceSup[0] == pfSi)) { pfSic--; } else if (melPFi.checked && pfSic > 1) { verified++; createResult(verified, x, voice, voice, "repeat ponto focal inferior", 1, 1); }; }; }; } function neutralterações() { if (voices.length<3) { msgError.text += "Does not have the minimum amount of chords for the checktion of neutralization of changes!\n"; msgError.estado=true; return; }; var tom = tonicaTPC(btTonica.text, btAcid.text); for (var voice=0;voice 0) { if (voices[x].note[voice] != voices[x-1].note[voice]) { newvoice.push({ note: voices[x].note[voice], tonal: voices[x].tonal[voice], pos: x}) ; }; } else { newvoice.push({ note: voices[x].note[voice], tonal: voices[x].tonal[voice], pos: x}); }; }; for (var x=0;x 3) { checkAlter(); x += 4; break; }; var procuraT = checksMelodicGrade(newvoice[a].tonal, tom); procuraT = procuraT.toString(); if (procuraT == "1") { if (x < newvoice.length-2 && tam == 3) { if (alt1 == "6+" && alt2 != "7+") { if ((alt2 == "2" || alt2 == "5" || alt2 == "1") && alt3 == "7+") { x += 3; break;} else { checkAlter(); x += 3; break; } } else if (alt1 == "7+") { if ((alt2 == "2" && alt3 == "5") || (alt2 == "6+" && alt3 == "7+")) { x += 3; break;} else { checkAlter(); x += 3; break; } }; } else if (tam == 2) { if (alt1 == "7+") { if (alt2 == "2" || alt2 == "5") { x += 2; break;} else { checkAlter(); x += 2; break; }; } else if (alt1 == "6+" && alt2 != "7+") { checkAlter(); x += 2; break; }; } else if (tam == 1) { if (alt1 == "7+") { x += 1; break; } else { checkAlter(); x += 1; break; }; }; }; }; }; }; }; for (var x=0;x=0;a--) { var alt2 = checksMelodicGrade(newvoice[a].tonal, tom); alt2 = alt2.toString(); if (alt2 == alt1) { break; }; var alt3 = checksMelodicGrade(newvoice[a+1].tonal, tom); alt3 = alt3.toString(); if (a+2 > x) { var alt4 = checksMelodicGrade(newvoice[x].tonal, tom); } else { var alt4 = checksMelodicGrade(newvoice[a+2].tonal, tom); }; alt4 = alt4.toString(); if (alt1.slice(0, 1) == alt2 ) { switch (alt2) { case "6": if (alt3 == "5") { a = -1; } else { checkNeutr(); a = -1; }; break; case "7": if (alt3.slice(0, 1) == "6" && alt4 != "7+") { a = -1; } else { checkNeutr(); a = -1; }; break; }; }; }; }; }; }; function checkAlter() { var posIni = (newvoice[a].pos - newvoice[x].pos) + 1; verified++; createResult(verified, newvoice[a].pos, voice, voice, "alteração 6º e/ou 7º", posIni, 1); }; function checkNeutr() { var posIni = (newvoice[x].pos - newvoice[a].pos) + 1; verified++; createResult(verified, newvoice[x].pos, voice, voice, "neutralização 6º e/ou 7º", posIni, 1); }; } function noteIniFin() { if (voices.length<3) { msgError.text += "It does not have the minimum amount of chords for the checktion of initial note and End!\n"; msgError.estado=true; return; }; var tom = tonicaTPC(btTonica.text, btAcid.text); if (melody) { var voice = voiceCF; } else { var voice = 1 - voiceCF; }; var test1 = false, test2 = false, test3 = false, test4 = false, test5 = false, test6 = false; var nI = parseInt(checksMelodicGrade(voices[0].tonal[voice], tom)); var nF = parseInt(checksMelodicGrade(voices[voices.length-1].tonal[voice], tom)); if (tonic.checked && nI == 1) { test1 = true; }; if (third.checked && nI == 3) { test2 = true; }; if (quinta.checked && nI == 5) { test3 = true; }; if (tonicF.checked && nF == 1) { test4 = true; }; if (thirdF.checked && nF == 3) { test5 = true; }; if (quintaF.checked && nF == 5) { test6 = true; }; var nomeI = "note inicial não é "; if (tonic.checked) { nomeI += "1º"; }; if (third.checked) { nomeI += "/3º"; }; if (quinta.checked) { nomeI += "/5º"; }; nomeI += " grau"; var nomeF = "note End não é "; if (tonicF.checked) { nomeF += "1º"; }; if (thirdF.checked) { nomeF += "/3º"; }; if (quintaF.checked) { nomeF += "/5º"; }; nomeF += " grau"; if (!test1 && !test2 && !test3) { verified++; createResult(verified, 0, voice, voice, nomeI, 1, 1); }; if (!test4 && !test5 && !test6) { verified++; createResult(verified, voices.length-1, voice, voice, nomeF, 1, 1); }; } // --------------------- 1ª type ------------ function primUltIntervalo() { if (voices.length<3) { msgError.text += "It does not have the minimum amount of chords for the initial interval check and End!\n"; msgError.estado=true; return; }; var intI = (Math.abs(voices[0].note[0] - voices[0].note[1])) % 12; var intF = (Math.abs(voices[voices.length-1].note[0] - voices[voices.length-1].note[1])) % 12; var start = false, Ende = false; if (intI != 0) { if (intI == 7 && ex5Ji.checked) { start = true; } else if ((intI == 3 || intI == 4) && ex3i.checked) { start = true; }; if (!start) { verified++; createResult(verified, 0, 0, 1, "intervalo inicial", 1, 2); }; }; if (intF != 0) { if (intF == 7 && ex5Jf.checked) { Ende = true; } else if ((intF == 3 || intF == 4) && ex3f.checked) { Ende = true; }; if (!Ende) { verified++; createResult(verified, voices.length-1, 0, 1, "intervalo End", 1, 2); }; }; } function alcançarMovContra() { if (voices.length<3) { msgError.text += "Does not have the minimum amount of chords for the checktion of reaching End range!\n"; msgError.estado=true; return; }; var intS = voices[voices.length-1].note[0] - voices[voices.length-2].note[0] var intI = voices[voices.length-1].note[1] - voices[voices.length-2].note[1]; var dir1 = direction(voices[voices.length-1].note[0] - voices[voices.length-2].note[0]); var dir2 = direction(voices[voices.length-1].note[1] - voices[voices.length-2].note[1]); if (intS > 2 || intI > 2 || intS < -2 || intI < -2 || dir1 == dir2 || dir1 == 0 || dir2 == 0) { if ((fourthJi.checked && (intI == 5 || intI == -7)) || (fourthJs.checked && (intS == 5 || intS == -7))) { return; }; verified++; createResult(verified, voices.length-2, 0, 1, "reaches range End", 1, 2); }; } function consonances() { var cP = 0, cI = 0; for (var x=0;x cI && maiorCons.checked) { verified++; createResult(verified, voices.length-1, 0, 1, "consonância imperfeita não é maioria", voices.length, "null"); }; } function quintasOitavas() { var par5Status = true, par8Status = true; var acorAnt = 1; var qtdpar8Rep = parseInt(par8Rep.text), qtdpar5Rep = parseInt(par5Rep.text); for (var voice=0; voice < 10; voice++) { // percorre voices var voiceAnt = voice; for (var i=voice+1; i < 10; i++) { // runs other voices var voiceAtual = i; var par5 = 0, par8 = 0; for (var x=1;x<=voices.length;x++) { // chords running if (x==voices.length) { verificou58(); continue ; }; if (voice >= voices[x].note.length-1 || i >= voices[x].note.length) { continue ; }; var dir1 = direction(voices[x].note[voice] - voices[x-1].note[voice]); var dir2 = direction(voices[x].note[i] - voices[x-1].note[i]); var intAtual = voices[x].note[voice] - voices[x].note[i]; var intAnt = voices[x-1].note[voice] - voices[x-1].note[i]; if (dir1 == dir2 && dir1 != 0) { // both voices moving in the same direction if (Math.abs(intAtual%12) == 7 && intAtual == intAnt && parallel5.checked) { //testa 5ª parallel if (voiceAnt == voice) { var qtdPar5 = par5 + 1; } if (par5 == 0) { par5 = 2; } else { par5++; }; par5Status = true; voiceAnt = voice, voiceAtual = i; acorAnt = x; par8 = 0, par8Status = false; } else if (par5Status) { verificou58(); }; if (Math.abs(intAtual%12) == 0 && intAtual == intAnt && parallel8.checked) { // testa 8ª parallel if (voiceAnt == voice) { var qtdPar8 = par8 + 1;} if (par8 == 0) { par8 = 2; } else { par8++; }; par8Status = true; voiceAnt = voice, voiceAtual = i; acorAnt = x; par5 = 0, par5Status = false; } else if (par8Status) { verificou58(); }; } else { verificou58(); }; }; }; }; function verificou58() { if (par8Status && par8 > qtdpar8Rep && parallel8.checked) { verified++; createResult(verified, acorAnt, voiceAnt, voiceAtual, "8ª parallel", qtdPar8+1 , 2);}; if (par5Status && par5 > qtdpar5Rep && parallel5.checked) { verified++; createResult(verified, acorAnt, voiceAnt, voiceAtual, "5ª parallel", qtdPar5+1 , 2);}; par8Status = false; par8 = 0; par5Status = false; par5 = 0; }; } function fourths() { var par4Status = true; var acorAnt = 1; var qtdpar4Rep = parseInt(par4Rep.text); // console.log("par4Rep : "+ qtdpar4Rep) for (var voice=0; voice < 10; voice++) { // percorre voices var voiceAnt = voice; for (var i=voice+1; i < 10; i++) { // runs other voices var voiceAtual = i; var par4 = 0; for (var x=1;x= voices[x].note.length-1 || i >= voices[x].note.length) { verificou4(); continue; }; var dir1 = direction(voices[x].note[voice] - voices[x-1].note[voice]); var dir2 = direction(voices[x].note[i] - voices[x-1].note[i]); var intAtual = voices[x].note[voice] - voices[x].note[i]; var intAnt = voices[x-1].note[voice] - voices[x-1].note[i]; if (Math.abs(intAtual%12) == 5 && intAtual == intAnt && dir1 == dir2 && dir1 != 0) { //testa por 4ª parallel if (voiceAnt == voice) { var qtdPar4 = par4 + 1;} if (par4 == 0) { par4 = 2; } else { par4++; }; par4Status = true; acorAnt = x; voiceAnt = voice, voiceAtual = i;; } else { verificou4(); }; }; }; }; function verificou4() { if (par4Status && par4 > qtdpar4Rep) { verified++; createResult(verified, acorAnt, voiceAnt, voiceAtual, "4ª parallel", qtdPar4 , 2); }; par4Status = false; par4 = 0; }; } function thirdsSextas() { var par3Status = true, par6Status = true; var acorAnt = 1; var qtdpar36Rep = parseInt(par36Rep.text); for (var voice=0; voice < 10; voice++) { // percorre voices var voiceAnt = voice; for (var i=voice+1; i < 10; i++) { // runs other voices var voiceAtual = i; var par3 = 0, par6 = 0; for (var x=1;x= voices[x].note.length-1 || i >= voices[x].note.length) { if (x==voices.length-1) {verificou36();}; continue; }; var dir1 = direction(voices[x].note[voice] - voices[x-1].note[voice]); var dir2 = direction(voices[x].note[i] - voices[x-1].note[i]); var intAtual = voices[x].note[voice] - voices[x].note[i]; var intAnt = voices[x-1].note[voice] - voices[x-1].note[i]; if (dir1 == dir2 && dir1 != 0) { // both voices moving in the same direction if ((Math.abs(intAtual%12) == 3 || Math.abs(intAtual%12) == 4) && //testa por 3ª parallel -- (Math.abs(intAnt%12) == 3 || Math.abs(intAnt%12) == 4)) { if (voiceAnt == voice) { var qtdPar3 = par3 + 1; } if (par3 == 0) { par3 = 2; } else { par3++; }; par3Status = true; voiceAnt = voice, voiceAtual = i; acorAnt = x; par6 = 0, par6Status = false; } else if (par3Status) { verificou36(); }; if ((Math.abs(intAtual%12) == 8 || Math.abs(intAtual%12) == 9) && //testa por 6ª parallel -- (Math.abs(intAnt%12) == 8 || Math.abs(intAnt%12) == 9)) { if (voiceAnt == voice) { var qtdPar6 = par6 + 1;} if (par6 == 0) { par6 = 2; } else { par6++; }; par6Status = true; voiceAnt = voice, voiceAtual = i; acorAnt = x; par3 = 0, par3Status = false; } else if (par6Status) { verificou36(); }; } else { verificou36(); }; }; }; }; function verificou36() { if (par3Status && par3 > qtdpar36Rep) { //console.log("Else da NÃO 3ª. acorAnt = " + acorAnt) verified++; createResult(verified, acorAnt, voiceAnt, voiceAtual, "3ª parallel", qtdPar3 , 2);}; if (par6Status && par6 > qtdpar36Rep) { //console.log("Else da NÃO 6ª. acorAnt = " + acorAnt) verified++; createResult(verified, acorAnt, voiceAnt, voiceAtual, "6ª parallel", qtdPar6 , 2);}; par6Status = false; par6 = 0; par3Status = false; par3 = 0; }; } function hiddens() { for (var x=1;x 2)) { verified++; createResult(verified, x, voice, i, "5ª hidden", 2, 2); }; }; }; if (Math.abs(intAtual%12) == 0 && intAtual != intAnt && hidden8.checked) { // testa hiddens // testa consições if (!hiddenEx.checked || (hiddenEx.checked && x != voices.length-1)) { if (!hiddenSalto.checked || (hiddenSalto.checked && Math.abs(voices[x-1].note[0] - voices[x].note[0]) > 2)) { verified++; createResult(verified, x, voice, i, "8ª hidden", 2, 2); }; }; }; }; }; }; }; } consecutive function() { for (var x=1;x unissono) { verified++; createResult(verified, x, voice-1, voice, "uníssono", 1, 2); }; }; }; } function cruzamento() { for (var x=1;x 16) { conta++; if (conta > qt) { verified++; createResult(verified, x, voice-1, voice, "espaçamento máximo", 1, 2); }; } else { conta = 0; }; }; }; } // ------------------------2ª type ------------ function tempoForte() { var voice = 1 - voiceCF; for (var x=0;x=voices.length-4) { loopCompleto = true; }; continue; }; }; if (borda.checked && intHarm[0] != "D" && intHarm[1] == "D" && intHarm[2] != "D") { // check bordadura if (movDir[0] != movDir[1] && movDir[1] != 0 && intMelo[0] < 3 && intMelo[1] < 3) { continue; }; }; if (noteP.checked && intHarm[0] != "D" && intHarm[1] == "D" && intHarm[2] != "D") { // check note of passage if (movDir[0] == movDir[1] && movDir[1] != 0 && intMelo[0] < 3 && intMelo[1] < 3) { continue; }; }; }; if (intHarm[1] == "D") { verified++; createResult(verified, x, 0, 1, "dissonância não tratada", 1, 2);}; }; var i=0; for (var x=voices.length-3;x=voices.length-4) { loopCompleto = true; }; continue; }; }; if (pMetric[1] =="F" && intHarm[1] == "D") { // check suspension with interrupted resolution 5 notes if (movDir[0] == 0 && movDir[1] != 0 && movDir[2] != 0 && movDir[3] != 0 && movDir[4] != 0 && intMelo[1] <= 7 && intMelo[2] < 3 && intMelo[3] < 3 && intHarm[0].substr(0, 1) == "C" && intHarm[2].substr(0, 1) == "C" && intHarm[4].substr(0, 1) == "C" && pMetric[4] != "c") { x+=2; if (x>=voices.length-4) { loopCompleto = true; }; continue; }; }; if (pMetric[1] =="F" && intHarm[1] == "D") { // check suspension with interrupted resolution 4 notes if (movDir[0] == 0 && movDir[1] != 0 && movDir[2] != movDir[1] && movDir[2] != 0 && intMelo[1] <= 7 && intMelo[2] <= 7 && intHarm[0].substr(0, 1) == "C" && intHarm[2].substr(0, 1) == "C" && intHarm[3].substr(0, 1) == "C" && pMetric[3] != "c") { x+=1; if (x>=voices.length-4) { loopCompleto = true; }; continue; }; }; if (bord5.checked && intHarm[0] != "D" && intHarm[1] == "D" && intHarm[2] != "D") { // check bordadura if (movDir[0] != movDir[1] && movDir[1] != 0 && intMelo[0] < 3 && intMelo[1] < 3) { continue; }; }; if (nP5.checked && intHarm[0] != "D" && intHarm[1] == "D" && intHarm[2] != "D") { // check note of passage if (movDir[0] == movDir[1] && movDir[1] != 0 && intMelo[0] < 3 && intMelo[1] < 3) { continue; }; }; if (susp5.checked && pMetric[1] == "F" && intHarm[1] == "D") { // check suspensão if (movDir[0] == 0 && movDir[1] != 0 && intMelo[1] < 3 && intHarm[0].substr(0, 1) == "C" && intHarm[2].substr(0, 1) == "C") { continue; }; }; }; if (intHarm[1] == "D") { //console.log("antes") verified++; createResult(verified, x, 0, 1, "dissonância não tratada", 1, 2);}; }; var i=1; for (var x=voices.length-3;x 1) { var compasso = compAnt+" ao "+compAtual;} else { var compasso = compAtual; }; switch (numvoices) { // cria mensagem de texto case 1: var qualvoice = ", na voice "+ (voice+1); break; case "fr": case 2: var qualvoice = ", between as voices "+(voice+1)+" e "+(i+1); break; case "null": case qtdvoices: var qualvoice = ""; break; }; var texto = verified+") "+tipo+": compasso "+ compasso + qualvoice; resultado[verified] = [texto]; for (var y=primAcorde;y<=x;y++) { // cria array de objetos para colorir switch (numvoices) { case 1: resultado[verified].push(voices[y].objeto[voice]); break; case 2: resultado[verified].push(voices[y].objeto[voice], voices[y].objeto[i]); break; case "null": case qtdvoices: for (var k=0;k