home *** CD-ROM | disk | FTP | other *** search
- #include sonc.h
- #include effects.h
-
- #defblock midi_inst(sfile, srate, spitch, channels, progs, notes, rept)
- midivoice(channels,progs,notes) {
- vel = midi(NOTE_ON_VEL, midi(NOTE_OFF_VEL, midi(CHNL_PRES)));
- mod = midi(NOTE_ON_PITCH, pitch(srate, spitch))
- * (midi(PITCH_BEND)*(0.1225*4)+1); /* two semitones */
- sampl = midi(NOTE_OFF_RESET, midi(NOTE_ON_RESET,
- sample(sfile, mod, 1, 1)))[1];
- out = sampl*vel;
- ladd = ladd + out;
- radd = radd + out*REVBADD
- }
- #enddef
- #defblock midi_perc_inst(sfile, srate, spitch, channels, progs, notes, rept)
- midivoice(channels,progs,notes) {
- vel = midi(NOTE_ON_VEL, midi(CHNL_PRES));
- mod = midi(NOTE_ON_PITCH, pitch(srate, spitch));
- sampl = midi(NOTE_ON_RESET, sample(sfile, mod, 1, 1))[1];
- out = sampl*vel;
- ladd = ladd + out;
- radd = radd + out*REVBADD
- }
- #enddef
- #defblock midi_inst_decay(sfile, srate, spitch, channels, progs, notes, decaytime)
- midivoice(channels,progs,notes) {
- vel = midi(NOTE_ON_VEL, midi(NOTE_OFF_VEL));
- firstvel = midi(NOTE_ON_VEL);
- mod = midi(NOTE_ON_PITCH, pitch(srate, spitch));
- sampl = midi(NOTE_ON_RESET,
- sample(sfile, mod, 1, 1))[1];
- decaysampl = midi(NOTE_OFF_DECAY_RESET,
- sample("decay.dat", pitch(2048/decaytime), 1, 1))[1];
- out = sampl*(vel+firstvel*decaysampl);
- ladd = ladd + out;
- radd = radd + out*REVBADD
- }
- #enddef
- #defblock midi_perc(sfile, srate, notes, rept)
- midivoice(perchan,[0:127],notes) {
- vel = midi(NOTE_ON_VEL, midi(CHNL_PRES));
- mod = pitch(srate);
- sampl = midi(NOTE_ON_RESET, sample(sfile, mod, 1, 1))[1];
- out = sampl*vel;
- ladd = ladd + out;
- radd = radd + out*REVBADD
- }
- #enddef
- #defblock midi_chorus(sfile, srate, spitch, channels, progs, notes, rept)
- midivoice(channels,progs,notes) {
- vel = midi(NOTE_ON_VEL, midi(NOTE_OFF_VEL, midi(CHNL_PRES)));
- // vel = average(vel, 64);
- sampl = 0;
- mod = midi(NOTE_ON_PITCH, pitch(srate, spitch));
- sampl = sampl + delay(midi(NOTE_ON_RESET, sample(sfile, mod, 1, 1))[1], 0.01);
- mod = midi(NOTE_ON_PITCH, pitch(srate*1.004, spitch));
- sampl = sampl + delay(midi(NOTE_ON_RESET, sample(sfile, mod, 1, 1))[1], 0.03);
- mod = midi(NOTE_ON_PITCH, pitch(srate*0.99, spitch));
- sampl = sampl + delay(midi(NOTE_ON_RESET, sample(sfile, mod, 1, 1))[1], 0.047);
- mod = midi(NOTE_ON_PITCH, pitch(srate*1.009, spitch));
- sampl = sampl + delay(midi(NOTE_ON_RESET, sample(sfile, mod, 1, 1))[1], 0.038);
- out = sampl*vel*0.25;
- ladd = ladd + out;
- radd = radd + out
- }
- #enddef
-
- {
- ladd = 0;
- radd = 0;
- lsub = 0;
- rsub = 0;
-
- /**************************************************************************
-
- General MIDI Specification
-
- The following table lists the names of each of the General MIDI patch numbers.
- This mapping is assumed for all events on all channels other than channel 10.
- Channel 10 is reserved for the drum track. Note that similar instruments are
- grouped together.
-
- NOTE: You must use (patch# - 1) in Sonitica.
-
- General MIDI Patch Map
-
- # Piano # Chromatic Percussion
-
- 1 Acoustic Grand Piano 9 Celesta
- 2 Bright Acoustic Piano 10 Glockenspiel
- 3 Electric Grand Piano 11 Music Box
- 4 Honky-Tonk Piano 12 Vibraphone
- 5 Rhodes Piano 13 Marimba
- 6 Chorused Piano 14 Xylophone
- 7 Harpsichord 15 Tubular Bells
- 8 Clavinet 16 Dulcimer
-
- # Organ # Guitar
-
- 17 Hammond Organ 25 Acoustic Guitar (nylon)
- 18 Percussive Organ 26 Acoustic Guitar (steel)
- 19 Rock Organ 27 Electric Guitar (jazz)
- 20 Church Organ 28 Electric Guitar (clean)
- 21 Reed Organ 29 Electric Guitar (muted)
- 22 Accordion 30 Overdriven Guitar
- 23 Harmonica 31 Distortion Guitar
- 24 Tango Accordion 32 Guitar Harmonics
-
- # Bass # Strings
-
- 33 Acoustic Bass 41 Violin
- 34 Electric Bass (finger) 42 Viola
- 35 Electric Bass (pick) 43 Cello
- 36 Fretless Bass 44 Contrabass
- 37 Slap Bass 1 45 Tremolo Strings
- 38 Slap Bass 2 46 Pizzicato Strings
- 39 Synth Bass 1 47 Orchestral Harp
- 40 Synth Bass 2 48 Timpani
-
- # Ensemble # Brass
-
- 49 String Ensemble 1 57 Trumpet
- 50 String Ensemble 2 58 Trombone
- 51 SynthStrings 1 59 Tuba
- 52 SynthStrings 2 60 Muted Trumpet
- 53 Choir Aahs 61 French Horn
- 54 Voice Oohs 62 Brass Section
- 55 Synth Voice 63 Synth Brass 1
- 56 Orchestra Hit 64 Synth Brass 2
-
- # Reed # Pipe
-
- 65 Soprano Sax 73 Piccolo
- 66 Alto Sax 74 Flute
- 67 Tenor Sax 75 Recorder
- 68 Baritone Sax 76 Pan Flute
- 69 Oboe 77 Blown Bottle
- 70 English Horn 78 Skakuhachi
- 71 Bassoon 79 Whistle
- 72 Clarinet 80 Ocarina
-
- # Synth Lead # Synth Pad
-
- 81 Lead 1 (square) 89 Pad 1 (new age)
- 82 Lead 2 (sawtooth) 90 Pad 2 (warm)
- 83 Lead 3 (calliope lead) 91 Pad 3 (polysynth)
- 84 Lead 4 (chiff lead) 92 Pad 4 (choir)
- 85 Lead 5 (charang) 93 Pad 5 (bowed)
- 86 Lead 6 (voice) 94 Pad 6 (metallic)
- 87 Lead 7 (fifths) 95 Pad 7 (halo)
- 88 Lead 8 (brass + lead) 96 Pad 8 (sweep)
-
- # Synth Effects # Ethnic
-
- 97 FX 1 (rain) 105 Sitar
- 98 FX 2 (soundtrack) 106 Banjo
- 99 FX 3 (crystal) 107 Shamisen
- 100 FX 4 (atmosphere) 108 Koto
- 101 FX 5 (brightness) 109 Kalimba
- 102 FX 6 (goblins) 110 Bagpipe
- 103 FX 7 (echoes) 111 Fiddle
- 104 FX 8 (sci-fi) 112 Shanai
-
- # Percussive # Sound Effects
-
- 113 Tinkle Bell 121 Guitar Fret Noise
- 114 Agogo 122 Breath Noise
- 115 Steel Drums 123 Seashore
- 116 Woodblock 124 Bird Tweet
- 117 Taiko Drum 125 Telephone Ring
- 118 Melodic Tom 126 Helicopter
- 119 Synth Drum 127 Applause
- 120 Reverse Cymbal 128 Gunshot
-
- ***************************************************************************/
-
- #define stdchan [0:8,10:15]
- #define perchan [9]
- #define unsigned 1
-
- #define NOTE_C2 128
-
- #define REVBADD 1
- // piano
- #define DECAY 2.5
- #repeat 5
- midi_inst_decay("a01-c1.wav", 22050, NOTE_C2/2, stdchan, [0:3], [0:35], DECAY);
- midi_inst_decay("a01-c2.wav", 22050, NOTE_C2, stdchan, [0:3], [36:47], DECAY/2);
- midi_inst_decay("a01-c3.wav", 22050, NOTE_C2*2, stdchan, [0:3], [48:59], DECAY/3);
- midi_inst_decay("a01-c4.wav", 22050, NOTE_C2*4, stdchan, [0:3], [60:127], DECAY/4);
- #enddef
- // organ
- #repeat 5
- midi_inst("skporg.wav", 22050, 440, stdchan, [16:23], [0:127], 6);
- #enddef
- // harpscifunk
- #repeat 3
- midi_inst("harpfunk.wav", 22050, NOTE_C2, stdchan, [6:7], [0:127], 4);
- #enddef
- // piano, organ are loud for pop
- #ifdef POPPED
- ladd = ladd /2;
- radd = radd /2;
- #endif
- #repeat 3
- midi_inst("sing1.wav", 22050, NOTE_C2*2, stdchan, [54,85,90,94,99,101], [0:127], 4);
- #enddef
- #repeat 3
- midi_inst("chorlo.wav", 11025, 212.5, stdchan, [52,53,91,88], [0:59], 4);
- midi_inst("chorhi.wav", 15000, 212.5*2, stdchan, [52,53,91,88], [60:127], 4);
- #enddef
- #define REVBADD 0
- // chorus piano
- #repeat 3
- out = 0;
- midi_inst("a03-c2.wav", 22050, NOTE_C2, stdchan, [4:5], [0:35], 4);
- lsub = lsub - out;
- out = 0;
- midi_inst("a03-c4.wav", 22050, NOTE_C2*4, stdchan, [4:5], [36:127], 4);
- lsub = lsub - out;
- #enddef
-
- #define REVBADD 1
- #repeat 5
- midi_inst("skviollo.wav", 22050, 440, stdchan, [40:44,48,49,50,51], [0:127], 6);
- //midi_inst("skviolhi.wav", 22050, 880, stdchan, [40,49,51], [0:127], 6);
- midi_inst("skclarin.wav", 22050, 880, stdchan, [71:79], [0:127], 4);
- midi_inst("skporg.wav", 22050, 440, stdchan, [16:23], [0:127], 6);
- midi_inst("skoboe.wav", 22050, 880, stdchan, [68,111], [0:127], 2);
- midi_inst("sktrumpt.wav", 22050, 440, stdchan, [56:59,61:67], [0:127], 6);
- midi_inst("skpiano.wav", 22050, 220, stdchan, [46,105:108], [0:127], 4);
- midi_inst("skabass.wav", 22050, 220, stdchan, [8,45,31,32,37], [0:127], 8);
- midi_inst("skfrhorn.wav", 22050, 440, stdchan, [60,69], [0:127], 4);
- midi_inst("marimba.nti", 8000, 440, stdchan, [8:15], [0:127], 2);
- #enddef
- #repeat 3
- midi_inst("timpani.nti", 22050, 130.812, stdchan, [47], [0:127], 2);
- midi_inst("skabass.wav", 22050, 220, stdchan, [32], [0:127], 2); // should be 110?
- #enddef
- //
- // distortion guitar
- //
- laddold = ladd;
- ladd = 0;
- #repeat 6
- midi_inst("egtr-a3.wav", 22050, 215/2, stdchan, [29], [0:127], 8);
- #enddef
- ladd = transform(ladd/256, "LOGTBL", 14);
- lsub = lsub + ladd/2;
- ladd = laddold + (ladd + delay(ladd, 0.03));
-
- laddold = ladd;
- ladd = 0;
- #repeat 6
- midi_inst("egtr-a5.wav", 22050, 215*2, stdchan, [30], [0:127], 8);
- #enddef
- ladd = transform(ladd/32, "LOGTBL", 14);
- rsub = rsub + ladd/2;
- ladd = laddold + ladd;
-
- //
- // guitars -- w/ a little chorus
- //
- laddold = ladd;
- ladd = 0;
- #repeat 4
- midi_inst("egtr-a3.wav", 22050, 215/2, stdchan, [24:28], [0:59], 8);
- midi_inst("egtr-a5.wav", 22050, 215*2, stdchan, [24:28], [60:127], 8);
- #enddef
- schorus(ladd, lchor, rchor, 0.005, 0.01, 0.5, 0.2);
- lsub = lsub - lchor;
- rsub = rsub - rchor;
- ladd = laddold;
-
- #define REVBADD 0
- #repeat 2
- // picked bass
- out = 0;
- midi_inst("gtrpluk8.wav", 11025, 53, stdchan, [34], [0:127], 2);
- ladd = ladd + out; // make it 2x louder!
- // fingered bass
- midi_inst("pbass.nti", 15000, 61.7534, stdchan, [33,35,36,37], [0:127], 2);
- // synth bass 1
- midi_inst("funbass.nti", 16800, 130.812, stdchan, [38], [0:127], 2);
- // synth bass 2
- midi_inst("moogbass.nti", 16800, 130.812, stdchan, [39], [0:127], 2);
- #enddef
- #repeat 4
- out = 0;
- // all-purpose synth
- midi_inst("synth5.nti", 8400, 130.812*2, stdchan, [80:87], [0:127], 2);
- //midi_inst("synthc5.wav", 11025, 130.812*4, stdchan, [80:87], [0:127], 2);
- rsub = rsub - out;
- #enddef
-
- #define REVBADD 1
- // orchestral hit
- midi_inst("hitme2.nti", 16800, 130.812*2, stdchan, [55], [0:127], 2);
-
- /*********************************************************************
-
- General MIDI Percussion Key Map
- The following table shows the sound assigned to each MIDI note on channel 10.
-
- # Drum Sound # Drum Sound
-
- 35 Acoustic Bass Drum 59 Ride Cymbal 2
- 36 c3 Bass Drum 1 60 c5 Hi Bongo
- 37 Side Stick 61 Low Bongo
- 38 Acoustic Snare 62 Mute Hi Conga
- 39 Hand Clap 63 Open Hi Conga
- 40 Electric Snare 64 Low Conga
- 41 Low Floor Tom 65 High Timbale
- 42 Closed Hi-Hat 66 Low Timbale
- 43 High Floor Tom 67 g5 High Agogo
- 44 Pedal Hi-Hat 68 Low Agogo
- 45 Low Tom 69 Cabasa
- 46 Open Hi-Hat 70 Maracas
- 47 Low-Mid Tom 71 Short Whistle
- 48 c4 Hi-Mid Tom 72 c6 Long Whistle
- 49 Crash Cymbal 1 73 Short Guiro
- 50 High Tom 74 Long Guiro
- 51 Ride Cymbal 1 75 Claves
- 52 Chinese Cymbal 76 Hi Wood Block
- 53 Ride Bell 77 Low Wood Block
-
- 54 Tambourine 78 Mute Cuica
- 55 Splash Cymbal 79 Open Cuica
- 56 Cowbell 80 Mute Triangle
- 57 Crash Cymbal 2 81 Open Triangle
- 58 Vibraslap
-
- **********************************************************************/
-
- #define REVBADD 1
- #repeat 2
- midi_perc("edlsnar2.nti", 15000, [38,40], 2);
- out = 0;
- midi_perc("yride.nti", 22050, [51,53,59], 1);
- rsub = rsub - out;
- //midi_perc("orchcrsh.wav", 44100, [49], 2);
- midi_perc("crashsk.nti", 22050, [49,55,57,58], 2);
- midi_perc("claps.wav", 22050, [39], 1);
- out = 0;
- midi_perc("tambouri.wav", 22050, [54], 1);
- lsub = lsub - out;
- midi_perc("chinaboy.wav", 22050, [52], 1);
- midi_perc_inst("tomtom.nti", 15000, 220, perchan, [0:127], [41,43,45,47,48,50], 3);
- midi_perc("sidestik.wav", 22050, [37], 1);
- midi_perc("woodblk.wav", 11025*3/2, [76], 1);
- midi_perc("woodblk.wav", 11025, [77], 1);
- #enddef
- #define REVBADD 0
- #repeat 2
- midi_perc("thikbass.nti", 15000, [35,36], 2);
- midi_perc("tighthh.wav", 44100, [42], 1); // closed hh
- midi_perc("closedhh.wav", 44100, [44], 1); // pedal hh
- midi_perc("pedalhh.wav", 22050, [46], 1); // open hh
- out = 0;
- midi_perc("cowbell.nti", 15000, [56,67,68], 1);
- rsub = rsub - out;
- midi_perc("timbalo.wav", 11025, [66], 1);
- midi_perc("timbahi.wav", 11025, [65], 1);
- midi_perc("opconga.wav", 11025*2, [63], 1);
- midi_perc("opconga.wav", 11025, [64], 1);
- midi_perc("mutconga.wav", 11025, [62], 1);
- midi_perc("agogo.wav", 11025, [68], 1);
- midi_perc("agogo.wav", 11025*2, [67], 1);
- out = 0;
- midi_perc("casaba.wav", 22050, [69], 1);
- lsub = lsub - out/2;
- out = 0;
- midi_perc("maracas.wav", 11025, [70], 1);
- lsub = lsub - out/2;
- #enddef
-
- /*
- #repeat 12
- midivoice(stdchan,[16,0:127],[0:127]) {
- vel = forward vel*0.9997;
- midi(NOTE_ON_VEL, midi(NOTE_OFF_VEL, midi(CHNL_PRES, vel)));
- mod = midi(NOTE_ON_PITCH, delta);
- sampl = wavegen(TRIANGLE, mod);
- out = sampl*vel;
- ladd = ladd + out;
- radd = radd + out
- };
- #enddef
- */
-
- rvbadd = radd;
-
- #ifdef POP
- #define RVBSCAL 90
- #define RVBTIME 0.2417
- #define RVBFEED 0.95
- ladd = ladd - radd / 4; // make non-reverb inst's louder
- radd = ladd;
- #else
- #define RVBSCAL 60
- #define RVBTIME 0.3817
- #define chormix 0.25
- #define RVBFEED 0.97
- ladd = chorus(ladd, 0.005, 0.01, chormix, 0.2);
- radd = chorus(ladd, 0.005, 0.01, chormix, 0.25);
- #endif
-
- #ifndef NOREVERB
- sreverb(rvbadd, lrvb, rrvb, RVBTIME, 0.97, 0);
- //hallreverb(rvbadd, lrvb, rrvb);
- #else
- lrvb = 0;
- rrvb = 0;
- #endif
-
- #ifdef JUSTREVERB
- ladd = 0; radd = 0;
- #else
- ladd = ladd - lsub;
- radd = radd - rsub;
- #endif
-
- #define OUTFREQ 22050
- #ifdef FREQ
- #define OUTFREQ FREQ
- #endif
-
- #ifdef OUTFILENAME
- outfile(OUTFILENAME, OUTFREQ, 2, 2, ladd/8+lrvb/RVBSCAL, radd/8+rrvb/RVBSCAL)
- #else
- outdevice(0, OUTFREQ, 2, 2, ladd/8+lrvb/RVBSCAL, radd/8+rrvb/RVBSCAL)
- #endif
- //outdevice(2, OUTFREQ, 1, 1, (ladd+radd)/16+lrvb/RVBSCAL)
- //outfile("test.snd", 22050, 2, 2, ladd/8+lrvb/RVBSCAL, radd/8+rrvb/RVBSCAL)
- }
-