Microtonal pathes or object
Does anybody know how I can find microtonal pathes or object?
Because I have no Idea how to do it. I especially equal divisions 13-tone, 15-tone, 24-tone e.t.c.
You will have to be alot more specific. Do you want microtonal synthesis? Transposition? MIDI?
As a general tip, just [scale] your input to 13, 15, 24, etc. and send this information to whatever instrument you are using. If you are using a MIDI instrument, then you will have to use a combination of pitchbend and noteout messages, and duplicate the instrument on various channels.
I did some studies a while back trying to emulate a couple of Harry Partch's instruments; it is pretty straightforward work.
Ah: although the forum programming may tell you that there has been an error, you ARE posting; that is why there are all these duplicates.
Hi!
If you are using MSP, here is a patch that should help you get going
with the basic stuff for equally distanced scales:
If you want to work on non-equally distanced scales, you should check
out Lobjects or funbuff and think of how to use them as lookup tables.
But probably the best route to go would be to investigate the Max
Microtone Tuner:
Merry Christmas to everyone, and in particular to the 74 elves!
Trond
Dimitris Lambrianos wrote:
> Does anybody know how I can find microtonal pathes or object?
>
> Because I have no Idea how to do it. I especially equal divisions 13-tone, 15-tone, 24-tone e.t.c.
> --
> http://www.dimitrislambrianos.com/
>Does anybody know how I can find microtonal pathes or object?
---------------------------------------
This is not set up for equal divisions of the octave but still may be of interest to you or others reading this thread. My friend Cooper made a java script which filters incoming MIDI data around certain chords. I modified it to filter the data around justly tuned scales and some scales from Indonesia and India (yes, entering the pitch multipliers was TEDIOUS!). First is a little patch to see it in action and second is the java script. Save the script as just_filter.js~ in your Max search path and then fire up the little patch. The script would be easy to modify to do other equal divisions of the octave or other microtoal scales....I'm planning on doing that someday but have not gotten around to it yet.
The scales are from here:
http://www.xs4all.nl/~huygensf/scala/
And you might want to check out this:
http://launch.groups.yahoo.com/group/16tone/
----patch-----
---java script---
inlets = 2;
outlets = 1;
var trans = 0.0;
var note = 0.0;
var type = "0.0";
function bang(x)
{
outlet(0., note);
}
function list(x)
{
type = x;
}
function transpose()
{
note = note + trans;
}
function msg_float(x)
{
switch (inlet)
{
case 0. : inlet_0(x);
break;
case 1. : inlet_1(x);
break;
}
}
function inlet_1(x)
{
trans = x;
}
function inlet_0(x)
{
note = x;
switch (type)
{
case "JustChrom" : justchrom_filter(x);
break;
case "JustChrom2" : justchrom2_filter(x);
break;
case "JustDia" : justdia_filter(x);
break;
case "GradyCentaur" : gradycentaur_filter(x);
break;
case "GradyHexany" : gradyhexany_filter(x);
break;
case "Tenney" : tenney_filter(x);
break;
case "Pelog" : pelog_filter(x);
break;
case "PelogA" : peloga_filter(x);
break;
case "PelogB" : pelogb_filter(x);
break;
case "PelogC" : pelogc_filter(x);
break;
case "IndianA" : indiana_filter(x);
break;
case "IndianB" : indianb_filter(x);
break;
case "IndianC" : indianc_filter(x);
break;
case "IndianD" : indiand_filter(x);
break;
case "IndianE" : indiane_filter(x);
break;
}
transpose();
bang();
}
function JustChrom()
{
type = "JustChrom";
}
function justchrom_filter(x)
{
var y = x;
var i = 0;
while ( x > 11)
{
x = x - 12;
i++;
}
if (x == 1)
x = 1.1173;
if (x == 2)
x = 2.3;
if (x == 3)
x = 3.156414;
if (x == 4)
x = 3.863136;
if (x == 5)
x = 4.98045;
if (x == 6)
x = 5.825123;
if (x == 7)
x = 7.019547;
if (x == 8)
x = 8.136864;
if (x == 9)
x = 8.84359;
if (x == 10)
x = 10.175964;
if (x == 11)
x = 10.88269;
y = x + (i * 12);
note = y;
}
function JustChrom2()
{
type = "JustChrom2";
}
function justchrom2_filter(x)
{
var y = x;
var i = 0;
while ( x > 11)
{
x = x - 12;
i++;
}
if (x == 1)
x = 0.706722;
if (x == 2)
x = 1.824039;
if (x == 3)
x = 2.668709;
if (x == 4)
x = 3.863136;
if (x == 5)
x = 4.98045;
if (x == 6)
x = 5.902237;
if (x == 7)
x = 7.019547;
if (x == 8)
x = 8.136864;
if (x == 9)
x = 9.331337;
if (x == 10)
x = 9.688255;
if (x == 11)
x = 11.293274;
y = x + (i * 12);
note = y;
}
function JustDia()
{
type = "JustDia";
}
function justdia_filter(x)
{
var y = x;
var i = 0;
while ( x > 11)
{
x = x - 12;
i++;
}
if (x < 2)
x = 0;
if (x > 1 && x < 4)
x = 2.3;
if (x > 3 && x < 5)
x = 3.863136;
if (x > 4 && x < 7)
x = 4.98045;
if (x > 6 && x < 9)
x = 7.019547;
if (x > 8 && x < 11)
x = 8.84359;
if (x > 10 && x < 12)
x = 10.88269;
y = x + (i * 12);
note = y;
}
function GradyCentaur()
{
type = "GradyCentaur";
}
function gradycentaur_filter(x)
{
var y = x;
var i = 0;
while ( x > 11)
{
x = x - 12;
i++;
}
if (x == 1)
x = 0.844672;
if (x == 2)
x = 2.0391;
if (x == 3)
x = 2.668711;
if (x == 4)
x = 3.863136;
if (x == 5)
x = 4.98045;
if (x == 6)
x = 5.825123;
if (x == 7)
x = 7.019547;
if (x == 8)
x = 7.649158;
if (x == 9)
x = 8.843589;
if (x == 10)
x = 9.688255;
if (x == 11)
x = 10.882689;
y = x + (i * 12);
note = y;
}
function GradyHexany()
{
type = "GradyHexany";
}
function gradyhexany_filter(x)
{
var y = x;
var i = 0;
while ( x > 11)
{
x = x - 12;
i++;
}
if (x == 1)
x = 1.018669;
if (x == 2)
x = 1.824039;
if (x == 3)
x = 2.668711;
if (x == 4)
x = 4.175083;
if (x == 5)
x = 5.36951;
if (x == 6)
x = 6.389941;
if (x == 7)
x = 7.019547;
if (x == 8)
x = 8.213981;
if (x == 9)
x = 9.720351;
if (x == 10)
x = 10.565021;
if (x == 11)
x = 11.37039;
y = x + (i * 12);
note = y;
}
function Tenney()
{
type = "Tenney";
}
function tenney_filter(x)
{
var y = x;
var i = 0;
while ( x > 11)
{
x = x - 12;
i++;
}
if (x == 1)
x = 1.049555;
if (x == 2)
x = 2.0391;
if (x == 3)
x = 2.975132;
if (x == 4)
x = 3.863136;
if (x == 5)
x = 4.707808;
if (x == 6)
x = 5.51318;
if (x == 7)
x = 7.019547;
if (x == 8)
x = 7.726275;
if (x == 9)
x = 8.405277;
if (x == 10)
x = 9.688255;
if (x == 11)
x = 9.688255;
y = x + (i * 12);
note = y;
}
function Pelog()
{
type = "Pelog";
}
function pelog_filter(x)
{
var y = x;
var i = 0;
while ( x > 11)
{
x = x - 12;
i++;
}
if (x < 2)
x = 0;
if (x > 1 && x < 4)
x = 2.312;
if (x > 3 && x < 5)
x = 3.156414;
if (x > 4 && x < 7)
x = 4.707808;
if (x > 6 && x < 9)
x = 7.019547;
if (x > 8 && x < 11)
x = 8.136864;
if (x > 10 && x < 12)
x = 9.68826;
y = x + (i * 12);
note = y;
}
function PelogA()
{
type = "PelogA";
}
function peloga_filter(x)
{
var y = x;
var i = 0;
while ( x > 11)
{
x = x - 12;
i++;
}
if (x < 2)
x = 0;
if (x > 1 && x < 4)
x = 1.22;
if (x > 3 && x < 5)
x = 2.71;
if (x > 4 && x < 7)
x = 5.71;
if (x > 6 && x < 9)
x = 6.77;
if (x > 8 && x < 11)
x = 7.85;
if (x > 10 && x < 12)
x = 9.47;
y = x + (i * 12);
note = y;
}
function PelogB()
{
type = "PelogB";
}
function pelogb_filter(x)
{
var y = x;
var i = 0;
while ( x > 11)
{
x = x - 12;
i++;
}
if (x < 2)
x = 0;
if (x > 1 && x < 4)
x = 1.18;
if (x > 3 && x < 5)
x = 2.53;
if (x > 4 && x < 7)
x = 5.25;
if (x > 6 && x < 9)
x = 6.59;
if (x > 8 && x < 11)
x = 7.72;
if (x > 10 && x < 12)
x = 9.45;
y = x + (i * 12);
note = y;
}
function PelogC()
{
type = "PelogC";
}
function pelogc_filter(x)
{
var y = x;
var i = 0;
while ( x > 11)
{
x = x - 12;
i++;
}
if (x < 2)
x = 0;
if (x > 1 && x < 4)
x = 1.17;
if (x > 3 && x < 5)
x = 2.62;
if (x > 4 && x < 7)
x = 5.08;
if (x > 6 && x < 9)
x = 6.68;
if (x > 8 && x < 11)
x = 7.79;
if (x > 10 && x < 12)
x = 9.45;
y = x + (i * 12);
note = y;
}
function IndianA()
{
type = "IndianA";
}
function indiana_filter(x)
{
var y = x;
var i = 0;
while ( x > 11)
{
x = x - 12;
i++;
}
if (x < 2)
x = 0;
if (x > 1 && x < 4)
x = 1.83;
if (x > 3 && x < 5)
x = 3.42;
if (x > 4 && x < 7)
x = 5.33;
if (x > 6 && x < 9)
x = 6.85;
if (x > 8 && x < 11)
x = 8.71;
if (x > 10 && x < 12)
x = 10.74;
y = x + (i * 12);
note = y;
}
function IndianB()
{
type = "IndianB";
}
function indianb_filter(x)
{
var y = x;
var i = 0;
while ( x > 11)
{
x = x - 12;
i++;
}
if (x < 2)
x = 0;
if (x > 1 && x < 4)
x = 1.83;
if (x > 3 && x < 5)
x = 2.71;
if (x > 4 && x < 7)
x = 5.34;
if (x > 6 && x < 9)
x = 6.85;
if (x > 8 && x < 11)
x = 8.71;
if (x > 10 && x < 12)
x = 9.83;
y = x + (i * 12);
note = y;
}
function IndianC()
{
type = "IndianC";
}
function indianc_filter(x)
{
var y = x;
var i = 0;
while ( x > 11)
{
x = x - 12;
i++;
}
if (x < 2)
x = 0;
if (x > 1 && x < 4)
x = 1.11;
if (x > 3 && x < 5)
x = 3.14;
if (x > 4 && x < 7)
x = 5.34;
if (x > 6 && x < 9)
x = 6.86;
if (x > 8 && x < 11)
x = 8.28;
if (x > 10 && x < 12)
x = 10.17;
y = x + (i * 12);
note = y;
}
function IndianD()
{
type = "IndianD";
}
function indiand_filter(x)
{
var y = x;
var i = 0;
while ( x > 11)
{
x = x - 12;
i++;
}
if (x < 2)
x = 0;
if (x > 1 && x < 4)
x = 1.74;
if (x > 3 && x < 5)
x = 3.5;
if (x > 4 && x < 7)
x = 4.77;
if (x > 6 && x < 9)
x = 6.97;
if (x > 8 && x < 11)
x = 9.08;
if (x > 10 && x < 12)
x = 10.7;
y = x + (i * 12);
note = y;
}
function IndianE()
{
type = "IndianE";
}
function indiane_filter(x)
{
var y = x;
var i = 0;
while ( x > 11)
{
x = x - 12;
i++;
}
if (x < 2)
x = 0;
if (x > 1 && x < 4)
x = 0.9;
if (x > 3 && x < 5)
x = 3.66;
if (x > 4 && x < 7)
x = 4.93;
if (x > 6 && x < 9)
x = 7.07;
if (x > 8 && x < 11)
x = 7.81;
if (x > 10 && x < 12)
x = 10.80;
y = x + (i * 12);
note = y;
}
I want microtonal synthesis.
Hi Dimitris,
Before providing some suggestions in terms of patching, just a
clarification on the terminology. 'Microtonal' refers to the pitch
set used, and has nothing inherent to do with any particular
synthesis method. Any synth patch that will take a direct float for
frequency can be used with whatever scale you want to use. Patches
that take a MIDI note number for determining frequency can be easily
modified to accept a float instead.
So, are you trying to control a synthesis patch within MaxMSP from an
external MIDI source, or does the control structure originate from
within MaxMSP as well? The answer will inform what strategy you might
need to use.
If you are controlling it via an external MIDI controller (via
[notein], for example) a very simple (though perhaps not very
elegant) method would simply create a table of incoming MIDI note
numbers mapped to the desired frequencies; take a look at [table],
[coll], etc. You'd feed the output from the [notein] into the
[table], and the output from the [table] would be the corresponding
frequency to pass on to the synth patch. If you are using less or
more than 12 tones per octave, you'll need to decide on some way of
mapping physical keys of a standard keyboard onto your 'non-standard'
octave.
If you are creating the control structure within MaxMSP, it's a
simple matter of creating a formula that gives you the frequencies
you desire. There are a number of resources for tuning theory that
discuss formulas for N-tet (equal temperament of N pitches per
octave), just intonation, and numerous other schemes. Have a look at
the following texts, and online sources for some ideas.
William A. Sethares, Tuning, Timbre, Spectrum, Scale, 2nd Ed.,
Springer Verlag 2004
David B. Doty, The Just Intonation Primer, 3rd Ed., Other Music, Inc.
2002
Harry Partch, Genesis of a Music, 2nd Ed., Da Capo 1974
For additional suggested articles, etc. take a look at the reading
list and handouts on the website for my tuning course:
AppliedTuningSystems.html>
Larry Polansky also has some interesting papers and unpublished notes
on his website regarding intonation theory:
follow links to 'miscellaneous
articles, writings' then 'small or unpublished writings' and then
'music related talks' and look at the links for 'Optimal Well
Temperament' 'Two Talks' and 'Harmony Primer'
Good luck, and have fun.
Steven
On Dec 24, 2006, at 1:21 PM, Dimitris Lambrianos wrote:
>
> I want microtonal synthesis.
> --
> http://www.dimitrislambrianos.com/
----
Steven M. Miller
Associate Professor of Contemporary Music
College of Santa Fe
Contemporary Music Program
1600 St. Michaels Drive
Santa Fe NM 87505
http://pubweb.csf.edu/~smill
(505) 473-6197
~~~~~~~~~~~~~~~~~~~~~
SFIFEM
Atrium Sound Space
OVOS
*opportunities for composers & sound artists*
>I want microtonal synthesis.
-----------------------------
I guess I should have asked you questions about what you meant by "microtonal pathes or object" before posting. I just thought that it could be of use in a synth you may have already built.
You want synthesis, well you got it. Poof! Now it's a synth, hehe. :) Mayhaps someone else could think this is interesting? I duuno, just trying to share.
Happy Holidays to everyone -- peace, hope, good stuff...
brad
Hi Lewis,
What would be nice is a javascript to directly parse the sala tuning
files to fill-in a coll.
Would you have a such js to share?
Best wishes,
Philippe
--
>> Does anybody know how I can find microtonal patches or object?
> ---------------------------------------
>
> This is not set up for equal divisions of the octave but still may
> be of interest to you or others reading this thread. My friend
> Cooper made a java script which filters incoming MIDI data around
> certain chords. I modified it to filter the data around justly
> tuned scales and some scales from Indonesia and India (yes,
> entering the pitch multipliers was TEDIOUS!). First is a little
> patch to see it in action and second is the java script. Save the
> script as just_filter.js~ in your Max search path and then fire up
> the little patch. The script would be easy to modify to do other
> equal divisions of the octave or other microtoal scales....I'm
> planning on doing that someday but have not gotten around to it yet.
>
> The scales are from here:
> http://www.xs4all.nl/~huygensf/scala/
>
> And you might want to check out this:
> http://launch.groups.yahoo.com/group/16tone/
Guys do you have a patch beacouse I am not very familiar with Java script.
Interesting topic.
The quicktime DLS synth accepts floating point midi data.. I used it with the ac toolbox and it works great. Otherwise stick to frequency for microtonal synthesis.
Very cute, thanks!
Hi Alexander,
> The quicktime DLS synth accepts floating point midi data.. I used
> it with the ac toolbox and it works great.
Would you share a patcher to illustrate the 'floating point midi data' ?
Thanks ;-)
Best wishes,
Philippe
Philippe,
I wish, that would be a very useful script. I don't really know java myself, a friend wrote that script and I just modified it. I've been meaning to learn, so this could be a good project to work toward. The scala data comes as whole number ratios, cents from the tonic and decimal ratios. Any script would have to know how to deal with all 3. I wonder how much trickier that would make it? Good idea!
Lewis
Quote: Philippe Gruchet wrote on Sun, 24 December 2006 18:30
----------------------------------------------------
> Hi Lewis,
>
> What would be nice is a javascript to directly parse the sala tuning
> files to fill-in a coll.
> Would you have a such js to share?
>
> Best wishes,
> Philippe
Hey Dimitris,
If you open a new Max patch, instantiate the js object, double click it and then paste the script part of my first message and save it as just_filter.js~ and then create the Max patch from the text you can see it in action. I don't know java either but it wasn't that hard to figure out how to edit the script to do what I wanted. Making it 13, 15 or 24 TET will require more tweaking though so it may be too big of a pain for your needs. :)
Lewis
Quote: dimitris108 wrote on Mon, 25 December 2006 00:38
----------------------------------------------------
> Guys do you have a patch beacouse I am not very familiar with Java script.
----------------------------------------------------
It doesnt work. Please can you send me the patch?
The script gives me errors.
No problem, try this. I hope it works!
Quote: dimitris108 wrote on Mon, 25 December 2006 10:29
----------------------------------------------------
> It doesnt work. Please can you send me the patch?
> The script gives me errors.
>
----------------------------------------------------
I have to say thanks to you this is great. I also went to your website and I download some spectacular pathes.
I look in details and I will tel you if I have any questions.
Do you have something that can do equal divisions like 13,14,15,22,23,24,31 e.t.c?
"ain't no mountain high enough skronk remix" video = hilariously
brilliant! Thanks for making my day.
Vlad
Vlad Spears
Urbi et orbi
Quote: dimitris108 wrote on Mon, 25 December 2006 14:24
----------------------------------------------------
> Do you have something that can do equal divisions like 13,14,15,22,23,24,31 e.t.c?
----------------------------------------------------
Try "oct.div: abstraction, that divides an octave to any amount of tones (output==frequency)"
by Assif Tsahar &Klaus Filip, in the susers pages at Cycling:
Best wishes,
Philippe
Quote: dimitris108 wrote on Mon, 25 December 2006 13:24
----------------------------------------------------
> Do you have something that can do equal divisions like 13,14,15,22,23,24,31 e.t.c?
----------------------------------------------------
I'm not a fan of equal temp in general. If I'm going to leave 12TET behind I'd rather rock some just intonation. But none the less, here is a little patch which will give you any division of the octave. No java, just vanilla Max (+ a little MSP to hear the tones).
I'd love to see a more elegant solution as I realize that this is probably more cumbersome than it needs to be. Merry happy!
Quote: spears@2secondfuse.com wrote on Mon, 25 December 2006 14:58
----------------------------------------------------
> "ain't no mountain high enough skronk remix" video = hilariously
> brilliant! Thanks for making my day.
>
----------------------------------------------------
Awesome, thank YOU so much. It's really nice to hear feedback!!!
Quote: Lewis wrote on Mon, 25 December 2006 18:15
----------------------------------------------------
>
> I'd love to see a more elegant solution as I realize that this is probably more cumbersome than it needs to be. Merry happy!
>
----------------------------------------------------
Too funny. I just realized that Trond's initial post (not to mention the oct.div linked by Philippe) is indeed a more elegant solution to this same problem. Oh well, I learned something doing it myself anyway which seems to be a big part of what makes Max fun for me. Sorry for clogging up inboxes across the globe.
I'll just shut up for now.... :)
Lewis
Quote: Lewis wrote on Mon, 25 December 2006 10:47
----------------------------------------------------
> I wish, that would be a very useful script. I don't really know java myself, a friend wrote that script and I just modified it. I've been meaning to learn, so this could be a good project to work toward. The scala data comes as whole number ratios, cents from the tonic and decimal ratios. Any script would have to know how to deal with all 3. I wonder how much trickier that would make it? Good idea!
----------------------------------------------------
Yes, indeed ;-)
I'll try to bring the most of js code I'm able to find.
(Maybe, this thread should then move to the Javascript part of this forum.)
Unless the ADA source code of Scala to read scl files could be useful for you. (I'm not familiar with language.)
There's also Mark Henning C++ code to parse the AnaMark / VAZ 1.5 Plus-compatible tuning files (.tun as used in LinPlug synths, Cameleon5000, etc.):
Currently, I'm using "Max Magic Microtuner" on Mac to generate coll contents dedicated to replace the mtof object. A *very* cool feature!
"Max Magic Microtuner" website at Yahoo only:
Bye,
Philippe
> There's also Mark Henning C++ code to parse
> the AnaMark / VAZ 1.5 Plus-compatible tuning files
----------------------------------------------------
Also provided in Delphi.
Quote: Lewis wrote on Mon, 25 December 2006 19:26
----------------------------------------------------
> Sorry for clogging up inboxes across the globe.
And it's +8 hours here, hehe
> I'll just shut up for now.... :)
No Lewis, you're the welcome with all your posts and your joy of sharing your patchers!
Bye'n Best ;-)
Philippe
Quote: Dayton wrote on Sun, 24 December 2006 01:26
> As a general tip, just [scale] your input to 13, 15,
> 24, etc. and send this information to whatever instrument
> you are using.
if only it would be that easy ... :)
Quote: Roman Thilenius wrote on Mon, 25 December 2006 20:17
----------------------------------------------------
>
> Quote: Dayton wrote on Sun, 24 December 2006 01:26
>
> > As a general tip, just [scale] your input to 13, 15,
> > 24, etc. and send this information to whatever instrument
> > you are using.
>
>
> if only it would be that easy ... :)
though, now he said he wants synthesis.
in that case he could indeed go:
note number input (for example from midi data)
-> [* 12.]
-> [/ 13.]
-> [mtof]
to produce a 13 tone scale.
but of course this way middle C is not middle C,
and even notenumber 1 is now notenumber 0.92456673 ...
-110
Guys just post the patch beacuase sometimes what you are saying does not work or it is difficult for me to understand.
Ragarding microtonal synthesis there is no something like that, there are only microtonal intervals.
Anyway I need microtonal scales not in 12-tone scale but equal division, unequal will be even more interesting.
Dimitris,
> Guys just post the patch because sometimes what you are saying does
> not work or it is difficult for me to understand.
> Regarding microtonal synthesis there is no something like that,
> there are only microtonal intervals.
> Anyway I need microtonal scales not in 12-tone scale but equal
> division, unequal will be even more interesting.
In the following patcher, choose the 'harmonic steps' (the number of
pitch per octave) and play with the float number box.
By clicking on its left part, you'll hear each pitch and in its right
part, the cents.
Copy and in Max, select the "New from Clipboard" command from the
File menu:
Can you please send me the patch?
Here it is, with equal and unequal octave divisions.
Enjoy!
Philippe
Thank you Phillipe.
How can I connect this to mtof and the keyboard so it will be more useful?
If you have the patch ready it will help even more.
And again thank you very much.
No need to put a mtof object in this example.
The mtof is the following expression:
[expr (440. * exp(.057762265 * ($f1 - 69.)));]
And replaced here with:
[expr exp(ln(2)/$f2 * $f1)*$i3]
look inside [p oct.div 72 440] and you'll understand.
A second patcher with a keyboard you can replace with a [notein] object of course.
Ok I got it.
Thanks for the email
mit freundlichen Grüßen,
Matthias Schneider-Hollek
digital masters
c/o Musik der Jahrhunderte
Siemensstr. 13
7o469 Stuttgart
studio: xx-49-711-6o7o78o
mobil: xx-49-177-2o57o58
www.hollek.de
www.digitalmasters.de
www.durbanpoison.info
Am 26.12.2006 um 04:58 schrieb Dimitris Lambrianos:
>
> Guys just post the patch beacuase sometimes what you are saying
> does not work or it is difficult for me to understand.
>
> Ragarding microtonal synthesis there is no something like that,
> there are only microtonal intervals.
>
> Anyway I need microtonal scales not in 12-tone scale but equal
> division, unequal will be even more interesting.
> --
> http://www.dimitrislambrianos.com/
My MaxMSP-based application Quintet.net (www.quintet.net) is capable
of playback of any microtonal scale. (Victor Cerullo's Magic
Microtuner application has an option to export Scala tunings in a
format that can be understood by Quintet.net.)
Playback is either via
1. built-in sampler (a bank editor is part of the release)
2. MIDI/DLS instruments
3. vst plugins or
4. custom-designed plugins (audioextensions) in Quintet.net own
plugin format (basically MaxMSP patches).
What sets Quintet.net apart from other microtonal applications is
that it features real-time notation in 8th-tone approximation. In
addition, a number processes can be used to alter the musical input
(e.g. harmonization) which in turn can be send through a filter to
approximate added pitches to the selected tuning or to other tunings;
for instance, a motif in Bohlen-Pierce tuning can be approximated to
22TET or Harry Partch's non-equidistant, just tuning.
Quintet.net can be used as a standalone microtonal sampler but also
as a multimedia performance environment in which 5 players, one
conductor and any number of VJs can interact over local networks or
the Internet.
Caveat: Quintet.net is not an environment which one can figure out in
a two-minute session, but once you delve into it you'll probably
realize its potential which is built on the endless possibilities of
MaxMSP.
Georg
On Dec 26, 2006, at 3:14 PM, Dimitris Lambrianos wrote:
>
> Ok I got it.
> Thanks for the email
> --
> http://www.dimitrislambrianos.com/
Hi Georg!
Are you using the mtof and/or coll export features of MMMicrotuner, or do you directly load Scala files as scl, mtx, tun, etc. file formats?
Thanks,
Philippe
I have to buy MM Microtuner.
Can I import file into Max/Msp from Microtuner?
Yes. This software allows to export custom 'mtof' objects built from the current frequencies table, or text files in frequencies or cents for the coll object. Such tables for coll have then to be 'read' from coll to be loaded (see the coll features).
Try both and find by yourself the most useful way of working for your own project.
Bye,
Philippe
Thank you for the information I will definately buy this software now.
Phillipe, Lewis you are very helpful to me.
Quote: dimitris108 wrote on Wed, 27 December 2006 08:46
----------------------------------------------------
> Thank you for the information I will definitely buy this software now.
----------------------------------------------------
I frequently work with the author, Victor Cerullo.
Subscribe to its group at Yahoo for all bug repports and feature requests, or any other question.
Also, take a look at the Files repertory. You'll find several useful archives, pdf, etc.
Bye,
Philippe
Quote: dimitris108 wrote on Wed, 27 December 2006 08:58
----------------------------------------------------
> Philippe, Lewis you are very helpful to me.
----------------------------------------------------
Kind words!
So, you're welcome ;-)
HI Philippe,
I use one of the coll export formats, which Victor implemented on my
request.
Regards,
Georg
On Dec 27, 2006, at 5:44 AM, Philippe Gruchet wrote:
>
> Hi Georg!
>
> Are you using the mtof and/or coll export features of MMMicrotuner,
> or do you directly load Scala files as scl, mtx, tun, etc. file
> formats?
>
> Thanks,
> Philippe
>> Are you using the mtof and/or coll export features of
>> MMMicrotuner, or do you directly load Scala files as scl, mtx,
>> tun, etc. file formats?
> I use one of the coll export formats, which Victor implemented on
> my request.
Oh yes, I remember now from your post about the Ircam cents.
Thanks!
With munger you can do this using the scale-message by creating a pitch-sieve ( see munger-help file) I made a small utility some years ago. You will need the Ltocoll-object from Peter Elsea's L-objects.
so hope this helps :
_Andreas
wow! thanks a lot for this.
On Wed, Jan 28, 2009 at 4:49 PM, Andreas Breitscheid <
abreitscheid@sonicscene.de> wrote:
>
> With munger you can do this using the scale-message by creating a
> pitch-sieve ( see munger-help file) I made a small utility some years ago.
> You will need the Ltocoll-object from Peter Elsea's L-objects.
> so hope this helps :
> max v2;
> #N vpatcher 10 45 1151 767;
> #P origin 6 19;
> #P number 932 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 976 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 1020 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 1064 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 712 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 756 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 800 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 844 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 888 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 492 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 536 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 580 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 624 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 668 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 272 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 316 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 360 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 404 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 448 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 52 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 96 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 140 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 184 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 228 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 1050 84 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 1006 84 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 962 84 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 918 84 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 874 84 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 830 84 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 786 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 742 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 698 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 654 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 610 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 566 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 522 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 478 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 434 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 390 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 346 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 302 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 258 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 214 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 170 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 126 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 82 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P flonum 38 85 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P message 408 642 50 196617 open;
> #P hidden message 21 507 174 196617 scale 3.04 1.07 1.07 4. 4. 4. 0.07 0.07
> 7.08 7.08 7.08 -0.06 -12.46 0.06 0.06 -0.19 -0.19 -0.19 22.1 22.1 -8.06
> -8.06 -8.06 -8.06 4.9 4.9 4.9;
> #P button 41 381 35 0;
> #P comment 77 380 108 196620 5) send directly to munger;
> #P hidden newex 21 603 93 196617 send to_munger;
> #P hidden newex 21 442 160 196617 prepend scale;
> #P hidden newex 21 465 151 196617 prepend set;
> #P newex 191 441 60 196617 prepend set;
> #P newex 38 214 93 196617 send to_munger;
> #P comment 571 581 135 196617 If that address is beyond the set range , it
> is used , but the automatic sequence will start at the beginning.;
> #P comment 570 530 135 196617 Int in left sets address to use next.
> Automatic address sequencing will continue from that point.;
> #P comment 239 535 102 196617 If there are no Args , addresses run from 0
> to 250.;
> #P comment 239 579 100 196617 Reset begins the address series over.;
> #P button 395 421 35 0;
> #N coll Munger-Sieves;
> #P newobj 457 662 80 196617 coll Munger-Sieves;
> #P number 509 633 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P number 509 571 35 9 0 0 65 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P newex 457 596 62 196617 Ltocoll 0 250;
> #P message 354 551 32 196617 reset;
> #N vpatcher 40 55 519 554;
> #N comlet multiples;
> #P inlet 142 45 15 0;
> #N comlet number list;
> #P inlet 78 45 15 0;
> #N vpatcher 40 55 502 273;
> #P button 271 112 15 0;
> #P newex 243 171 75 196617 print •multiple;
> #P message 243 143 175 196617 both lists must have the same length!;
> #P inlet 243 45 15 0;
> #P newex 243 77 36 196617 listlen;
> #P newex 86 77 36 196617 listlen;
> #P newex 86 110 167 196617 if $i1==$i2 then $i1 else out2 bang;
> #P outlet 86 162 15 0;
> #P inlet 86 45 15 0;
> #P connect 0 0 3 0;
> #P connect 3 0 2 0;
> #P connect 2 0 1 0;
> #P connect 5 0 4 0;
> #P connect 4 0 2 1;
> #P connect 8 0 6 0;
> #P connect 2 1 6 0;
> #P connect 6 0 7 0;
> #P pop;
> #P newobj 78 86 74 196617 p check-listlen;
> #P newex 78 268 220 196617 collect;
> #P button 22 268 15 0;
> #P outlet 78 398 15 0;
> #P message 78 300 344 196617 3.04 1.07 1.07 4. 4. 4. 0.07 0.07 7.08 7.08
> 7.08 -0.06 -12.46 0.06 0.06 -0.19 -0.19 -0.19 22.1 22.1 -8.06 -8.06 -8.06
> -8.06 4.9 4.9 4.9;
> #P newex 149 179 48 196617 sequence;
> #P newex 78 179 48 196617 sequence;
> #P newex 78 209 27 196617 Uzi;
> #P newex 78 239 81 196617 float;
> #P newex 78 150 81 196617 t b b;
> #P newex 78 116 27 196617 Uzi;
> #P button 288 239 15 0;
> #P comment 103 367 112 196617 1994 by Karlheinz Essl;
> #P comment 103 386 100 196617 changed to float version by A.B.2002;
> #P connect 14 0 11 0;
> #P connect 14 0 13 0;
> #P connect 13 0 3 0;
> #P connect 3 0 4 0;
> #P connect 4 0 7 0;
> #P connect 7 0 6 0;
> #P connect 6 0 5 0;
> #P connect 5 0 12 0;
> #P connect 11 0 9 0;
> #P connect 12 0 9 0;
> #P connect 9 0 10 0;
> #P connect 15 0 7 1;
> #P connect 15 0 13 1;
> #P connect 4 1 8 0;
> #P connect 8 0 5 1;
> #P connect 14 0 8 1;
> #P connect 14 0 2 0;
> #P connect 15 0 2 0;
> #P connect 2 0 12 1;
> #P pop;
> #P newobj 191 418 129 196617 p float-multiple;
> #P message 191 480 551 196617 3.04 1.07 1.07 4. 4. 4. 0.07 0.07 7.08 7.08
> 7.08 -0.06 -12.46 0.06 0.06 -0.19 -0.19 -0.19 22.1 22.1 -8.06 -8.06 -8.06
> -8.06 4.9 4.9 4.9;
> #P newex 270 361 50 196617 t b l;
> #P message 191 394 437 196617 3.04 1.07 4. 0.07 7.08 -0.06 -12.46 0.06
> -0.19 22.1 -8.06 4.9;
> #P newex 191 361 71 196617 prepend set;
> #P message 948 356 172 196617 1 2 3 2 3 1 1 2 3 2 4 3;
> #N vpatcher 50 40 1011 466;
> #P newex 112 322 31 196617 show;
> #N comlet display;
> #P outlet 112 346 15 0;
> #N comlet multiplying factor;
> #P inlet 811 94 15 0;
> #N comlet list-length;
> #P inlet 884 47 25 0;
> #P newex 52 281 50 196617 zl slice;
> #N comlet multiplying factor;
> #P inlet 745 93 15 0;
> #N comlet multiplying factor;
> #P inlet 778 93 15 0;
> #N comlet multiplying factor;
> #P inlet 613 93 15 0;
> #N comlet multiplying factor;
> #P inlet 679 93 15 0;
> #N comlet multiplying factor;
> #P inlet 547 93 15 0;
> #N comlet multiplying factor;
> #P inlet 481 93 15 0;
> #N comlet multiplying factor;
> #P inlet 349 93 15 0;
> #N comlet multiplying factor;
> #P inlet 415 93 15 0;
> #N comlet multiplying factor;
> #P inlet 283 93 15 0;
> #N comlet multiplying factor;
> #P inlet 85 93 15 0;
> #N comlet multiplying factor;
> #P inlet 151 93 15 0;
> #N comlet multiplying factor;
> #P inlet 217 93 15 0;
> #N comlet multiplying factor;
> #P inlet 712 93 15 0;
> #N comlet multiplying factor;
> #P inlet 580 93 15 0;
> #N comlet multiplying factor;
> #P inlet 646 93 15 0;
> #N comlet multiplying factor;
> #P inlet 514 93 15 0;
> #N comlet multiplying factor;
> #P inlet 448 93 15 0;
> #N comlet multiplying factor;
> #P inlet 316 93 15 0;
> #N comlet multiplying factor;
> #P inlet 382 93 15 0;
> #N comlet multiplying factor;
> #P inlet 250 93 15 0;
> #P newex 52 242 785 196617 pack 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
> 0 0;
> #N comlet multiplying factor;
> #P inlet 52 93 15 0;
> #P button 30 219 15 0;
> #N comlet multiplying factor;
> #P inlet 118 93 15 0;
> #N comlet multiplying factor;
> #P inlet 184 93 15 0;
> #N comlet multiple list;
> #P outlet 52 346 15 0;
> #P connect 24 0 3 0;
> #P connect 13 0 3 0;
> #P connect 11 0 3 0;
> #P connect 12 0 3 0;
> #P connect 10 0 3 0;
> #P connect 9 0 3 0;
> #P connect 7 0 3 0;
> #P connect 8 0 3 0;
> #P connect 6 0 3 0;
> #P connect 1 0 3 0;
> #P connect 2 0 3 0;
> #P connect 16 0 3 0;
> #P connect 4 0 3 0;
> #P connect 28 0 3 0;
> #P connect 25 0 3 0;
> #P connect 22 0 3 0;
> #P connect 23 0 3 0;
> #P connect 21 0 3 0;
> #P connect 20 0 3 0;
> #P connect 18 0 3 0;
> #P connect 19 0 3 0;
> #P connect 17 0 3 0;
> #P connect 14 0 3 0;
> #P connect 15 0 3 0;
> #P connect 4 0 5 0;
> #P connect 3 0 5 0;
> #P connect 5 0 26 0;
> #P connect 26 0 0 0;
> #P connect 16 0 5 1;
> #P fasten 27 0 26 1 889 271 97 271;
> #P connect 26 0 30 0;
> #P connect 30 0 29 0;
> #P connect 2 0 5 2;
> #P connect 15 0 5 3;
> #P connect 1 0 5 4;
> #P connect 14 0 5 5;
> #P connect 6 0 5 6;
> #P connect 17 0 5 7;
> #P connect 8 0 5 8;
> #P connect 19 0 5 9;
> #P connect 7 0 5 10;
> #P connect 18 0 5 11;
> #P connect 9 0 5 12;
> #P connect 20 0 5 13;
> #P connect 10 0 5 14;
> #P connect 21 0 5 15;
> #P connect 12 0 5 16;
> #P connect 23 0 5 17;
> #P connect 11 0 5 18;
> #P connect 22 0 5 19;
> #P connect 13 0 5 20;
> #P connect 25 0 5 21;
> #P connect 24 0 5 22;
> #P connect 28 0 5 23;
> #P pop;
> #P newobj 52 325 1073 196617 p multifier;
> #P number 1049 14 59 14 0 24 3 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #P button 2 14 35 0;
> #P newex 38 139 160 196617 prepend scale;
> #P newex 38 162 151 196617 prepend set;
> #P message 38 193 469 196617 scale 3.04 1.07 4. 0.07 7.08 -0.06 -12.46 0.06
> -0.19 22.1 -8.06 4.9;
> #N vpatcher 50 40 1007 425;
> #N comlet semitones;
> #P inlet 660 134 15 0;
> #N comlet semitones;
> #P inlet 532 134 15 0;
> #N comlet semitones;
> #P inlet 404 134 15 0;
> #N comlet list-length;
> #P inlet 884 47 25 0;
> #P newex 52 281 50 196617 zl slice;
> #N comlet microtones;
> #P inlet 724 134 15 0;
> #N comlet microtones;
> #P inlet 756 134 15 0;
> #N comlet microtones;
> #P inlet 468 134 15 0;
> #N comlet microtones;
> #P inlet 596 134 15 0;
> #N comlet microtones;
> #P inlet 276 134 15 0;
> #N comlet microtones;
> #P inlet 340 134 15 0;
> #N comlet microtones;
> #P inlet 212 134 15 0;
> #N comlet microtones;
> #P inlet 84 134 15 0;
> #N comlet microtones;
> #P inlet 148 134 15 0;
> #N comlet semitones;
> #P inlet 692 134 15 0;
> #N comlet semitones;
> #P inlet 788 134 15 0;
> #N comlet semitones;
> #P inlet 628 134 15 0;
> #N comlet semitones;
> #P inlet 436 134 15 0;
> #N comlet semitones;
> #P inlet 500 134 15 0;
> #N comlet semitones;
> #P inlet 564 134 15 0;
> #N comlet semitones;
> #P inlet 244 134 15 0;
> #N comlet semitones;
> #P inlet 308 134 15 0;
> #N comlet semitones;
> #P inlet 372 134 15 0;
> #N comlet semitones;
> #P inlet 180 134 15 0;
> #P newex 52 242 749 196617 pack 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
> 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.;
> #P button 24 214 15 0;
> #N comlet semitones;
> #P inlet 52 134 15 0;
> #N comlet semitones;
> #P inlet 116 134 15 0;
> #N comlet multiple list;
> #P outlet 52 307 15 0;
> #P connect 13 0 3 0;
> #P connect 22 0 3 0;
> #P connect 23 0 3 0;
> #P connect 14 0 3 0;
> #P connect 28 0 3 0;
> #P connect 12 0 3 0;
> #P connect 20 0 3 0;
> #P connect 9 0 3 0;
> #P connect 27 0 3 0;
> #P connect 10 0 3 0;
> #P connect 21 0 3 0;
> #P connect 11 0 3 0;
> #P connect 26 0 3 0;
> #P connect 6 0 3 0;
> #P connect 18 0 3 0;
> #P connect 7 0 3 0;
> #P connect 19 0 3 0;
> #P connect 8 0 3 0;
> #P connect 17 0 3 0;
> #P connect 5 0 3 0;
> #P connect 15 0 3 0;
> #P connect 1 0 3 0;
> #P connect 16 0 3 0;
> #P connect 2 0 3 0;
> #P connect 2 0 4 0;
> #P connect 3 0 4 0;
> #P connect 4 0 24 0;
> #P connect 24 0 0 0;
> #P connect 16 0 4 1;
> #P fasten 25 0 24 1 889 271 97 271;
> #P connect 1 0 4 2;
> #P connect 15 0 4 3;
> #P connect 5 0 4 4;
> #P connect 17 0 4 5;
> #P connect 8 0 4 6;
> #P connect 19 0 4 7;
> #P connect 7 0 4 8;
> #P connect 18 0 4 9;
> #P connect 6 0 4 10;
> #P connect 26 0 4 11;
> #P connect 11 0 4 12;
> #P connect 21 0 4 13;
> #P connect 10 0 4 14;
> #P connect 27 0 4 15;
> #P connect 9 0 4 16;
> #P connect 20 0 4 17;
> #P connect 12 0 4 18;
> #P connect 28 0 4 19;
> #P connect 14 0 4 20;
> #P connect 23 0 4 21;
> #P connect 22 0 4 22;
> #P connect 13 0 4 23;
> #P pop;
> #P newobj 38 114 1073 196617 p make-pitch-sieve;
> #P comment 463 13 137 196620 2) adjust pitch sieve;
> #P comment 477 260 132 196620 4) weight definition;
> #P comment 38 13 203 196620 3) send directly to munger;
> #P comment 889 13 159 196620 1) define length of list;
> #P comment 430 422 111 196620 6) bang to send to coll;
> #P comment 887 358 53 196617 weight list;
> #P comment 306 639 100 196617 copy & paste where ever you need it;
> #P hidden fasten 19 0 33 0 196 438 26 438;
> #P hidden connect 33 0 32 0;
> #P hidden connect 32 0 37 0;
> #P hidden fasten 36 0 37 0 46 426 4 426 4 477 4 484 26 484;
> #P hidden connect 37 0 34 0;
> #P connect 39 0 7 0;
> #P connect 7 0 10 0;
> #P connect 10 0 9 0;
> #P fasten 11 0 8 0 7 183 43 183;
> #P connect 9 0 8 0;
> #P connect 8 0 30 0;
> #P connect 67 0 13 0;
> #P connect 40 0 7 1;
> #P connect 66 0 13 1;
> #P connect 41 0 7 2;
> #P connect 65 0 13 2;
> #P connect 42 0 7 3;
> #P connect 64 0 13 3;
> #P fasten 7 0 15 0 43 134 28 134 28 356 196 356;
> #P connect 15 0 16 0;
> #P fasten 17 0 16 0 275 386 196 386;
> #P connect 16 0 19 0;
> #P connect 19 0 31 0;
> #P fasten 25 0 18 0 400 473 196 473;
> #P connect 31 0 18 0;
> #P connect 43 0 7 4;
> #P connect 63 0 13 4;
> #P connect 44 0 7 5;
> #P fasten 13 0 17 0 57 351 275 351;
> #P connect 72 0 13 5;
> #P connect 45 0 7 6;
> #P fasten 17 1 19 1 315 383 646 383 646 413 315 413;
> #P connect 71 0 13 6;
> #P connect 46 0 7 7;
> #P connect 70 0 13 7;
> #P connect 47 0 7 8;
> #P connect 69 0 13 8;
> #P connect 48 0 7 9;
> #P connect 68 0 13 9;
> #P fasten 18 0 21 0 196 507 462 507 462 526 462 526;
> #P fasten 20 0 21 0 359 580 462 580;
> #P connect 21 0 24 0;
> #P fasten 38 0 24 0 413 658 462 658;
> #P connect 49 0 7 10;
> #P connect 77 0 13 10;
> #P connect 22 0 21 1;
> #P connect 21 1 23 0;
> #P connect 50 0 7 11;
> #P connect 76 0 13 11;
> #P connect 51 0 7 12;
> #P connect 75 0 13 12;
> #P connect 52 0 7 13;
> #P connect 74 0 13 13;
> #P connect 53 0 7 14;
> #P connect 73 0 13 14;
> #P connect 54 0 7 15;
> #P connect 82 0 13 15;
> #P connect 55 0 7 16;
> #P connect 81 0 13 16;
> #P connect 56 0 7 17;
> #P connect 80 0 13 17;
> #P connect 57 0 7 18;
> #P connect 79 0 13 18;
> #P connect 58 0 7 19;
> #P connect 78 0 13 19;
> #P connect 59 0 7 20;
> #P connect 86 0 13 20;
> #P fasten 13 1 14 0 1120 349 953 349;
> #P connect 60 0 7 21;
> #P connect 85 0 13 21;
> #P connect 61 0 7 22;
> #P connect 84 0 13 22;
> #P connect 62 0 7 23;
> #P connect 83 0 13 23;
> #P fasten 12 0 7 24 1054 46 1099 46;
> #P fasten 12 0 13 24 1054 46 1113 46;
> #P pop;
>
> _Andreas
>
"A second patcher with a keyboard you can replace with a [notein] object of course"
oct.div is here now - http://ppooll.klingt.org/index.php/max_externals
You may look into: (Turkish translate please):
http://serdarcelik.art/micromidi.html
i've just noticed the link mentioned above is not working anymore - but the following link is working:
http://serdarcelik.site/micromidi.html
and there is a paper in english available:
http://www.ijesi.org/papers/Vol(5)9/A0590107.pdf