Revision history for MIDI-Drummer

0.7019 2026-09-08 10:58:40
    - Fix stupid typo and docs in general.

0.7018 2026-09-08 10:36:10
    - Add an ABSTRACT where it's missing.
    - Improve documentation.

0.7017 2026-09-08 10:05:28
    - Improve documentation.

0.7016 2026-09-07 11:10:55
    - Add the `swap_pat()` method to the Grooves module.

0.7015 2026-08-25 12:33:08
    - Make the shared file of groove patterns a settable attribute.

0.7014 2026-04-21 00:48:27
    - Rename 'cymbal' to 'crash'.

0.7013 2026-04-16 19:04:03
    - Replace "’" with "'" in the shared grooves file. :eyeroll:
    - Change the groove() method to acceptr hash-ref, instead of key/values.

0.7012 2026-04-16 08:20:15
    - Improve documentation.
    - Comment out debugging code.

0.7011 2026-04-15 22:47:03
    - Ok. It works on Windows now. Whew.
    - Fix documentation.

0.7010-TRIAL 2026-04-15 22:31:34
    - Handle newlines and \r correctly.

0.7009-TRIAL 2026-04-15 22:02:05
    - Improve documentation.
    - Drop Algorithm::Combinatorics like a hot potato.

0.7008-TRIAL 2026-04-15 21:22:18
    - Improve documentation.
    - Fixed groove datatype. Oops.
    - Fixed-up the tests and eg/grooves.pl, naturally.

0.7007-TRIAL 2026-04-15 20:29:15
    - Add all the grooves with a shared text file processed and fixed from the "Pocket Operator" PDF.
    - Change how grooves are processed.
    - Improve documentation.

0.7006 2026-04-08 10:29:14
    - Fix groove patterns again. :\

0.7005 2026-04-08 10:03:48
    - Fix code typo.
    - Return groove patterns correctly.

0.7004 2026-04-07 14:57:18
    - Improve documentation.
    - Add the eg/groove-patterns.pl example program.

0.7003 2026-04-07 12:44:16
    - Make the Grooves module return either a "raw" hash-ref of patterns or call the sync_patterns() method on a drummer object.

0.7002 2026-03-12 16:10:36
    - Code typo! Argh!

0.7001 2026-02-02 15:10:51
    - Update copyright!
    - Improve documentation.
    - Improve tests.

0.7000 2026-01-31 17:24:13
    - Add the Grooves module and grooves.pl example program.
    - Improve documentation.
    - Removed the ->play_with_* methods.

0.6012 2025-08-28 17:04:54
    - Make the file attribute read-write.

0.6011 2025-04-24 12:33:49
    - Bump Types::Music prereq version.

0.6010 2025-04-21 16:07:12
    - Fix undef score.

0.6009 2025-04-21 14:29:18
    - Fix BPM type.

0.6008 2025-04-02 11:32:50
    - Add and use MIDI and soundfont file types.

0.6007 2025-04-02 10:59:40
    - Use Types::Music.

0.6006 2025-03-31 00:35:50
    - Make Types::MIDI an explicit prereq.
    - Use the AWOL numeric types too.

0.6005 2025-03-29 23:33:24
    - Use Types::MIDI now.

0.6004 2025-03-28 11:27:39
    - Move Types::MIDI under the main module.

0.6003 2025-03-28 09:40:27
    - Tweeze documentation.
    - Add MIDI types.

0.6002 2025-03-25 17:05:23
    - Improve documentation.
    - Require Perl v5.24.
    - Move experimental import after Moo.

0.6001 2025-03-25 10:17:01
    - Tweak allowed syntax.

0.6000 2025-03-23 14:24:23
    - MJGardner refactored many many things. This is a modern module now. Woo! :D

0.5013 2025-02-13 20:04:06
    - Add the setup attribute.

0.5012 2025-02-11 16:11:52
    - Improve documentation.

0.5011 2025-02-09 12:55:04
    - Use the M::U::ticks() function instead of a hardcoded constant.

0.5010 2025-02-03 08:54:31
    - Simplify play_with_timidity().
    - Add play_with_fluidsynth().

