I have just updated my 'Combo' project with some significant enhancements. So, everybody who's using it for background music on their computers please download it again and listen to it:
http://scratch.mit.edu/projects/Jens/13629
Up until now 'Combo' let several instruments improvise harmonically to complex random chromatic chords, sounding rather 'jazzy'. The new version also features functional harmonic cadences and melodies made up of full diatonic gamuts, resulting in romantic 'song'-like sequences.
A new 'conductor' makes sure that all variations of jazzy and romantic sequences in combination with waltz and swing rhythms get played. That way 'Combo' can be run possibly forever without you having to listen to the same music twice (Of course, you can still control everything yourself).
'Combo', like most big projects, performs best in the offline presentation mode of Scratch. On fast computers it also runs reasonably well in the java player. On a slower machine notes may get delayed and rhythms out of sync.
I created 'Combo' as sort of 'Turing Test', to find out if I could make my computer produce random music that sounds as if it were composed by a human musician, without becoming overly weird or boring. While the underlying music thery is not exactly astrophysics, I wouldn't even know how to start a project like this in another programming language, let alone finish it (not even in Squeak Smalltalk). So, kudos to the Scratch-Team for making things simple and thus possible at all!
Offline
Nice work! Much more complex than my one-sprite composer
http://scratch.mit.edu/projects/kevin_karplus/3185
which just noodles around on a single chord.
Offline
This was already my favorite - you've made it even better .
Jens wrote:
A new 'conductor' makes sure that all variations of jazzy and romantic sequences in combination with waltz and swing rhythms get played. ...Of course, you can still control everything yourself.
It wasn't obvious to me how you can tell what type of rhythm you are setting, but maybe I'm missing something obvious. A great example of why a capability to add comments to the code would be nice.
Offline
Thanks Kevin and DrJim for you supportive comments.
DrJim wrote:
It wasn't obvious to me how you can tell what type of rhythm you are setting
Well, it's not exactly a rhythm you're setting, but you can switch between 3/4 ('waltz') and 4/4 ('swing') by clicking on the blinking dots on the lower right. Also, you can completely turn of measures by clicking on the metronome, which will result in a random duration (or 'measure') for each chord. To change the overall playing speed you can use the slider on the bottom. In the 'ordered-measure-mode' (metronome is on) this will directly change the speed, in the 'random-duration-mode' (metronome is off) this will set the boundaries for the random duration.
Over the weekend I have yet once more cleaned up some variables and scripts, and made a couple of minor adjustments to the melody-algorithms, which I have just now uploaded again. I consider the current version a 'final' release and promise not to fool around with it any more (at least, until I get some new ideas ;-).
DrJim wrote:
a capability to add comments to the code would be nice
I absolutely agree. It would make reading and understanding a lot of projects easier.
Offline
Jens wrote:
promise not to fool around with it any more (at least, until I get some new ideas ;-) .
In the unlikely event you don't come up with your own new ideas, the ability to input a non-random chord progression (like Easy Music Composer) would be nice.
Adding a drum track would also be interesting - didn't realize there wasn't one when I wrote my earlier message - and spent some time searching the text version of the code for "drum" (it is nice to have the text version available).
Offline
DrJim, thanks a lot for these suggestions.
User definable chord sequences and a drum track are, in fact, on my list of 'nice to haves'. But I'm probably going to put them into a new 'easy composing' project, so not to clog up 'Combo' even further. Also, I'm undecided as of now, weather to use some kind of a color stamping array mechanism or a (limited) set of sprites to drag around....
Offline
contrary to my above stated intention I just now added the feature to edit your own non-random chord progression.
Also, since this gradually makes 'Combo' something other than just a random music script I have made another project out of it, called 'Composer':
http://scratch.mit.edu/projects/Jens/26212
Offline
Your 'Composer' is realy great!
* Could you add a little bit more general information about "Chord Progressions" for beginners? (or a link to helpfull backround stuff)
* I like the examples you gave in your comment: Could you integrate them as "Standard songs" that you can choose of?
* It would be perfect if there was a possibility to play first the "main melody" of that songs and than continue with the random variations.
* Is your analogy to jigsaw puzzle bricks intended to be extended so you can use the bricks like that in some future version?
* There could be some other melody-instruments that use nearly the same algorithm than the existing, but have an other sound and are switched by random, to have more alternation.
Many times I thought your music-project is now at the limit of what you can do with Scratch, but there seems always a way to make it eaven better. So I'm looking foward to the next version!
Last edited by MartinWollenweber (2007-08-05 07:20:57)
Offline
Martin, I'm still in the process of fine-tuning the existing code, thus there will be (sooner or later) some improvements and variations concerning scales (e.g. the current minor scale is just an -3 offset major scale) and melody-algos (right now it's just up and down the ladder). Also, I'm planning to allow a lot more types of functional harmonic chords than now. Already composer/combo 'knows' a lot more chords than are used in the composer-mode.
If you're after some theory, you might check some wikipedia entries about harmony and functional harmony, although those informations aren't very understandable and only of limited use for someone who is actually trying to write software about it.
As far as examples and hard-coded melodies are concernded I've briefly considered doing something like it, but then decided against it, because of Scratch's complete lack of collections and file I/O. Instead I would have to kludge around with screen storage, and that's frankly not what I'm after.
I am, however, planning to extent the puzzle-analogy a lot further in the future. I would like to be able to have more 'block' types, and to actually drag them around and stick them together freely. Block types would not be restricted to chord functions but also to melody blocks and such. Again, due to Scratch's (current) inability to create classes, complex data types, or to merely dynamically create new sprites, I'm not sure if it makes sense to put a lot of effort into such enhancements....
It's quite easy to add other melody instruments, and I have some versions with a lot more... Also, I have created other instruments with different melody patterns and made exported sprites of them. It's quite fun. The best starting point is to take the vibraphone and remove all the 'diatonic' stuff, leaving just the 'harmonic' notes to be triggered. Then you can clone the result with stunning effects... Again, it would be nice, if Scratch supported dynamical sprite generation.....
Thanks for your supportive comments and inspiring suggestions!
Offline
Combo is really an impressive program - it also has the effect of pushing me to learn/relearn more about music theory just to appreciate what you are doing. The previous posting is a great example of that kind of motivation - I may figure it out in a day or so.
I think I'm going suggest a separate forum section for "Applications" - where things not really in the mainstream of code development could be discussed (and which people who weren't interested in could avoid). The other examples I can think of are the various people doing calculators, especially Kevin's RPN calculator and an earlier posting on "Photoshop-like" use of the various graphics effects. Anyone else have any thoughts or other examples?
All in all, it's rather amazing (and a credit to the Scratch team) that such a simple program can be the basis for serious application discussions - but it certainly does serve that function.
Offline
MartinWollenweber wrote:
There could be some other melody-instruments
Martin, I just posted a new project featuring exta instruments for 'Combo' and 'Composer':
http://scratch.mit.edu/projects/Jens/27996
You can export each instrument as sprite and import it into your own Combo version. These three additional instruments have algorithms that plug right into the harmony engine used by Combo and Composer, but are just a *little* different, so you might fool around and play with various instrument settings...
Offline