================================================================================ CHANGELOG ================================================================================ 0.4.2.2 Jul 3, 2009 * extra/MusicXML.py: MusicXML exporting functions by Javier Palanca. (started issue #63). ================================================================================ 0.4.2.1 Jul 2, 2009 * midi/SequencerObserver.py: A new easy to extend base class that can be used to observe Sequencer objects (closes issue #46). * midi/tunings.py: Added find_chord_fingering to StringTuning. (closes issue #70). * core/chords.py: Raise FormatError in from_shorthand if shorthand is invalid. * containers/Track.py: Added from_chords (started issue #74). ================================================================================ 0.4.2.0 Jul 2, 2009 * extra/tablature.py: New tablature module is complete (closes issue #5) ================================================================================ 0.4.1.7 Jul 1, 2009 * extra/tablature.py: Raise the proper exceptions (closes issue #65), added minimal unit test (closes issue #66), added attribute checks (closes issue #51) and better docs. * extra/tunings.py: Raising proper exceptions. Added unit tests (closes issue #52). * containers/Track.py: Added tuning attribute and set_tuning and get_tuning method (closes issue #51). ================================================================================ 0.4.1.6 Jun 29, 2009 * extra/tablature.py: Added documentation and license (closes issue #59) * extra/tunings.py: Added get_Note(string, fret) to StringTuning. Closes issue #54. * extra/tablature.py: Do `fret` and `string` attribute checks on Notes. Closes issue #64. ================================================================================ 0.4.1.5 Jun 28, 2009 * extra/tablature.py: Fixed bug in from_Suite, added add_headers (closes issue #62), mark beats in from_Bar (closes issue #60), added instrument and tuning description (closes issue #61). ================================================================================ 0.4.1.4 Jun 28, 2009 * extra/tablature.py: Added from_Track (closes issue #5), added get_qsize (closes issue #58), from_Composition (closes issue #56) and from_Suite (closes issue #57) * containers/Suite.py: Overloaded the + operator ================================================================================ 0.4.1.3 Jun 28, 2009 * extra/tablature.py: Added tablature module that can convert some of the mingus.containers to pretty ascii tablature. (issue #5) * extra/tunings.py: Sort and return fingerings on fitness. (Closes issue #53) ================================================================================ 0.4.1.2 Jun 28, 2009 * extra/tunings.py: Added find_fingering method to StringTuning class. Function returns a list of possible fingerings for NoteContainers. (Closes issue #48) * containers/Note.py: Enhanced constructor. Can now be called with already existing Note object (hardcopy) or an integer (conversion). * containers/Note.py: Added from_shorthand and to_shorthand which converts from and to traditional Helmhotz pitch notation. (Closes issue #49) ================================================================================ 0.4.1.1 Jun 28, 2009 * containers/Note.py: Added `measure` helper function to find out the difference in semitones between two Notes. * extra/tunings.py: New module that contains dozens of string tunings, a StringTuning class and some functions to search through them. ================================================================================ 0.4.1 Jun 26, 2009 * midi/Sequencer.py: Added an easily extendable general purpose sequencer that can play all the objects in mingus.containers (closes issue #27). * midi/fluidsynth.py: Made the fluidsynth sequencer use the new Sequencer module. (closes issue #43) * containers/NoteContainer.py: Added consonance and dissonance tests as methods. (closes issue #41) * extra/fft.py: A whole new module which can be used to find the frequencies and Notes of raw audio data. (closes issue #42) ================================================================================ 0.4.0.3 Jun 20, 2009 * core/intervals.py: Fixed bug in invert. * core/intervals.py: Added new functions `is_consonant`, `is_perfect_consonant`, `is_imperfect_consonant`, `is_dissonant` and documentation + unit tests. (closes issue #33). * containers/NoteContainer.py: Added from_progression_shorthand, from_interval_shorthand, from_chord_shorthand and some shortcuts to simplify a lot of use cases. (closes issue #29) ================================================================================ 0.4.0.2 Jun 5, 2009 * core/chords.py: Faster and short pattern matching functions in determine_triad. The rest should follow. * core/value.py: Changed instances of eight to eighth (closes #39) * core/diatonic.py: Fixed bug in diatonic.int_to_note (closes #40) ================================================================================ 0.4.0.1 Mar 2, 2009 * extra/LilyPond.py: Fixed bug in converting the duration to a valid LilyPond string in from_NoteContainer. Also added support for longa and breve along the way. Closed #37. * midi/pyFluidSynth.py: merged in pyFluidSynth 1.2.4 (closed #38) * midi/fluidsynth.py: Added destructor to MidiSequencer object to prevent errors when exiting. ================================================================================ 0.4 Mar 1, 2009 * Gone through and updated all the documentation and added tutorials for every finished module. Closed issue #22. ================================================================================ 0.3.9.2 Mar 1, 2009 * core/progressions.py: Factored out and added fixes for substitutions. Closed #21. * extra/LilyPond.py: Closed #34 and #35. Added fix for saving filenames with spaces in them, and converting octaves. Thanks to Stefan Huchler for reporting these. ================================================================================ 0.3.9.1 Feb 16, 2009 * MANIFEST.in: Now includes the CHANGELOG in the source distribution as suggested by Stefan Huchler. ================================================================================ 0.3.9.0 Jan 26, 2009 * extra/LilyPond.py: Using the new note value module to correctly print tuplets and dotted notes (issue #28). ================================================================================ 0.3.8.9 Jan 20, 2009 * containers/Note.py: Fix in transpose function. (http://groups.google.com/group/mingus-python/t/60cd407eeadc0b3e) * containers/NoteContainer.py: Return self after using the + and - operators. ================================================================================ 0.3.8.8 Jan 19, 2009 * midi/fluidsynth.py: Renamed default_bpm function argument to bpm. (http://groups.google.com/group/mingus-python/t/cb8784584330d42d) * containers/Note.py: Removed velocity and channel from dynamics. * core/progressions.py: Added substitute_harmonic. ================================================================================ 0.3.8.7 Jan 16, 2009 * midi/MidiTrack.py: Added support for bpm attribute in play_Bar. This means that tempo changes can now be saved as well. It is advised to have only one track containing tempo changes. ================================================================================ 0.3.8.6 Jan 16, 2009 * midi/fluidsynth.py: play_Bar and play_Bars (and consequently all the other play_ functions) will now change the tempo if the bpm attribute on a NoteContainer is set. I also rewrote play_Bars from scratch to be able to incorparate changing tempos. The method is a lot nicer now. (The younger me thought it was a good idea to use datetime functions instead of sleep.. -- coincidentally I probably needed a lot of sleep myself that time, so I missed out twice) ================================================================================ 0.3.8.5 Jan 16, 2009 * midi/fluidsynth.py: Fixed timing issue in MidiSequencer.play_Bars, so play_Bars, play_Tracks and play_Composition work again. All fluidsynth test pass again. ================================================================================ 0.3.8.4 Jan 16, 2009 * midi/fluidsynth.py: Fix in MidiSequencer.play_Track + added default_bpm arguments ================================================================================ 0.3.8.3 * build.sh: Updated build script. * core/value.py: Fix in docstring. ================================================================================ 0.3.8.2 * core/value.py: Finished value module for now by adding determine function ================================================================================ 0.3.8.1 * core/value.py: Added functions: quintuplet, septuplet and tuplet. ================================================================================ 0.3.8.0 * core/value.py: New module that will deal with all things concerning note value (duration). Currently the functions add, substract, dots and triplet are available as are the most used used constants. ================================================================================ 0.3.7.10 * midi/fluidsynth.py: Added optional driver argument to init. ================================================================================ 0.3.7.9 * midi/__init__.py: Disabled fluidsynth import ================================================================================ 0.3.7.8 * Another tiny fix in stop_Note. ================================================================================ 0.3.7.7 * Bugfix in fluidsynth.stop_Note and fluidsynth.MidiSequencer.stop_Note: removed the velocity argument and overwrites channel if Note.channel is set. (http://groups.google.com/group/mingus-python/t/177d0e7e83b5eaec) * Added fluidsynth.initialized to prevent initializing fluidsynth twice. (http://groups.google.com/group/mingus-python/t/e2b813d16c5e3b4b) ================================================================================ 0.3.7.6 * Added bank parameter to fluidsynth.set_instrument * Added program_reset call to get drums back. ================================================================================ 0.3.7.5 * Updated example applications to use new fluidsynth module. ================================================================================ 0.3.7.4 * Moved FluidSynth.py back to fluidsynth.py * Added pyFluidSynth module to mingus, which was written by Nathan Whitehead and available as separate package here: http://code.google.com/p/pygalaxy/wiki/pyFluidSynth * Removed enable_reverb and disable_reverb from fluidsynth. * Updated FluidSynth unittests. ================================================================================ 0.3.7.3 * Replaced fluidsynth.py and MidiSequencer.py by the new FluidSynth module which makes use of the pyFluidSynth bindings. This means that you don't have to start a server by hand anymore and that you can have more control over the audio and soundfonts, since fluidsynth gets loaded dynamically. A general purpose sequencer will be added later. * Rearranged some of the illogical function arguments. ================================================================================ 0.3.7.2 * Started on MusicXML implementation * Fixed bug in setup script found and reported by namin: http://groups.google.com/group/mingus-python/t/ace3be8d50061df0 ================================================================================ 0.3.7.1 * Added from_int to Note * Added self.bytes_read to the MidiFile parser to get better debugging. ================================================================================ 0.3.7.0 * Updated examples to use mingus.midi instead of mingus.extra ================================================================================ 0.3.6.5 * Fixed bug in parse_midi_event. Program change and channel aftertouch MIDI events only have one parameter instead of two. * Added an exception for illegal events. ================================================================================ 0.3.6.4 * Instruments get succesfully set when loading a midi file. * Last set tempo will get returned as well, until we have a better solution (eg. a track containing only tempo changes) * To set the channel and the velocity off a Note. Use Note.channel and Note.velocity instead of the dynamics dictionary. ================================================================================ 0.3.6.3 * Removed channel parameters from the MidiFileOut and MidiTrack functions. The channel a note should be played on can now be set in Note.dynamics["channel"] ================================================================================ 0.3.6.2 * Enhanced MIDI file parsing. ================================================================================ 0.3.6.1 * Parsing of a Midi file works in some cases. Still very bugy. * Remove is_valid_duration from Bar, because it prevents using floating point numbers, which you need when representing complex durations. ================================================================================ 0.3.6.0 * Initial check in of MidiFileIn ================================================================================ 0.3.5.6 * Moved the MidiFile class to MidiFileOut * Added more documentation to the MidiFileOut functions. ================================================================================ 0.3.5.5 * Killed bug in MidiTrack.play_Bar. Meters other than 4/4 will now also get saved correctly * Added set_track_name and track_name_event to MidiTrack ================================================================================ 0.3.5.4 * Added MidiEvents for better readability in MidiTrack. * Added support for different time signatures (set_meter and time_signature_event) * Support for key signatures meta events (set_key and key_signature_event) ================================================================================ 0.3.5.3 * Added controller events to MidiTrack. Changing of the instrument is now possible. ================================================================================ 0.3.5.2 * Added fixes for rests, tempo and NoteContainers in MidiTrack. ================================================================================ 0.3.5.1 * Removed print statements used for debugging in MidiFileOut * Removed debugging spaghetti code when run as script from MidiFileOut * Moved the fluidsynth module to the midi package where it belongs. ================================================================================