Skip to content

Latest commit

 

History

History
775 lines (521 loc) · 17.2 KB

CHANGELOG.md

File metadata and controls

775 lines (521 loc) · 17.2 KB

Maialib - Change Log

All notable changes to this project will be documented in this file.

[v1.5.0] - 2024-06-23

API Changes

  • Score::getLoadedFilePath() to .getFilePath()

New Features

  • Score Class:
    • Add .getFileName()
  • Chord Class:
    • Add .getQuality()
  • Note Class:
    • Add .getWrittenPitchClass()
    • Add .getSoundingPitchClass()

Improved

  • Score::getChords() and getChordsDataFrame() returns struct with a new boolean field called 'isHomophonic'
  • Interval::analyse() add 'diminished unison' and 'augmented unison' invervals

Fixed

  • Note::getPitchClass() now points to Note::getSoundingPitchClass()
  • Note::getPitchStep() now points to Note::getSoundingPitchStep()

[v1.4.8] - 2024-06-01

Improved

  • Remove ScoreCollection::get/setName
  • Add Score::getLoadedFilePath

[v1.4.7] - 2024-MM-DD

Improved

  • Improve Github Actions wheels.yml file
  • Add Score::haveAnacrusisMeasure()

Fixed

  • Auto fix XML scores that contais multiple part with the same name

[v1.4.6] - 2024-05-30

Improved

  • Update Pybind11 to v2.12.0
  • Update pybind11-stub-gen to v2.5.1
  • Update pybind11_json to v0.2.14
  • Update nlomann::json to v3.11.3

Fixed

  • Note::getScaleDegree() now works ok
  • Fix initial score clefs bug
  • Score::toFile() show the output XML file absolute path in the LOG

[v1.4.4] - 2023-11-14

Fixed

  • www.maialib.com DNS now point to the official maialib documentation
  • Fix all maialib examples located inside the python-tutorial folder

[v1.4.3] - 2023-09-20

API Changes

  • Chord::getSetharesPartialsDissonance() replaced by .getSetharesDyadsDissonance()
    • Wrapper: getSetharesPartialsDataFrame replaced by getSetharesDyadsDataFrame getSetharesDyadsDataFrame
    • Rename and add new columns

New Features

  • maiapy
    • .plotChordDyadsSetharesDissonanceHeatmap()

Fixed

  • ml.plotSetharesDissonanceCurve

[v1.4.2] - 2023-09-04

API Changes

  • Python Wrapper: Chord.getSetharesDissonanceValue() replaced by .getSetharesDissonance()

New Features

  • Chord::getSetharesDyadsDissonance()
    • Python Wrapper called: .getSetharesDyadsDataFrame()

Improved

  • maiapy
    • 'plotScoreSetharesDissonance':
      • Add 'numPartials', 'useMin', 'ampCallback' arguments
      • Add optional 'plotType' input argument: 'scatter' or 'line'
      • Add optional 'lineShape' input argument: 'linear' or 'spline'
      • Add line label for the 'mean value': Dissonance Mean

Fixed


[v1.4.1] - 2023-08-30

Improved

  • maiacore
    • Improve error message to help users to fix corrupted XML files
  • maiapy
    • plotScoreSetharesDissonance:
      • Add new input argument 'numPoints' to create a interpolated curve
      • Add a horizontal dashed line to show the 'dissonance mean' value

Fixed

  • maiapy
    • Fix plotScoreSetharesDissonance display title

[v1.4.0] - 2023-08-26

New Features

  • Note Class

    • .getHarmonicSpectrum()
  • Chord Class

    • .getHarmonicSpectrum()
    • .getSetharesDissonanceValue()
  • maiapy

    • Add ml.plotSetharesDissonanceCurve()
    • Add ml.plotScoreSetharesDissonance()

Improved

  • Note::getPitch() now returns the 'soundingPitch' and not the 'writtenPitch'
  • Note::getFrequency() now have 2 optional input arguments:
    • bool equalTemperament = true
    • float freqA4 = 440.0f

Fixed

  • Score class
    • Disable (comment) the methods: .countNotes() and .findPattern(). Future work.

[v1.3.0] - 2023-07-18

New Features

  • Key class: Add overload constructor that accepts a string as a key signature
  • Note class: Add .getScaleDegree(const Key&)

Improved

Fixed


[v1.2.0] - 2023-05-20

New Features

  • Chord::getCloseStackHarmonicComplexity()
  • Chord::getHarmonicDensity()

Improved

Fixed


[v1.1.0] - 2023-05-06

