Ryth(M)aid + GUI

UPDATE [Oct. 22, 2003]: I'm, once again redoing this beast. This time i'll try to make it right [odd meters, event based system, portable [win32, linux, etc], support for different styles and instrumentation [via a plugin mechanism, which makes it easily extensible]]. If anyone is interested in getting involved, send me an email [mista.tapas@gmx.net]..

The author of tse3 has released a new version which fixes this bug. please use this version. grab it from here

I think i found out why many had problems compiling the app (unresolved symbol: TSE3::Clock::PPQN)... read the news on the Ryth(M)aid gui project page to get a solution. Here is a direct link to the relevant news

Hi. on this page you find Information to my rewrite of rythmaid. Like the name says, it has a gui now. First release available now. plays only drums and bass. Docs unexistant ;).. Feedback appreciated :) I have to mention, that when u decide to check out this program, please DON'T do "make install". Run it from the build dir, since it expects crucial files in current path and will create them if they are not found.

This is in no way a "clean" release.. And: it's built against latest tse3. Debian package won't work. i haven't checked other dists.. the configure script will not really check for the location of the header files..

here's a little ExampleMidiFile: another.mid

Link to project page: Ryth(M)aid gui project page

You might ask: "what the hell is this thing?". It is a little program which plays drums bass and piano to a given set of changes. The Program works best for swing jazz style. It is based on probabilities. Refer to the readme at the bottom for more info.

Or email me at: mista.tapas@gmx.net

Ah, i have to mention that it uises the wonderful TSE3 library for midi capabilities and gtk+ for the GUI.

finally a link to a page where you can hear me play the guitar (still from my old indows days using band in a box):

mista tapas' mysterious homepage

Here are some screenshots:

Main Window:

Midi parameters:

Song Parameters:

Here's the readme:

All Parts of this Program  are protected by the Gnu General Public 
License  GPL!! Check the file "License" for details..

Hi, this is a new version of Ryth(M)aid.. 

Q: What's that?
A: nuting really special. it's a little program that 
   generates a bass, drum, and piano track after
   a given set of changes

Q: What other lis do i need
A: only 2: gtk+ and tse3

Q: where do i get these?
A: 1. www.gtk.org
   3. http://tse3.sourceforge.net/index.html

it has a gui now! yeah!
..as u probably can clearly see ;)  It is indeed a complete rewrite 
with an, i hope at least, improved midi generating functionoality
it uses TSE3 now for midi handling. this is a very cool lib, which 
provides much more power than i need here. but anyways..

you can even export the song as midi files, if you don't have a
midi synth. there's midi players out there, which take a midi file 
as input, and render a wave file, which you can play with an
ordinary soundcard.. :)

check out "timidity".. it is a cool midifile player..

Ryth(M)Aid expects a file called "CHORDS" in the directory where 
you start it from.. in this file are the chord definitions.. if you
fidddle with it, be certain to not enter any whitespaces after or in
between lines. they'll confuse my poor little program..

when u use it, remember this program is really dumb, so it just de-
termines the possible note choices from the specified chord and ex-
tensions.. when parsing the chord name, it starts at the mostleft 
character in the chordname, andtreats it as  the root of the chord. 
if  there is an accidental on second pos in buffer, root is modified

then it takes the remaining string and compares it with every entry 
in the "chords" section of the CHORDS file from the BOTTOM UP. if it 
finds a match, it takes the specified scale degrees relative to the 
root as possible note choices and doesn't look further up in the file.. 

this means for example, that m7b5 is to be located further to the 
bottom than m7.. since it needs to be found first, otherwise the
m7 would match and the b5 interpreted as additional notechoice.
but m7b5 only contains a b5, no plain 5.. 

then the remaining string is compared to the "extensions" section of
the CHORDS file. the found extension scale degrees and the note 
choices from the chord type get OR'ed..  

this is repeated till either end of string or a
"/" is found. then the note after the "/" is considered to be the 
prefered note for a bass line on strong beats, but the old root
still exists as note choice. 

an example:


the parsing goes like this


the root


accidental for root, changing the root to db


first match from bottom in "chords" section in CHORDS file.


ORify note choices with extension b9 (first match from
bottom in "extensions" section


ORify note choices with extension #5


make g "root" of chord

the resulting note choices would be:

root db; notes: xx0x00x0x0x0 (these are aways halfsteps 
                              with the root on the left)


Db D E G A B

strings are always compared from left to right.

ah, i forgot to mention... Ryth(M)Aid does _not_ make any 
assumptions about note choices. if you just enter

cM7           dm7   g7    cM7

it will only use the notes CEGB on cM7, DFAC on dm7, and
GBDF on g7. to get more fancy sounds you have to specify 
more precisely:

cM7913        dm79  g7#59 cM7#11 cM7913

look at the CHORDS file to see more details and add your 
own chord types and extensions..

if you want more infos, have suggestion or bug reports
(many), feel free to send them to:


if you ever get to use this software i would like to
hear some recording of you using it and playing along :)
my mailbox accepts mp3 up to 3mb file size ;)

happy jammin!

-florian schmidt

Here come the reasons. why i haven't released any source yet ;) the TODO file:

- on startup init all song options from the appropriate spin buttons, to ensure
  integrity - ALMOST FIXED ;) i even load them from a file, but not all of them yet

- select loop  start  and loop end by clicking onto chord field

- issue with scrollpanel not resizing when chords are inserted.. - FIXED

- options dialog.. need to be smart modeled..

- TSE3 integration

- cleanup configure.in, so it gets tse3 right linked

- need to honour killing gui window with windowmanager.. do i need 
  to check for signals or what?

- need to correctly create basicSong.. Confusion about 4 bars = 8 beats or whatever ;) - FIXED

- tse3 version problems.. argh.. i'll use frshest.. - FIXED

- load chords file from $HOME/.rythmaid/ and check for success (give error message)

- add commandline switches for different audio systems

- set midiParameters from file. also be able to save them - FIXED

- fix tempo for values greater that 256 (tse3 limit) by reducing PPQN

- need to save stuff, even when killed by window manager

- make parameterload/save platform independant

- playback is too cpugreedy.. need to sleep a certain time while polling

- make mainwindow insensitiv while playback..

- oh oh.. mean bug in playback code.. song is too long starts from wrong bar.. etc. external measure 1 = beat[0] in basicSong

- cleartext for all note numbers and drum sounds

- make comma seperated entries available for one chord on every beat

- fix all kinds of error checking which is not happening right now ;) especially if saving or loading was succesfull. but this is much work

- plays min7 instead of maj7.. very weird..

SourceForge Logo