Releases: vmagnin/formidi
Releases · vmagnin/formidi
ForMIDI v0.4 "Forbidden Love"
Added
- The Meta event
set_time_signature()method and thetime_signatureoptional argument in thenew()method. - The MIDI event
pitch_bend()(demonstrated in tests). - In
src/music.f90:- most useful notes values, alongside
quarter_note, are now defined as Fortran parameters:whole_note,half_note,eighth_note,sixteenth_noteandthirty_second_note, expressed in MIDI ticks. - A
dotted()function returning the value of a dotted note. - Common note levels expressed as MIDI velocities, from
pppp_leveltoffff_level.
- most useful notes values, alongside
- The method
play_broken_chord()can now either accept avalueargument with the whole duration or avaluesarray argument containing the values for each note. example/motifs.f90: based on Dmitri Shostakovich's DSCH motif and BACH motif, with four musical tracks. It uses the newvaluesarray argument of the methodplay_broken_chord().- Unit tests for the function
variable_length_quantity(i), which was added to be called by the methodwrite_variable_length_quantity(self, i). - A FORD documentation: a project file
ford.ymland a workflow.github/workflows/ford.ymlto generate GitHub Pages.
Changed
- In the
Note_OFF()method, the velocity argument is now optional (64 is the default value). - The
ONandOFFMIDI constants are now defined as parameters, using their decimal value. - The
quarter_noteparameter is now 96 instead of 128 (96 has the advantage of being a multiple of 2 and 3). - Refactored automatic tests.
Fixed
- The last
ishft()in thewrite_variable_length_quantity()is now toward the right instead of left (fixes Issue #9).
ForMIDI v0.3 "Forbidden Planet"
Forbidden Planet (1956) is considered to be the first movie with an entire electronic soundtrack, composed by Bebe and Louis Barron.
Added
- An
example/README.mdfile presenting each example, with links to listen the OGG files. example/la_folia.f90: variations on La Folia, demonstrating the use of the methodplay_broken_chord().- A method
play_broken_chord(), using an array containing the intervals to play, was added in theMIDI_file_class. For the moment, each note has the same duration. - A method
get_name()returns the MIDI filename. src/utilities.f90: offers miscellaneous functions, likechecked_int8().- A
ROADMAP.mdfile. - A
logo/directory.
Changed
- OOP refactoring:
src/formidi.f90is nowMIDI_file_class.f90.- The API was simplified by renaming many methods and arguments, and by removing the need to use int8, int16 or int32 integers: the user will now just use default kind integers. More simplifications:
init_formidi()is now automatically called when you create a MIDI file.- The
size_posvariable is now automatically managed by the object. - The
tempoandcopyright(optional) are now passed to the constructionnew()method. - A
text_event(optional) can now be passed to thenew()andtrack_header()methods. - The track name is now passed to the
track_header()method. - The metadata track is now closed automatically at the end of the
new()method. - The subroutine
write_chord()(renamedplay_chord()) was moved in theMIDI_file_class. - The method
Note()was split in two:Note_ON()andNote_OFF().
- Examples:
src/demos.f90was removed and split intoexample/third_kind.f90,
example/canon.f90,example/blues.f90andexample/circle_of_fifths.f90. They can be run with thefpm run --examplecommand.- In examples, keyword argument lists are now generally used to improve understanding and comments were added.
- The multi-tracks examples
canon.f90,blues.f90andla_folia.f90now uses the control change Pan to obtain a stereo effect.
src/music.f90was splitted in two files:src/music.f90andsrc/music_common.f90which contain music theory elements common to the ForMIDI and ForSynth projects.- The function
get_MIDI_note()(renamedMIDI_note()) was moved insrc/music.f90. build.shimproved.
Removed
app/main.f90was removed.
Fixed
example/blues.f90: the note_OFF events of the drums were not correctly placed.