New Features

  • Chord Class

    • .getMeanFrequency()
    • .getMeanMidiValue()
    • .getMeanPitch()
    • .getMeanOfExtremesFrequency()
    • .getMeanOfExtremesMidiValue()
    • .getMeanOfExtremesPitch()
    • .getFrequencyStd()
    • .getMidiValueStd()
    • .getDegree()
    • .getRomanDegree()
  • New 'Key' Class

  • Maiapy functions

    • .plotScorePitchEnvelope()
    • .plotChordsNumberOfNotes()

Improved

  • Score::getChordsDataFrame() includes a new column 'key'
  • Python wrapper: Chord::repr() shows a list of soundingPitch notes
  • Chord class now have "for range" C++ iterators
  • Upgrade SqLiteCpp to v3.2.1

Fixed

  • Score::getChords() and .getChordsDataFrame() now works good
  • Score::info() shows the partName list correctly
  • Maialib plots that were broken, now works good
  • Beethoven 5th XML metadata: fix to Cm key

[v0.1.3] - 2023-04-05

New Features

  • Maiacore
    • Measure Class:
      • .getQuarterDuration, .getFilledQuarterDuration, .getFreeQuarterDuration
      • .getDurationTicks, .getFilledDurationTicks, .getFilledDurationTicks
    • Helper::int duration2Ticks()

Improved

  • Maiapy:
    • setScoreEditorApp() add special documentation for Mac OSX

Fixed

  • Score change clef in export XML file
  • Part::setIsPitched() now works correctly

[v0.1.2] - 2023-04-04

New Features

  • Chord::getIntervalsFromOriginalSortedNotes()

Improved

Fixed

  • All Chord methods that starts with .have + Interval name

[v0.1.1] - 2023-04-03

New Features

  • Maiacore:
    • Add: Part::get/setPartIndex(int)
  • Maiapy:
    • Add: setScoreEditorApp() and openScore() functions

Improved

  • To build maiacore now is necessary v3.26
  • Update GoogleTests to v1.13.0
  • Split Score::getChords() and Score::getChordsDataFrame() in two methods

Fixed

  • Maiacore:
    • Score::getPart(std::string&) method
    • Score::getPartsNames() now is the standard way to get the all the parts names
    • Measure::isEmpty()

[v0.0.19] - YYYY-MM-DD

API Changes

  • Nothing change

  • Add Duration enum class Python wrapper

  • Continuous Integration & Continuous Delivery through Github Actions to Pypi

  • Add Microsoft Visual Studio Compiler (MSVC) compatibility

  • Uses Clang++ as a default compiler on Windows when execute make

  • Helper Class:

    • Add .frequencies2cents() method
    • Add .freq2equalTemperament() method
  • Interval Class: Add .toCents() method

  • Chord Class: Add .toCents() methods

  • Add Score::getComposerName() method

Improved

  • Score::info() added a partName list
  • Score::instrumentFragmentation() replace partNumber to partNames
  • Add overload Note::setDuration(const float durationValue, const int lowerTimeSignatureValue = 4)
  • Install using pyproject.toml file
  • Better folder organization
  • Better headers declaration organization inside the *.cpp files

Fixed

  • Interval::isSimple() and Interval::isCompound()
  • Score::instrumentFragmentation: Call getComposerName() and getTitle()

[v0.0.17] - 2022-10-22

API Changes

  • Chord::getStackedHeaps() -> Chord::getStackDataFrame()

New Features

  • Interval Class: 50 new classification methods
  • Replace old log using std::cout by the new C++ macros for log data and exceptions:
    • LOG_DEBUG()
    • LOG_INFO()
    • LOG_WARN()
    • LOG_ERROR()
  • Chord Class
    • 50 new .haveXInterval() methods
    • .getCloseChord()
    • .isInRootPosition()
  • Add make validate: Includes CppCheck and CppLint

Improved

  • Chord Class
    • .getStackDataFrame() and .getStackHeaps(): Improve sorted heaps algorithm and DataFrame data types
  • Interval Class:
    • .isAscendant()
    • .isDescendant()

Fixed

  • Interval Class:
    • .getDiatonicInterval()
  • Chord::getRoot()

[v0.0.16] - 2022-10-03

API Changes

  • Chord::getStackedChord() -> Chord::getOpenStackChord()

