Several confusing/unhelpful errors shown due to an error in an input file have been improved. For example, if a pattern has the invalid name "4", the error message will now be
Pattern name '4' is not valid. It must be a value that will be parsed from YAML as a String., instead of
undefined method 'downcase' for 4:Integer.
Several error messages are improved to be more accurate or specific.
Bug fix: Songs can now use *.wav files with more than 2 channels. Previously, using a sound with more than 2 channels would cause a fatal
Invalid sample data array in AudioUtils.normalize()error.
Bug fix: If a sound is defined multiple times in a Kit, the final definition should be used as the winner. However, previously this did not occur if the earlier definition was for a composite sound. For example, with this Kit:
Kit: - sound: [sound1.wav, sound2.wav] - sound: sound3.wav
soundwill now be bound to
This version adds support for composite sounds. That is, sounds that are made by combining two or more sounds together. They are a more succinct way of writing songs where multiple tracks play the same rhythm.
Composite sounds can be defined in the Kit by putting multiple sound files in an array:
Kit: - bass: bass.wav # A traditional non-composite sound - combo_snare: [clap.wav, 808_snare.wav] # A composite sound
combo_snare sound above is a composite sound made by combining
808_snare.wav together. It can then be used in a pattern:
Verse: - bass: X.......X....... - combo_snare: ....X.......X...
This is equivalent to the following song:
Kit: - bass: bass.wav - clap: clap.wav - snare: 808_snare.wav Verse: - bass: X.......X....... - clap: ....X.......X... - snare: ....X.......X...
When using the
-s command-line option to write each track to its own *.wav file, each sub-sound in a composite sound will be written to its own file. For example, this song:
Kit: - combo_snare: [clap.wav, 808_snare.wav] Verse: - combo_snare: X...X...X...X...
...will be written to two different files,
combo_snare-808_snare.wav, when using the
Finally, when defining a track in a pattern, multiple sounds can be given in an array as a composite sound. Kit sounds and non-Kit sounds can be used together:
Kit: - bass: bass.wav - combo_snare: [clap.wav, 808_snare.wav] Verse: - [bass, combo_snare, other_sound.wav]: X...X...X...X...
This is a equivalent to:
Kit: - bass: bass.wav - clap: clap.wav - snare: 808_snare.wav Verse: - bass: X...X...X...X... - clap: X...X...X...X... - snare: X...X...X...X... - other_sound.wav: X...X...X...X...
This is primarily a modernization release, and contains some relatively small backwards incompatible changes.
- Track rhythms can now have spaces in them. For example,
X... .... X... ....is now a valid rhythm. Spaces are ignored, and don't affect the rhythm. For example,
X... X...is treated as the same rhythm as
- Wave files using
WAVEFORMATEXTENSIBLEformat can now be used, due to upgrading the WaveFile gem dependency to v0.8.1 behind the scenes.
- Installing the gem is now simpler, since it no longer requires installing the legacy
syckYAML parser via an extension.
Fixnum is deprecatedmessage is no longer shown when using Ruby 2.4
- Backwards incompatible changes:
- Song files containing a
Structuresection are no longer supported. A
Flowsection should be used instead. Support for the
Structuresection has been deprecated since v1.2.1 (released in 2011).
- Track rhythms can no longer start with a
|character. For example,
|X...X...is no longer a valid rhythm. However, bar lines are still allowed to appear elsewhere in the rhythm. For example,
X...X...|X...X...|is a valid rhythm. The reason for this change is that a rhythm starting with
|is parsed as a YAML scalar block now that Beats is using the Psych YAML library behind the scenes. The fact that the old Syck YAML library didn't treat rhythms starting with a
|as a YAML scalar block appears to have been a bug in Syck?
- Song files containing a
- The minimum supported Ruby version is now 1.9.3, instead of 1.8.7
- Songs can be swung (either by 8th note or 16th note), using the new
Swingdeclaration in the song header.
- Support for fractional tempos, such as 100.5
- Bug fix: When you run the
beatscommand with no arguments, it now displays the help screen, rather than an error message.
- Tracks that start with a
|no longer cause an error in Ruby 2.0 and above.
- Additional Wave file formats can now be used as samples, due to upgrading to WaveFile 0.6.0 behind the scenes: 24-bit PCM, 32-bit IEEE Float, 64-bit IEEE Float
- Bug fix: You can now use
~in sound file paths, and it will correctly expand to your home folder. (At least on UNIX OSes, I'm not sure if that works on Windows).
- The new
--pathoption allows setting the base path from which relative sound file paths are searched for.
- Bug fix: Compatibility issues with Windows. Thanks to Luis Lavena for mentioning the problem and how to fix it.
- Bug fix: Return the correct status code when Beats terminates, to improve scriptability.
- You can use the
|character to represent bar lines in a track rhythm. This is optional, but often makes longer rhythms easier to read.
Structuresection of the song header is now called
Flow. (You can still use
Structurefor now, but you'll get a warning).
- A pattern can contain multiple tracks that use the same sound. Previously, Beats would pick one of those tracks as the 'winner', and the other tracks wouldn't be played.
- Bug fix: A better error message is displayed if a sound file is in an unsupported format (such as MP3), or is not even a sound file.