Skip to content

Commit

Permalink
Merge pull request #5 from Jedimaster4559/software-cleanup
Browse files Browse the repository at this point in the history
General Software Cleanup/Test Prep
  • Loading branch information
Jedimaster4559 authored Oct 5, 2021
2 parents 8d706cf + 71538d3 commit 15f4d15
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 19 deletions.
66 changes: 51 additions & 15 deletions ErrorIdentifier.qml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import Qt.labs.settings 1.0
MuseScore {
menuPath: "Plugins.Analysis.Partwriting Error Identifier"
description: 'Automatically Identify Errors in Partwriting'
version: "0.0.1"
version: "0.1.0"
pluginType: "dialog"

// Allowed Part Range Configurations
Expand Down Expand Up @@ -561,56 +561,77 @@ MuseScore {
RowLayout {
id: rangeErrorRow
spacing: 10
Text { text: " 𝅘𝅥"; color: rangeErrorColor }
Text { text: "Range Errors" }
Text { text: " 𝅘𝅥 𝅘𝅥 𝅘𝅥 𝅘𝅥 "; color: rangeErrorColor }
Text {
text: '<html><a href="https://partwriting-error-checker.readthedocs.io/en/latest/Errors/RangeErrors/">Range Errors</a></html>'
onLinkActivated:Qt.openUrlExternally(link)
}
Text { text: rangeErrorCount }
}

RowLayout {
id: melodicDissonanceErrorRow
spacing: 10
Text { text: " 𝅘𝅥"; color: melodicDissonanceColor }
Text { text: "Melodic Dissonance Errors" }
Text { text: " 𝅘𝅥 𝅘𝅥 𝅘𝅥 𝅘𝅥 "; color: melodicDissonanceColor }
Text {
text: '<html><a href="https://partwriting-error-checker.readthedocs.io/en/latest/Errors/MelodicDissonance/">Melodic Dissonance Errors</a></html>'
onLinkActivated:Qt.openUrlExternally(link)
}
Text { text: melodicDissonanceCount }
}

RowLayout {
id: spacingErrorRow
spacing: 10
Text { text: " 𝅘𝅥"; color: spacingErrorColor }
Text { text: "Spacing Errors" }
Text { text: " 𝅘𝅥 𝅘𝅥 𝅘𝅥 𝅘𝅥 "; color: spacingErrorColor }
Text {
text: '<html><a href="https://partwriting-error-checker.readthedocs.io/en/latest/Errors/SpacingErrors/">Spacing Errors</a></html>'
onLinkActivated:Qt.openUrlExternally(link)
}
Text { text: spacingErrorCount }
}

RowLayout {
id: crossedErrorRow
spacing: 10
Text { text: " 𝅘𝅥"; color: crossedVoicesColor }
Text { text: "Crossed Voices Errors" }
Text { text: " 𝅘𝅥 𝅘𝅥 𝅘𝅥 𝅘𝅥 "; color: crossedVoicesColor }
Text {
text: '<html><a href="https://partwriting-error-checker.readthedocs.io/en/latest/Errors/CrossedVoices/">Crossed Voices Errors</a></html>'
onLinkActivated:Qt.openUrlExternally(link)
}
Text { text: crossedVoicesErrorCount }
}

RowLayout {
id: parallelErrorRow
spacing: 10
Text { text: " 𝅘𝅥"; color: parallelErrorColor }
Text { text: "Parallel 5ths/8va Errors" }
Text { text: " 𝅘𝅥 𝅘𝅥 𝅘𝅥 𝅘𝅥 "; color: parallelErrorColor }
Text {
text: '<html><a href="https://partwriting-error-checker.readthedocs.io/en/latest/Errors/ParallelErrors/">Parallel 5ths/8va Errors</a></html>'
onLinkActivated:Qt.openUrlExternally(link)
}
Text { text: parallelErrorCount }
}

RowLayout {
id: hiddenFifthsErrorRow
spacing: 10
Text { text: " 𝅘𝅥"; color: hiddenFifthsColor }
Text { text: "Hidden Fifths Errors" }
Text { text: " 𝅘𝅥 𝅘𝅥 𝅘𝅥 𝅘𝅥 "; color: hiddenFifthsColor }
Text {
text: '<html><a href="https://partwriting-error-checker.readthedocs.io/en/latest/Errors/HiddenFifths/">Hidden Fifths Errors</a></html>'
onLinkActivated:Qt.openUrlExternally(link)
}
Text { text: hiddenFifthErrorCount }
}

RowLayout {
id: diminishedFifthErrorRow
spacing: 10
Text { text: " 𝅘𝅥"; color: diminishedFifthColor }
Text { text: "Diminished Fifth Resolution Errors" }
Text { text: " 𝅘𝅥 𝅘𝅥 𝅘𝅥 𝅘𝅥 "; color: diminishedFifthColor }
Text {
text: '<html><a href="https://partwriting-error-checker.readthedocs.io/en/latest/Errors/DiminishedFifthResolutions/">Diminished Fifth Resolution Errors</a></html>'
onLinkActivated:Qt.openUrlExternally(link)
}
Text { text: diminishedFifthErrorCount }
}

Expand All @@ -622,6 +643,20 @@ MuseScore {
}
}

Button {
id: buttonFeedback
text: qsTr("Provide Feedback")
anchors.bottom: mainDialog.bottom
anchors.left: mainDialog.left
anchors.bottomMargin: 10
anchors.leftMargin: 10
width: 100
height: 40
onClicked: {
Qt.openUrlExternally("https://uah.co1.qualtrics.com/jfe/form/SV_4ZxsMoY3zoPbdnU")
}
}

Button {
id: buttonOK
text: qsTr("OK")
Expand Down Expand Up @@ -649,6 +684,7 @@ MuseScore {
curScore.startCmd();
clearAllColorsQuick();
curScore.endCmd();
Qt.quit();
}
}
}
Expand Down
12 changes: 9 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
# Honors Capstone Project
A Musescore plugin that can assess partwriting and find any errors that may have been made.

