MIDI processing stuff I've been working on.
MIDI processing stuff I've been working on.
YouTube video here.
Kind of like a combination of various Peer machines, including some KoDream Improv type functionality (although that might not be apparent at first glance).
(Anybody else around here into Python + PyQT?)
Kind of like a combination of various Peer machines, including some KoDream Improv type functionality (although that might not be apparent at first glance).
(Anybody else around here into Python + PyQT?)
Re: MIDI processing stuff I've been working on.
marvelous !
i'm not sure what i'm looking at,never seen that before (beside from buzz)....
i'm not sure what i'm looking at,never seen that before (beside from buzz)....
- Reefer Sutherland
- Posts: 96
- Joined: Thu Nov 24, 2011 3:17 pm
- Contact:
Re: MIDI processing stuff I've been working on.
Looks interesting..
Anything you're going to release? Would love to play with it
Anything you're going to release? Would love to play with it
Re: MIDI processing stuff I've been working on.
Really cool stuff! Would love to try it out, if possible.
I can already hear Tinga running up the stairs.
I can already hear Tinga running up the stairs.
- mantratronic
- Posts: 296
- Joined: Mon Nov 21, 2011 7:23 pm
Re: MIDI processing stuff I've been working on.
That setup is looking better and better, very nice filtering/generation, and that last audio recording sounds like an entire band.
Re: MIDI processing stuff I've been working on.
Simplification of musical gesture is probably one of the most interesting subject for computer music, and Snowglobe's stuff is very effective.
In Buzz, relativion, accumulator, arpeggiator, peerscale and peerchord are the machines to do that, and for the human connection, omg!
Human body is an electromagnetic transmitter, and also music is dance...
@snowglobe I've on my computer the first version of your program, but i can't find it, a link?
In Buzz, relativion, accumulator, arpeggiator, peerscale and peerchord are the machines to do that, and for the human connection, omg!
Human body is an electromagnetic transmitter, and also music is dance...
@snowglobe I've on my computer the first version of your program, but i can't find it, a link?
Re: MIDI processing stuff I've been working on.
Thanks domtron and all for the comments.
@mantratronic: one-man-band capability was definitely a goal, and I was happy to see you mention the filtering options. I have put a lot of effort into those!
@ tinga: Are you looking for the old PyBuzz script? If so, I think this link should take you to the last version (which I haven't touched for about 7 months): https://sites.google.com/site/jumbleost ... ects=0&d=1
@ Evelon + Reefer: I'm glad you're interested to try this out, and I'd be 100% happy to share it, but before I bother to set up a download here are some things to know:
@mantratronic: one-man-band capability was definitely a goal, and I was happy to see you mention the filtering options. I have put a lot of effort into those!
@ tinga: Are you looking for the old PyBuzz script? If so, I think this link should take you to the last version (which I haven't touched for about 7 months): https://sites.google.com/site/jumbleost ... ects=0&d=1
@ Evelon + Reefer: I'm glad you're interested to try this out, and I'd be 100% happy to share it, but before I bother to set up a download here are some things to know:
- It's a python program, not an executable binary
Requires Python 2.7 and these packages: PyQt4, Pygame
It's alpha (at best), and will probably always be pretty math-nerdy / user unfriendly.
- Reefer Sutherland
- Posts: 96
- Joined: Thu Nov 24, 2011 3:17 pm
- Contact:
Re: MIDI processing stuff I've been working on.
Ok, I'll download and try...
Re: MIDI processing stuff I've been working on.
Crap, I should have mentioned that you should do the x86 versions of everything, not x64Reefer Sutherland wrote:Ok, I'll download and try...
Also, on one of my two machines the official Python Foundation 2.7 installation wouldn't work for some reason, so I ended up trying the ActiveState version, which worked fine.
Let me know how it goes.
- Reefer Sutherland
- Posts: 96
- Joined: Thu Nov 24, 2011 3:17 pm
- Contact:
Re: MIDI processing stuff I've been working on.
>>> _snowglobe wrote:Let me know how it goes.
What now?
Edit: Is there any help to be found on how to actually set this up?
PyGame was easy, but qt i don't even know where to start...
The readme isn't at all helpful, it just says type "configure.py", type "make", type "make install".
So.. I'm scratching my head here..
Re: MIDI processing stuff I've been working on.
There actually are binary installers for PyQt that will install the Qt stuff. That's the ticket, imo.Reefer Sutherland wrote:qt i don't even know where to start...
The readme isn't at all helpful, it just says type "configure.py", type "make", type "make install".
http://www.riverbankcomputing.co.uk/sof ... t/download
- Reefer Sutherland
- Posts: 96
- Joined: Thu Nov 24, 2011 3:17 pm
- Contact:
Re: MIDI processing stuff I've been working on.
Ah..
Well, I think I have it all installed now. Python 2.7, Qt and PyGame.
Not sure how I check if things are working, but the installers did their job without complaints.
Well, I think I have it all installed now. Python 2.7, Qt and PyGame.
Not sure how I check if things are working, but the installers did their job without complaints.
Re: MIDI processing stuff I've been working on.
Cool. Well, why don't you see if you can get this puppy to run, then.Reefer Sutherland wrote:Ah..
Well, I think I have it all installed now. Python 2.7, Qt and PyGame.
Not sure how I check if things are working, but the installers did their job without complaints.
midi matrix zip
unpack anywhere you like and double-click main.pyw (the first time you run it there will probably be a delay of a few seconds before you see the program window pop up).
Shoot me a PM if you run into trouble or have questions.
- Reefer Sutherland
- Posts: 96
- Joined: Thu Nov 24, 2011 3:17 pm
- Contact:
Re: MIDI processing stuff I've been working on.
Can't test it atm. but it started up, all looks well...
*excited*
*excited*
Re: MIDI processing stuff I've been working on.
This is mainly for Reefer, but I thought others might be interested too.
Understanding the Sequencer / Improvisor
----------------------------
Add a Scale Rectifier widget if you want to work with something besides chromatic (link them via dropdown menu)
----------------------------
If using QWERTY input, triggers will not be received until mouse is moved outside of the specification list box
----------------------------
Each line in the list box is a "sequence specification"
Each spec / line has to be enclosed by brackets. []
Inside the brackets you can have as many sequences as you like, enclosed in parentheses and separated by commas [ (), (), ... () ]
Inside each sequence you have two additional sets of parentheses separated by a comma
[ ((),()), ((),()), ... ((),()) ]
This is because each sequence has two parts: a note spec and timing spec:
[ ((note-spec),(timing-spec)), ((note-spec),(timing-spec)), ... ((note-spec),(timing-spec))]
----------------------------
Timing-spec is (delay, duration, hold)
delay = how long to wait until playing sequence
duration = how many beats does the entire note-spec sequence last
hold = how many beats until next sequence in spec starts (or until entire spec retriggers from beginning, if on last item in spec)
Everything is in terms of whole or part of a "beat" length of time that is approximately half a second (i.e. 120 BPM). So,
(0, 1, 1) = sequence begins immediately, sequence lasts a beat, next sequence (or retrigger) after one beat.
(.25, 2, 3.75) = sequence starts after .25 beat delay, sequence lasts 2 beats, next sequence (or retrigger) starts after 3.75 beats
Note that you can have an overlap situation where a sequence will still be playing when the next one starts (or when the whole spec is retriggered from the beginning).
(0, 2.32, 1.6) = sequence begins immediately, sequence lasts 2.32 beats, next sequence (or retrigger) starts after 1.6 beats
You can randomize any or all of the parts of the timing spec by enclosing a list of possible values in brackets.
([0, .5], [.5, 1, 2, 3], [.5, 4.2, 100]) = delay is 0 or .5 beat, sequence lasts .5, 1, 2, or 3 beats, time to next sequence (or retrigger of entire spec from beginning) is .5, 4.2, or 100 beats
----------------------------
Specification of which notes will play in a sequence can be absolute, or in-scale-steps relative to trigger note
Consider the parts of this note-spec example: ( 0, 'c4', None, [-2, '?'], set([0, 'c3', 5]) )
0 = play the trigger note
'c4' = play a 4th octave c
None = play nothing (i.e. gap)
[-2, '?'] = play either the note in the scale that is two steps down from trigger note, or play some random note in the scale (+/- 12 steps away from trigger note)
set([0, 'c3', 5]) = play a chord
----------------------------
Double-click a line to edit the spec
Right click to add or delete specs
New specs always start out as [((-2, 2), (0, 1, 1))]
----------------------------
Sequencing stops depending upon when trigger key is released. The important element to consider here is the last number in the timing specs for each sequence (i.e., the 'hold')
Consider this specification
[(seq1, (delay, duration, 4)), (seq2, (delay, duration, 3.5)), (seq3, (delay, duration, 10000))]
seq1 will always play its entire 4-beat sequence once a trigger is received
seq2 will only play its 3.5 - beat sequence if trigger note is still down after 4 beats (hold duration of seq1)
seq3 will only play its 10000 - beat (!) sequence if trigger is still down after 7.5 beats (hold duration for seq1 and seq2 combined)
Understanding the Sequencer / Improvisor
----------------------------
Add a Scale Rectifier widget if you want to work with something besides chromatic (link them via dropdown menu)
----------------------------
If using QWERTY input, triggers will not be received until mouse is moved outside of the specification list box
----------------------------
Each line in the list box is a "sequence specification"
Each spec / line has to be enclosed by brackets. []
Inside the brackets you can have as many sequences as you like, enclosed in parentheses and separated by commas [ (), (), ... () ]
Inside each sequence you have two additional sets of parentheses separated by a comma
[ ((),()), ((),()), ... ((),()) ]
This is because each sequence has two parts: a note spec and timing spec:
[ ((note-spec),(timing-spec)), ((note-spec),(timing-spec)), ... ((note-spec),(timing-spec))]
----------------------------
Timing-spec is (delay, duration, hold)
delay = how long to wait until playing sequence
duration = how many beats does the entire note-spec sequence last
hold = how many beats until next sequence in spec starts (or until entire spec retriggers from beginning, if on last item in spec)
Everything is in terms of whole or part of a "beat" length of time that is approximately half a second (i.e. 120 BPM). So,
(0, 1, 1) = sequence begins immediately, sequence lasts a beat, next sequence (or retrigger) after one beat.
(.25, 2, 3.75) = sequence starts after .25 beat delay, sequence lasts 2 beats, next sequence (or retrigger) starts after 3.75 beats
Note that you can have an overlap situation where a sequence will still be playing when the next one starts (or when the whole spec is retriggered from the beginning).
(0, 2.32, 1.6) = sequence begins immediately, sequence lasts 2.32 beats, next sequence (or retrigger) starts after 1.6 beats
You can randomize any or all of the parts of the timing spec by enclosing a list of possible values in brackets.
([0, .5], [.5, 1, 2, 3], [.5, 4.2, 100]) = delay is 0 or .5 beat, sequence lasts .5, 1, 2, or 3 beats, time to next sequence (or retrigger of entire spec from beginning) is .5, 4.2, or 100 beats
----------------------------
Specification of which notes will play in a sequence can be absolute, or in-scale-steps relative to trigger note
Consider the parts of this note-spec example: ( 0, 'c4', None, [-2, '?'], set([0, 'c3', 5]) )
0 = play the trigger note
'c4' = play a 4th octave c
None = play nothing (i.e. gap)
[-2, '?'] = play either the note in the scale that is two steps down from trigger note, or play some random note in the scale (+/- 12 steps away from trigger note)
set([0, 'c3', 5]) = play a chord
----------------------------
Double-click a line to edit the spec
Right click to add or delete specs
New specs always start out as [((-2, 2), (0, 1, 1))]
----------------------------
Sequencing stops depending upon when trigger key is released. The important element to consider here is the last number in the timing specs for each sequence (i.e., the 'hold')
Consider this specification
[(seq1, (delay, duration, 4)), (seq2, (delay, duration, 3.5)), (seq3, (delay, duration, 10000))]
seq1 will always play its entire 4-beat sequence once a trigger is received
seq2 will only play its 3.5 - beat sequence if trigger note is still down after 4 beats (hold duration of seq1)
seq3 will only play its 10000 - beat (!) sequence if trigger is still down after 7.5 beats (hold duration for seq1 and seq2 combined)
Last edited by snowglobe on Sat Mar 17, 2012 5:23 pm, edited 3 times in total.
Re: MIDI processing stuff I've been working on.
Forgot to add that you can also do probability within randomization brackets.
note spec example
([None, None, 0, None]) = .75 chance of no note being played, .25 chance of trigger note being played
timing spec example
([0, 0, 0, 0, 0, 0, 1], [4, 4, 4, 4, 4, 4, 1], 4) = pretty likely that there will be no delay and sequence will last 4 beats, and definitely next sequence (or spec retrig, if this is the last sequence in the spec) will start after 4 beats (assuming trigger is still held down at that time, of course).
note spec example
([None, None, 0, None]) = .75 chance of no note being played, .25 chance of trigger note being played
timing spec example
([0, 0, 0, 0, 0, 0, 1], [4, 4, 4, 4, 4, 4, 1], 4) = pretty likely that there will be no delay and sequence will last 4 beats, and definitely next sequence (or spec retrig, if this is the last sequence in the spec) will start after 4 beats (assuming trigger is still held down at that time, of course).
- magmavander
- Posts: 688
- Joined: Tue Nov 22, 2011 5:22 pm
- Location: France
- Contact:
Re: MIDI processing stuff I've been working on.
Your download link to midi matrix zip doent work...
It takes me to the download page but nothing happens even if I click on the direct link on it.
It takes me to the download page but nothing happens even if I click on the direct link on it.
Re: MIDI processing stuff I've been working on.
Since the link apparently worked for reefer I think we have one of those internet mysteries on our hands. Maybe try:magmavander wrote:Your download link to midi matrix zip doent work...
It takes me to the download page but nothing happens even if I click on the direct link on it.
https://sites.google.com/site/jumbleost ... do-rel.zip (deleting everything after the question mark)?
and if not that, then the base URL https://sites.google.com/site/jumbleostuff/bc/ and see if you can make any progress from there? (or maybe that's what you're saying you already tried ...)
p.s. I take it you already installed the necessary ingredients?
- mantratronic
- Posts: 296
- Joined: Mon Nov 21, 2011 7:23 pm
Re: MIDI processing stuff I've been working on.
i got it working...
this is awesome, very flexible, and i can see myself using this with ix split for added generatable madness
this is awesome, very flexible, and i can see myself using this with ix split for added generatable madness
Re: MIDI processing stuff I've been working on.
This thing rocks! Someone should write an install guide, because it takes a lot of inside knowledge to get up and running.
http://www.robotplanet.dk/f/buzzf/socia ... matrix.mp3 (the melody)
http://www.robotplanet.dk/f/buzzf/piano_thingie.mp3
http://www.robotplanet.dk/f/buzzf/socia ... matrix.mp3 (the melody)
http://www.robotplanet.dk/f/buzzf/piano_thingie.mp3