New Features

  • Note Class:
    • .getFrequency()
    • .getEnharmonicPitch()
    • .toEnharmonicPitch()
    • .getEnharmonicPitches()
    • .getEnharmonicNote()
    • .getEnharmonicNotes()
  • Interval Class:
    • .setNotes()
    • .getPitchStepInterval()
    • .isMinorThird()
    • .isMajorThird()
    • .isDiminishedFifth()
    • .isPerfectFifth()
    • .isAugmentedFifth()
    • .isDiminishedSeventh()
    • .isMinorSeventh()
    • .isMajorSeventh()
    • .isMinorNinth()
    • .isMajorNinth()
    • .isPerfectEleventh()
    • .isSharpEleventh()
    • .isMinorThirdteenth()
    • .isMajorThirdteenth()
    • .isSimple()
    • .isCompound()
    • Oveload operator <
  • Helper Class:
    • .midiNote2octave()
    • .notes2intervals()
  • Chord Class:
    • .getOpenStackChord()
    • .getCloseStackChord()
    • .getOpenStackedNotes()
    • .getStackedHeaps()
    • .getOpenStackIntervals()
    • .getCloseStackIntervals()
    • .isSorted()
  • New Unit Tests:
    • Note::getEnharmonicPitch
    • Note::getEnharmonicPitches()
    • Note::getEnharmonicNotes()

Improved

  • Chord::stackInThirds() now can use enharmony to compute the stacked chord
  • Interval::getDiatonicSteps() added optional argument useSingleOctave
  • Chord::getMIDIIntervals() added optional argument firstNoteAsReference
  • Now every maiacore C++ exception message starts with [maiacore] prefix

Fixed

  • Note::Note() Prevent invalid user type octaves and out of range MIDI numbers

[v0.0.15] - 2022-09-07

New Features

  • Add maialib Python stubs

Improved

  • ScoreCollection class:
    • Add overloaded constructor: vector of directories paths
    • Add .merge(ScoreCollection& other) method
    • Add + operator overload to .merge(ScoreCollection& other) method
    • Add .getNumDirectories() method
    • Add .addDirectory() method
    • Add .setDirectoriesPaths() method
    • Add oveloaded methods:
      • .addScore(const std::string& filePath)
      • .addScore(const std::vector<std::string>& filePaths)
  • Replace python3 to python calls
  • Update Pybind11 to v2.10.0

Fixed

  • C++ & Python unit tests are now running without any errors:
    • make cpp-tests
    • make py-tests
    • make tests

[v0.0.14] - 2022-07-06

New Features

  • Add New ScoreCollection class
  • Add to all maialib classes:
    • Add Python __hash__ method
    • Add Python __sizeof__ method
  • Chord Class: Add getNotes() method

Improved

  • Update Pybind11 to v2.9.2
  • Better maialib objects representation inside the Python environment
  • Score::forEachNote() callback contains more input parameters

Fixed


[v0.0.13] - 2022-03-05

New Features

Improved

  • Chord class:
    • Add optional input argument: .getIntervals(bool fromRoot = false)
    • Add optional input argument: .getStackIntervals(bool fromRoot = false)
  • Trello: Cards and status updated

Fixed

  • Fix Score::setRepeat() default arguments
  • Fix Note::transpose() now works as expected

[v0.0.12] - 2022-03-04

New Features

  • Add Note::getDuration() as an alias to Note::getQuarterDuration()
  • Add Duration enum class
  • Add std::vector<std::string> Helper::midiNotes2pitches(int midiNote)
  • Add void Score::setRepeat(int measureStart, int measureEnd)
  • Chord class:
    • Add .getIntervals()
    • Add .getStackIntervals()

Improved

  • Note constructor now receives a Duration enum class as second parameter
  • Helper::midiNotes2pitch() if the user try to do something impossible, now this method returns an error

Fixed

  • Replace Chord::getIntervalNames() by Chord::getIntervals()

[v0.0.11] - 2022-02-16

New Features

  • Note class
    • Add constructor overload to receive MIDI Numbers
    • Add .transpose()
  • Add external Cherno Instrumentor profiler class. Load the output profile.json file inside chrome://tracing/

Improved

Fixed

  • Helper::midiNote2pitch()

[v0.0.10] - 2022-02-14

New Features

  • Add Makefile target: make validate
    • Run cppcheck static analyzer (optional dev dependency)
    • Run cpplint (optional dev dependency)
  • Add float Chord::getQuarterDuration()
  • Note class:
    • Add float getQuarterDuration()
    • Add std::string getType()
    • Add std::string getLongType()
    • Add std::string getShortType()
    • Add int getNumDots()
    • Add bool isDotted()
    • Add bool isDoubleDotted()

Improved

  • Note class: abstract the ticks integer values and replace it to rhythm figures as strings
  • Chord::getDuration() now returns a rhythm figure as string
  • Helper::noteType2ticks()
  • Helper::ticks2NoteType()

Fixed


[v0.0.9] - 2022-02-11

New Features

  • Add Chord::removeDuplicateNotes()