[![Documentation Status](https://readthedocs.org/projects/partwriting-error-checker/badge/?version=latest)](https://partwriting-error-checker.readthedocs.io/en/latest/?badge=latest)

A [Musescore](https://musescore.org/en) plugin that can assess partwriting and find any errors that may have been made.

# Installation
To install this plugin, copy the `errorIdentifier.qml` file into Musescore's Plugins directory. This is often placed in one of a couple locations. See the following page for more details on installation [https://musescore.org/en/handbook/3/plugins#installation](https://musescore.org/en/handbook/3/plugins#installation)

# Running
To run the plugin, open musescore and then select the plugins manager from the plugins menu. If the plugin was installed correctly (see [installation](#installation)) you should see this plugin identified in that list. Selecting the checkbox by the plugin will make the plugin available for use.
To run the plugin, open musescore and then select the plugins manager from the plugins menu. If the plugin was installed correctly (see [installation](#installation)) you should see this plugin identified in that list. Selecting the checkbox by the plugin will make the plugin available for use.

Once these steps have been completed, the plugin can be run at any time by selecting it from the analysis section of the plugins menu.

# Documentation
This tool includes a documentation site including instructions on how to use this software and some generally helpful instructional materials. Checkout the site [here](https://partwriting-error-checker.readthedocs.io/en/latest/)

# Credits
There are a couple people I would like to thank for their assistance on this project.

Dr. Vineetha Menon served as my capstone director. Her assistance greatly helped keep the project on schedule and on track for success.

The [Chord Identifier Plugin](https://github.com/animikatamon/MuseScorePlugins) by @animikatamon was really helpful for getting off the ground with this project and getting an understanding of implementing MuseScore Plugins with QML.
The [Chord Identifier Plugin](https://github.com/animikatamon/MuseScorePlugins) by @animikatamon was really helpful for getting off the ground with this project and getting an understanding of implementing MuseScore Plugins with QML.
5 changes: 5 additions & 0 deletions docs/Installation.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# Installation

## Prerequisites
This plugin requires that you already have Musescore installed on your system. Visit their Download site here and follow their instructions: [https://musescore.org/en/download](https://musescore.org/en/download)

## Installing the Plugin
First download the plugin from the releases page: [https://github.com/Jedimaster4559/HonorsCapstoneProject/releases](https://github.com/Jedimaster4559/HonorsCapstoneProject/releases)

To install this plugin, copy the `errorIdentifier.qml` file into Musescore's Plugins directory. This is often placed in one of a couple locations. See the following page for more details on installation [https://musescore.org/en/handbook/3/plugins#installation](https://musescore.org/en/handbook/3/plugins#installation)
2 changes: 1 addition & 1 deletion docs/KeyDecisions.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ While the final decision was to use musescore, it is not impossible for Finale a
### Why not a custom tool built from scratch
Building a tool from scratch would have taken too much time. Tools such as musescore have a large number of features that have already had extensive thought and time put into them. It just didn't make sense to invest time into re-implementing the features in my own piece of software when I could just use what already existed in musescore.

For example:
For example:<br>
- Notation: At a minimum, some kind of notation would be needed to give a good visual representation of the errors. This challenge by itself would have probably taken longer to implement than the rest of the project and still would not have been able to match the quality of many of the mainstream notation softwares. Musescore themselves recently recently rebuilt their notation system and created an excellent video illustrating the difficulty of this processes. (TODO: Add link to Youtube Video).<br>
- Audio Playback: While not essential to the project, audio playback is a very helpful feature to have as it allows students to connect both valid and invalid partwriting with how it sounds. A custom implemtation of this would have likely taken some complicated work involving midi, and other audio playback. This is another feature that probably would have taken nearly as long as the core project.<br>
- XML Parsing: While this feature wouldn't have been as difficult to handle since MusicXML has a public schema (TODO: Insert link), it was another option that just didn't make a lot of sense. Musescore already had this feature implemented.
Expand Down

0 comments on commit 15f4d15

Please sign in to comment.