Implement new features in the feat/newfeatures2019 branch using the following procedure:
Cory will enter new feature names and descriptions in red on existing manual pages and push them to this branch.
Implement the features in red.
You may wish to use temporary dummy feature numbers while doing this to avoid conflicts with existing features.
Be careful about MIDI peculiarities like Channel 10 (see the Extending the Software section of the manual).
You can make use of utility methods in mckay.utilities.staticlibraries.* if you wish.
You should definitely make use of use of existing functionality in MIDIIntermediateRepresentations. You can also implement some of your new processing in MIDIIntermediateRepresentations if you think that other features will also use it, but when possible it's better to reuse to other features directly.
Add your new features to MIDIFeatureExtractor so that jSymbolic will extract them.
Test the new features:
Use command line settings in NetBeans and config files to speed this up.
Make your own custom MIDI test files to test your specific features (talk to Emily or Gabriel about score editing software in the lab).
Test a wide variety of existing stock test MIDI files as well (don't worry about MEI for now).
Verify that all feature outputs are reasonable.
Verify that no features give values of NaN, -Infinity or Infinity.
Adjust feature numbering for all features displaced by the new feature in both the feature implementations and in the manual.
Be sure to maintain the feature order specified in the manual.
Do not change the feature descriptions or de-red them (Cory will do this during the code review process).
Add new features (in the proper order) to the jSymbolicDefaultConfigs.txt file. This can be done in the GUI.
Commit and push your changes (still to the feat/newfeatures2019 branch).
Mention the names of all new features you added in the commit notes.
E-mail Cory to note the feature batch is complete.
Cory will do a code review and push a new set of features to implement (still to the feat/newfeatures2019 branch).
Implement new features in the feat/newfeatures2019 branch using the following procedure: