//=========================================================================================\\
// 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