p0 = output start time (seconds) p1 = duration (seconds) p2 = pitch (Hz or oct.pc) p3 = amplitude (absolute, for 16-bit soundfiles: 0-32768) p4 = oscillator writing frequency p5 = oscillator wavetable reference p6 = pan [optional; default is 0] p2 (pitch), p3 (amplitude), p4 (oscillator writing frequency) and p6 (pan) can receive dynamic updates from a table or real-time control source. p5 (oscillator wavetable reference) should be a reference to a pfield table-handle. Author Brad Garton, 7/2007
By modulating the frequency of the 'writing' oscillator (p4, "OSCFREQ"), dynamically changing timbral effects are possible because the waveform being written between resets of the oscillator will shift:
SYNC can produce both mono and stereo output.
Sample Scores
very basic:
rtsetparams(44100, 1) load("SYNC") ampenv = maketable("line", 1000, 0,0, 1,1, 9,1, 10,0) wave = maketable("wave", 1000, "sine") wdex = maketable("line", "nonorm", 1000, 0, 200, 1, 400, 2, 200) SYNC(0, 3.5, 225, 20000*ampenv, wdex, wave)
rtsetparams(44100, 2) load("SYNC") amp = 8000 ampenv = maketable("line", 1000, 0,0, 1,1, 9,1, 10,0) wave = maketable("wave", 1000, "saw7") for (i = 0; i < 7; i += 1) { pchenv = maketable("line", "nonorm", 1000, 0, irand(5.065, 5.075), irand(1, 5), irand(5.065, 5.075), irand(5, 9), irand(5.065, 5.075), 10, 5.07) wdex = maketable("line", "nonorm", 1000, 0, irand(100, 500), irand(1, 3), irand(100, 500), irand(4, 7), irand(100, 500), irand(8, 10), irand(100, 500)) SYNC(0, 14, pchenv, amp*ampenv, wdex, wave, random()) }
rtsetparams(44100, 2) load("SYNC") reset(10000) pches = { 0.00, 0.01, 0.03, 0.04, 0.06, 0.09, 0.12 } lpches = len(pches) bpitch = 7.09 amp = 10000 ampenv = maketable("line", 1000, 0,0, 1,1, 9,1, 10,0) wave = maketable("wave", 1000, "saw3") wdex = maketable("line", "nonorm", 1000, 0, 400, 1, 200) st = 0 dur = 0.15 for (i = 0; i < 78; i += 1) { pch = bpitch + pches[trand(0, lpches)] SYNC(st, dur, pch, amp*ampenv, wdex, wave, random()) st += irand(0, dur) }