0.5009 2025-01-30 07:26:40
    - Repaired and improved the tutorial POD more.

0.5008 2025-01-30 07:08:49
    - Added the eg/frank.pl program.
    - Repaired and improved the tutorial POD.

0.5007 2025-01-25 09:59:54
    - Update timidity system command.

0.5006 2025-01-23 14:35:56
    - Fix synopsis ...again.

0.5005 2025-01-22 20:06:15
    - Fix synopsis again.

0.5004 2025-01-21 12:04:23
    - Fix incorrect documentation! Argh

0.5003 2025-01-21 11:50:53
    - Fix metronome in the eg/metric-modulation program.
    - Fix synopsis and pattern() description.

0.5002 2025-01-21 09:23:36
    - Fix synopsis and prereq version.

0.5001 2025-01-21 08:59:30
    - Uhh...

0.5000 2025-01-21 08:48:36
    - Breaking change: Now metronome methods are named differently and use percentage swing.

0.4308 2025-01-20 18:43:56
    - Replace triplet swing with percentage swing.

0.4307 2025-01-16 22:23:50
    - Lose local author lib line in eg/.
    - Allow a cymbal to be specified to use by the metronome routines.

- 0.4306 ... Whoops!

0.4305 2023-11-22 11:30:36
    - Remove the accidental leftover dependency on CreatingRhythms.

0.4304 2023-11-22 11:27:51
    - Remove misleading channel setting from the Quickstart.

0.4303 2023-05-17 22:06:08
    - Yank Music::CreatingRhythms!

0.4302 2023-05-17 19:32:12
    - Pin M::U prereq version.

0.4301 2023-05-17 19:26:01
    - Update the Quickstart tutorial.

0.4300 2023-05-17 19:10:26
    - Add the timidity_cfg() and play_with_timidity() methods.
    - Improve documentation.

0.4208 2023-05-08 14:43:40
    - Odd. A cpan smoker failed because the DeBruijn module
      was not installed via Music::CreatingRhythms. ...Ok.

0.4207 2023-05-05 21:05:34
    - Accent the 1st note of a bar for count_in().

0.4206 2023-04-07 11:42:24
    - Fix a dumb typo - ugh!

0.4205 2023-04-07 00:29:20
    - Flesh-out the Advanced tutorial.

0.4204 2023-04-06 22:32:51
    - Flesh-out the Basics tutorial.

0.4203 2023-04-06 21:23:50
    - Flesh-out the Quickstart tutorial.

0.4202 2023-04-06 19:04:25
    - Begin to add a WIP tutorial.

0.4201 2023-03-27 15:35:48
    - Improve documentation.

0.4200 2023-03-27 15:26:17
    - Add the set_channel() and set_volume() methods.
    - Improve documentation.

0.4103 2023-03-09 06:23:20
    - Negate a pattern before deciding to skip it.
    - Do NOT set the chan_patch() in the pattern() method!

0.4102 2023-03-08 16:34:23
    - Improve the eg/patterns program.
    - Improve examples in documentation.

0.4101 2023-03-08 13:33:18
    - Improve examples in documentation.

0.4100 2023-03-08 12:26:32
    - Add the euclidean() method.
    - Improve documentation.
    - Improve the eg/patterns program.

0.4012 2022-11-25 14:00:33
    - Allow the patch to be set for the count_in() method.
    - Improve documentation.

0.4011 2022-11-20 15:26:04
    - Improve the eg/black-page program.

0.4010 2022-11-20 12:42:12
    - Remove the double-counting from the ->pattern method.

0.4009 2022-11-20 12:37:47
    - Fix duration size computation for beat counting.
    - Improve test.

0.4008 2022-11-20 10:34:59
    - Made beat counting automatic.
    - Improve documentation.

0.4007 2022-11-13 07:54:23
    - Allow flam() to rest for the grace-note.

0.4006 2022-11-13 06:47:25
    - Finish the eg/black-page program transcription.

0.4005 2022-11-08 11:31:21
    - Add the eg/black-page program.
    - Add an optional patch and accent value to the flam() method.
    - Improve documentation.

0.4004 2022-11-07 13:56:25
    - Improve tests!

