p0 = output start time (seconds) p1 = duration (seconds) p2 = amplitude (absolute, for 16-bit soundfiles: 0-32768) p3 = frequency (Hz) p4 = slide length (samps) p5 = lip filter (Hz) p6 = max pressure (0.0-1.0) p7 = pan (0-1 stereo; 0.5 is middle) [optional; default is 0.5] p8 = breath pressure table [optional; default is 1.0] p2 (amplitude), p3 (frequency), p4 (slide length), p5 (lip filter) and p7 (pan) can receive dynamic updates from a table or real-time control source. p8 (breath pressure table), if used, should be a reference to a pfield table-handle. Author: Brad Garton, based on code from the Synthesis ToolKit
note (oct.pc) slide length (p4) lip filter (p5) max pressure (p6) 7.00 103 140 0.045 7.01 103 150 0.05 7.02 103 160 0.07 7.03 103 170 0.1 7.04 100 180 0.1 7.05 95 188 0.15 7.06 90 195 0.15 7.07 80 207 0.2 7.08 75 220 0.2 7.09 70 235 0.2 7.10 65 250 0.2 7.11 55 255 0.2 8.00 50 265 0.2 8.01 45 280 0.2 8.02 43 295 0.2 8.03 40 320 0.1 8.04 40 340 0.25 8.05 35 355 0.25 8.06 30 370 0.25 8.07 30 395 0.3 8.08 25 415 0.3 8.09 15 430 0.3 8.10 10 450 0.3 8.11 10 480 0.2 8.11 (alt) 270 450 0.23 9.00 10 520 0.2 9.00 (alt) 255 480 0.23/0.25 9.01 240 490 0.3 9.02 228 530 0.3 9.03 215 550 0.35 9.04 202 590 0.4 9.05 190 640 0.4 9.06 180 670 0.45 9.07 170 710 0.5 9.08 160 740 0.55 9.09 150 780 0.6 9.10 142 840 0.6 9.11 134 860 0.65 10.00 127 940 0.7These are approximate. Also note that the same pitch may be produced by different combinations of parameters.
Also be aware that some combinations of parameters will yield no sound. The 'physics' have to work correctly!
MBRASS can produce other mono or stereo output.
Sample Scores
very basic:
rtsetparams(44100, 2) load("MBRASS") amp = 40000 breathenv = maketable("line", 1000, 0,0, 0.05,1, 3.0,3, 3.5,0) MBRASS(0, 3.5, amp, 249.0, 200, 279.0, 0.3, 0.5, breathenv) MBRASS(4, 3.5, amp, 249.0, 400, 279.0, 0.3, 0.5, breathenv)
rtsetparams(44100, 2) load("MBRASS") freq = maketable("line", "nonorm", 1000, 0,201, 1,314) pan = makeLFO("tri", 0.5, 0.0, 1.0) MBRASS(0, 3.5, 15000, freq, 200, 279.0, 0.3, pan) bamp = maketable("line", 1000, 0,0, 1,1, 2,0) slide = maketable("line", "nonorm", 1000, 0, 100, 1, 400, 3, 200) lipfilt = makeLFO("sine", 3.5, 250, 400) MBRASS(4, 3.5, 20000, 249.0, slide, lipfilt, 0.3, 0.5, bamp)
rtsetparams(44100, 2) load("MBRASS") srand() breathamp = maketable("line", 1000, 0,0, 5,1, 10,0) /* amps */ amps = { 30000, 20000, 20000, 20000, 20000, 20000, 20000, 20000, 20000, 20000, 20000, 20000, 20000, 20000, 20000, 20000, 20000, 20000 } lamps = len(amps) /* pch */ pches = { 7.05, 7.07, 7.10, 8.00, 8.02, 8.03, 8.05, 8.07, 8.09, 8.10, 9.00, 9.02, 9.03, 9.05, 9.07, 9.09, 9.10, 10.00 } /* slide length */ slidelen = { 95, 80, 65, 50, 43, 40, 35, 30, 15, 10, 255, 228, 215, 190, 170, 150, 142, 127 } /* lip filter */ lipfilt = { 188, 207, 250, 265, 295, 320, 355, 395, 430, 450, 480, 530, 550, 640, 710, 780, 840, 940 } /* max pressure */ maxpress = { 0.15, 0.2, 0.2, 0.2, 0.2, 0.2, 0.25, 0.3, 0.3, 0.3, 0.25, 0.3, 0.35, 0.4, 0.5, 0.6, 0.6, 0.7 } start = 0 for(i = 0; i < 100; i=i+1) { index = trand(0, lamps) amp = amps[index] pch = pches[index] slide = slidelen[index] lip = lipfilt[index] pressure = maxpress[index] dur = irand(1.7, 2.7) MBRASS(start, dur, amp*0.4, cpspch(pch), slide, lip, pressure, random(), breathamp) start = start + (random() * 0.2 + 0.1) }