p0 = output start time (seconds) p1 = duration (seconds) p2 = pitch (Hz or oct.pc) p3 = amplitude (absolute, for 16-bit soundfiles: 0-32768) p4 = first half-wavetable reference p5 = second half-wavetable reference p6 = wavetable mid-crossover point [0.0-1.0] p7 = pan (0-1 stereo; 0.5 is middle) [optional; default is 0] p2 (pitch), p3 (amplitude), p6 (wavetable mid-crossover point) and p7 (pan) can receive dynamic updates from a table or real-time control source. p4 (first half-wavetable reference) and p8 (second half-wavetable reference), if used, should be references to pfield table-handles. Author Brad Garton, 7/2007
In addition, the 'join' point of the two waveforms (p6, "WMIDPOINT") can be dynamically modulated for timbral change throughout the note:
HALFWAVE can produce both mono and stereo output.
Sample Scores
very basic:
rtsetparams(44100, 1) load("HALFWAVE") w1 = maketable("wave3", 1000, 0.5, 1, 0) w2 = maketable("wave3", 1000, 0.5, 1, 180) dex = maketable("line", 1000, 0,0, 1,1, 2,0.5) HALFWAVE(0, 3.5, 8.00, 20000, w1, w2, dex)
rtsetparams(44100, 2) load("HALFWAVE") amp = 3000 ampenv = maketable("line", 1000, 0,0, 1,1, 9,1, 10,0) dur = 9.8 w1 = maketable("wave3", 1000, 0.5, 1, 0, 1, 0.2, 0, 3, 0.1, 0) w2 = maketable("wave3", 1000, 0.5, 1, 180, 4, 0.5, 180, 7, 0.1, 180) basepitch = 7.00 for (i = 0; i < 49; i += 1) { dex = maketable("line", "nonorm", 1000, 0, random(), 1, random(), 2, random(), 3, random()) prange = 0.24 poff = maketable("line", "nonorm", 1000, 0, irand(0, prange), 0.5, irand(0, prange), 1.4, irand(0, prange), 2.5, irand(0, prange), 3, irand(0, prange), 5, irand(0, prange)) pan = maketable("line", "nonorm", 1000, 0, random(), 1, random(), 2, random(), 3, random()) HALFWAVE(0, dur, basepitch+poff, amp*ampenv, w1, w2, dex, pan) }