0.4003 2022-11-04 12:39:07
    - Add the set_bpm() method.
    - Add the eg/metric-modulation program.

0.4002 2022-10-23 08:17:44
    - Add actual tests for add_fill().
    - Add * note to the not-yet-ready-for-primetime add_fill() method.
    - Avoid implicit imports.

0.4001 2022-05-30 12:11:34
    - Improve documentation.
    - Actually add the fill-replaced phrase to the score. Whoops :)

0.4000 2022-05-30 10:57:58
    - Add verbose mode finally.
    - Add the add_fill() method!

0.3003 2022-05-29 15:02:26
    - Compute the size and duration in the pattern() method.

0.3002 2022-05-28 22:02:12
    - Add the sync_patterns() method to execute the patterns() method for multiple voices.
    - Improve documentation.

0.3001 2022-05-28 17:07:43
    - Include the missing Math::Bezier in the prerequisites.

0.3000 2022-05-28 16:59:11
    - Pass the object itself to the callback in combinatorial().
    - Port the patterns() method from Syncopate::combinatorial().
    - Reduce the reverb!!

0.2101 2022-05-15 17:15:16
    - Refactor *::Syncopate to use attributes.
    - Remove syncopation SYNOPSIS leftover examples.

0.2100 2022-05-01 16:38:40
    - Move the syncopation logic to its own module.

0.2012 2022-05-01 11:04:22
    - Make patches plain numbers and not 'n42' type strings.

0.2011 2022-04-23 21:01:39
    - Remove post-derefs.

0.2010 2022-04-23 14:16:50
    - Fix time signature setting logic.
    - Add tests!
    - Improve documentation.

0.2009 2022-04-23 12:21:09
    - Use the M::U::set_time_signature() function instead of reinventing it.

0.2008 2022-04-23 11:38:53
    - Improve documentation.

0.2007 2022-04-23 09:12:21
    - Improve documentation.

0.2006 2022-04-23 08:15:53
    - Add a count option to combinatorial().
    - Skip the "zeroth" pattern.

0.2005 2022-04-22 12:10:28
    - Add missing imports!
    - Clean up syncopation lesson code again.

0.2004 2022-04-22 08:24:34
    - Improve documentation again.
    - Optimize code slightly.

0.2003 2022-04-22 08:04:33
    - Fix SEE ALSO links.
    - Improve documentation.

0.2002 2022-04-22 01:05:35
    - Clean up syncopation lesson code.
    - Remove use lib statements.

0.2001 2022-04-22 00:55:47
    - Fix a small but dumb typo.

0.2000 2022-04-22 00:51:08
    - Add a beat counter.
    - Add the ->steady & ->combinatorial methods.
    - Add eg/syncopation lessons from the SEE ALSO linked book.

0.1902 2022-01-19 12:13:04
    - Add missing closed_hh! Whoops

0.1901 2022-01-19 11:59:42
    - Add the ->metronome38 method.

0.1900 2022-01-04 19:00:57
    - Improve documentation.

0.1805 2021-05-03 22:04:18
    - Fix-up the eg/tomorrow-never-knows program.

0.1804 2021-05-03 21:42:38
    - Add the ->sync passthrough method.
    - Improve documentation.

0.1803 2021-04-09 23:00:00
    - Add the eg/tomorrow-never-knows program.
    - Use new Music::Duration values.

0.1802 2020-11-26 11:31:12
    - Don't import anything from MIDI::Simple.

0.1801 2020-11-10 16:33:21
    - Fix a tiny POD syntax issue!

0.1800 2020-11-10 16:23:22
    - Improve documentation.
    - Add a reverb attribute and control-change assignment.

0.1700 2020-10-24 09:56:50
    - Re-add the ability to change kits if using GM Level 2.

0.1605 2020-09-15 17:33:07
    - Improve documentation.
    - Simplify the ->metronome78 beat.

0.1604 2020-09-15 09:47:54
    - Fix the defaults for triplet 32nd, 64th, 128th durations.

0.1603 2020-09-15 09:01:25
    - Fix hi-hat patches in the eg/ programs.
    - Simplify the 5/8 metronome beat.