Improved

  • Score::getChords()
    • Add optional boolean config input argument: includeUnpitched
    • Add optional boolean config input argument: ``includeDuplicates`
    • Replace optional default values:
      • minStack: minimum value from 2 to 1
      • maxDuration: maximum value from quarter to maxima
  • Update Doxygen documentation
  • Update Trello status and cards

Fixed

  • Fix Score::getChords() input arguments: minDuration and maxDuration

[v0.0.8] - 2022-02-10

New Features

  • Add unit test to Helper::ticks2noteType()
  • Add Chord::sortNotes()
  • Measure Class
    • Add .divisionsPerQuarterNoteChanged()
    • Add .setIsDivisionsPerQuarterNoteChanged()

Improved

  • Performance: Add optimization flags to the build system
  • Performance: Score::getChords() add database indexes to speed up queries
  • Performance: Helper::ticks2noteType() add GCC extension: case range
  • Better code reading on Score::loadXML()
  • Move external utility functions to a new file called: utils.h

Fixed

  • Fix Score::getChords() to support multiple divisionsPerQuarterNote
  • Fix cpp-tests build
  • Move divisionsPerQuarterNote from Score to Measure class
  • Remove divisionsPerQuarterNote from Note class

[v0.0.7] - 2022-02-08

New Features

  • Rewrite: Score::getChords()
    • Mode Continuos
    • Mode Same Attack
  • Add Chord::getDurationTicks() method
  • Add external dependency: SQLiteCpp
  • Add BuildCache as a optional development tool

Improved

  • VS Code: Enable pretty-printing for gdb

Fixed

  • Helper::noteType2ticks() fix uppercase strings

[v0.0.6] - 2022-01-24

New Features

  • Add Measure::getNumber() and Measure::setNumber()

Improved

  • Score::toDataFrame()
    • Now return more data and columns for index and objects
    • Better performace
  • Python default print for: Part and Measure objects

Fixed


[v0.0.5] - 2022-01-22

New Features

  • Add Note::getStaff()
  • Add Score::getPart(const std::string& partName) overload
  • Add Score::getPartNames()
  • Add Score::toDataFrame()

Improved

  • make dev first uninstall the current installed Python module before start the new installation
  • Better README.md
  • Added a new test score: test_multiple_instruments4.musicxml

Fixed

  • Python wrapper: Helper::ticks2noteType() and Helper::noteType2ticks
  • tests-cpp: CMakeLists.txt to include maiacore library

[v0.0.4] - 2022-01-17

New Features

  • Part Class:
    • .getNumNotesOn()
    • .getNumNotesOff()
  • Measure Class:
    • .getNumNotesOn()
    • .getNumNotesOff()
    • .getNoteOff()
  • Note Class:
    • .isNoteOff()
  • New dist folder structure
  • Added maiapy to this project

Improved

  • Rename the compiled C++ output module from maialib to maiacore
  • Parallel build: dynamically count the max number of threads (make jobs)
  • Rename Measure::getNumElements() to .getNumNotes()
  • Rename Measure::getNote() to .getNoteOn()

Fixed


[v0.0.3] - 2022-01-13

New Features

Improved

  • Folder structure: Create a core folder separate the C++ side
  • Better README.md
  • Makefile: Added the new make dev - build and install the Python module
  • Update pybin11_json.hpp to v0.2.12

Fixed

  • Score::Score: Added a std::vector constructor overload
  • Makefile: Renamed make test to make tests

[v0.0.2] - 2022-01-10

New Features

  • New build system using make commands
  • Parallel build: make -j8
  • Created a test folder for store Python unit tests
  • Maialib cross-platform installer: make install
  • Created VS Code Tasks to build, install and debug code

Improved

  • Add full support to enharmonic pitch values to midiNote2pitch() function
  • Update pybind11 library to v2.9.0
  • Update nlohmann JSON library from v3.9.1 to v3.10.5
  • Better folder tree structure
  • Move pure maialib functions to Helper class static members
  • Move old orq_functions.cpp content to Score.cpp
  • Remove unnecessary files
  • Update doxygen file
  • Add make doc to the Makefile options
  • Moved old mxml_files folder to tests/xml_examples folder

Fixed

  • Score::forEachNote() now works as expected
  • midiNote2pitch() python wrapper default argument

[v0.0.1] - 2021-08-14

New Features

  • A optional callback function to the Chord::isTonal() method
  • Score::forEachNote() method

Improved

  • Update nlohmann::json library to the v3.9.1
  • Replace all size_t variables/arguments to int to improve performance
  • Score constructor now can receive a list of parts as a std::initializer_list
  • Score::getChords() include default arguments

Fixed

  • Score::setMetronomeMark() now works as expected
  • Note constructor works for rest
  • tutorial/create_note_chords.ipynb correct variable names
  • Measure::getNote() now return only notes and skip all rests
  • Measure::getElement() now return notes and rests