0.1602 2020-09-02 10:11:27
    - Improve documentation slightly again.

0.1601 2020-09-01 09:28:48
    - Fix Bézier variable names.
    - Add accessors for the acoustic and electric snare and bass.
    - Improve documentation slightly.

0.1600 2020-08-31 15:06:44
    - Add a Bézier curve option to the ->crescendo_roll.

0.1502 2020-08-31 07:59:16
    - Fix the ->crescendo_roll logic replacing start-span with min-max (or max-min).

0.1501 2020-08-30 13:26:09
    - Fix ->crescendo_roll documentation.

0.1500 2020-08-30 13:17:38
    - Add the ->crescendo_roll method.

0.1400 2020-08-23 12:21:18
    - Fix eg/reggae.
    - Add the ->flam method.

0.1300 2020-08-23 09:58:26
    - Improve documentation.
    - Improve ->roll and ->set_time_sig code.
    - Add 32nd, 64th and 128th Music::Duration specs.
    - Add the ->roll method.
    - Add the eg/crescendo program.
    - Improve eg/reggae.

0.1201 2020-08-22 15:26:43
    - Fix the eg/waltz beat figure.
    - Add a fill to the beginning of eg/reggae.
    - Simplify the ->accented_note method.

0.1200 2020-08-22 10:21:34
    - Add the eg/fool-in-the-rain example program.
    - Consolidate the metronomes into a single program.
    - Remove the unneeded effects: reverb, chorus and pan.
    - Add a 6/8 metronome beat.
    - Add all remaining named percussion patches.

0.1101 2020-08-17 09:34:01
    - Improve the halftime shuffle example program.
    - Add 7/4 and 7/8 metronomes.

0.1100 2020-08-14 17:19:40
    - Add the ->accent_note method.
    - Add an example program illustrating the James Brown, "Cold Sweat" groove.

0.1001 2020-08-11 07:02:59
    - Add eg/waltz. Why not?
    - Remove a mistaken hihat from ->metronome54.

0.1000 2020-08-10 12:34:49
    - Add dotted duration aliases.
    - Add the ->set_time_sig method.

0.0904 2020-08-08 08:42:46
    - Use the closed hi-hat for the 4/4 metronome.

0.0903 2020-08-08 08:26:24
    - Add 5/4 and 5/8 metronomes and an example program.
    - Add a halftime "Purdie" shuffle example program.

0.0902 2020-06-09 10:19:42
    - Improve documentation.
    - Add an eighth-note flag to ->metronome44.

0.0901 2020-06-08 16:47:53
    - Clean up code slightly.
    - Improve documentation slightly.

0.0900 2020-06-08 16:37:01
    - Improve and add to the eg/ programs.
    - Add the ->metronome44 alias to the ->metronome method.
    - Add the ->metronome34 method.
    - Improve documentation.

0.0803 2020-03-21 19:05:07
    - Do not document the ->BUILD method.

0.0802 2019-12-05 07:50:28
    - Improve documentation.

0.0801 2019-01-29 18:11:06
    - Fix weird syntax in the test that was making cpantesters unhappy.
    - Improve synopsis documentation.

0.0800 2019-01-27 02:36:16
    - Remove the unused "patch" attribute.

0.0700 2019-01-27 02:22:57
    - Fix time_signature according to the MIDI spec.

0.0601 2019-01-27 01:37:17
    - Improve documentation.
    - Fix the default bars in the count_in() method.

0.0600 2019-01-27 01:14:54
    - Use the BUILD() method and defaults instead of BUILDARGS().
    - Add tests.
    - Improve documentation.

0.05  2014-10-14
    - Rollback naive "swing"

0.0401 2014-10-14
    - Added missing POD for triplet durations

0.04  2014-10-14
    - Added rudimentary swing time (a la triplets)

0.03  2014-10-14
    - Added patch change command
    - Improved documentation

0.0201 2014-10-13
    - Made metronome() more accurately honor the time signature
    - Improved documentation

0.02  2014-10-12
    - Improved documentation
    - Fixed time signature handling

0.01  2014-10-08
    - Ported essential functionality from M::S::D
    - Minted by Dist::Zilla
