------------------------------------------------------------------------- Protracker V1.1 Release B+ - (C) 1991 Amiga Freelancers 4/1991 ------------------------------------------------------------------------- Protracker is a Public Domain program, and may may be copied freely and included in any PD library. You may not charge anything for the program other than the cost of the disk and the PD-service. This disk should contain the following files: PT1.1 - The main program (not packed, do it yourself). PT1.1.info - The Icon for Protracker, by Quantarc. PROP - Protracker module player. PT.TempoCalc.txt - How to calculate tempo etc. PT-Play.s - Playroutine for the Seka or DevPac assemblers. PT-CIAPlay.s - Playroutine for CIA timing. PT.FileFormat.txt - Description of the file format. PT.Effects.txt - Quick help on all effect commands. PT.help - Online helpfile for PT1.1B (press the Help key). PT.help.txt - Read-/Printable version of the help file. PT.help.txt.info - Icon for the PT.help.txt file, by Quantarc. PT.config-00 - Default configuration file. PT.ReadMe! - ****--> This file <--**** PT.ReadMe!.info - Icon for the ReadMe! file, by Quantarc. If you pack Protracker, please use a packer with real hunk-handling. Powerpacker or Imploder will do just fine. No absolute-address crap!!! This is the official PT1.1 Release B+ !!! If you have a version of PT1.1A where the Slow Mode toggle is missing, get rid of it. It's an UNofficial version spread by some stupid people at the Theatre/Network conference! Some info.. ----------- This disk contains all the necessary files to run Shell, CLI, and all the most used CLI-Commands. It is possible to print songs, but we'we only included the Generic printerdriver, so you'll have to install your own. Remember to set the new printerdriver with Preferences. If you make your own workdisk, remember to copy the commands "Run" and "EndCLI". If you are going to make make a compact-disk containing Protracker, please include PT.help!!!! THIS IS VERY IMPORTANT!!! DO NOT ATTEMPT TO EDIT THE HELP-FILE!!! The first 1024 bytes are a text-offset index for Protracker, so keep off. For more info, press the HELP key, when you have started Protracker. --- First Version 1.0 (A) - Full of bugs... Bugs corrected in V1.0 Release B: --------------------------------- - PatternLoop (It always jumped to the start of the pattern, not the loop) - Zap had put FineTune AND Glissando-Control in the same command! (E3) - Fade Up / Down caused shit and even a few gurus! - Delete Pos inserted pattern 77 (!) at position 127 in the song, causing it to be longer than 80k! - Filter All Samples was slow as hell because it tried to filter non- existant samples. - If you selected sample 0 from the keypad, it always played the last sample played as sample 0! - A590 owners couldn't use the keyboard because of the way Mahoney & Kaktus set up the keyboard interrupt (we used their NT1.1 routine). This should now function correctly since we check the interrupt-server list. - Entering the help screen when in the midi screen fucked up the display. - Escaping from Mix exited from the whole edit op.! - CutBeg no longer fucks up the Sample length and Pos. - The help file was FULL of bugs / misspellings. Bugs corrected in V1.0 Release C: --------------------------------- - Error in Finetune-table2 (note B-2) - Abort Load sometimes caused a guru! - Toneportamento (cmd 3) didn't work correctly with finetune. - PLST screen was one pixel off. MIDI screen was removed. Changes and improvements from Protracker V1.0C to V1.1A: -------------------------------------------------------- General: - Protracker will now run if you have Kickstart 2.0 installed! (A500,A1000,A2000,A3000 etc...) - Protracker will also "Auto runback" when you start from CLI! There's no need to use the 'run' command. - Keyboard and mouse input is provided by an InputHandler with prior- ity 52. The handler will grab all RAWKEY and RAWMOUSE events from the input.device before they reach intuition. PT will no longer interfere with windows and gadgets on the intuition screen behind. - Keyboard buffer. Wow!!! Now you can play really fast, and PT won't miss a single key (...well, not as many as it used to before...). - The vertical blank interrupt no longer patches the vector itself, but uses the AddIntServer function. - The playroutine creates it's own CIA or VBLANK interrupt, and it will not be removed if a song is playing when you go to CLI/Workbench. - Text input routine changed a little. Use mouse to set pos and to exit. - Improved "Out of memory" handling (hopefully no more gurus...). - Only the first 2 bytes of a sample will be zeroed (were the first 4). - Lots of new keyboard commands/shortcuts using the Alt key. - Vibrato depth changed to be compatible with NT2.0. Double all your depth numbers if you load old protracker songs. - Funk Repeat changed to Invert Loop. - Play samples from the keypad (dot mode) when pressing backslash. Main Screen: - MIDI screen has been removed. Changed to sampler instead. MIDI input is still there, but there's no MIDI output. Sorry... - Quadrascope. Four channel oscilloscope that displays the samples in realtime, even when playing from keyboard. The good old spectrum analyzer is still there, just click on the scope to toggle. - Tempo gadget. Default is 125 BPM (normal vblank speed), but that can be changed if you select CIA timing on Setup2. Range is 32-255 BPM, and can also be changed with the 'F' effect command (speed/tempo). - Repeat and replen will be updated in the samples when you change them. You no longer have to press a key to hear the new loop. - Protracker should now be able to show up to 10/16 megs of freemem. - Error messages when PLST or Config not found. - Click to enter position, pattern and length with the keyboard. Disk Op.: - Choose RAW or IFF when saving samples. - Samples will be saved with IFF-loops. - Change path without reading directory. - All 30 characters in filename/directory stored (was 24). - Shows directories, just click to add directory to path. - Parent directory gadget. - One preset and several default paths for modules/songs/samples. - PT will now read an "unlimited" number of directory entries (was 200). Setup: - The only thing that's happened here is a small gadget labeled "2". Pressing it will put you in... Setup2: - 8 new on/off toggles. Override: Load/save sample from samplepath even if there's a path in the samplename. ST-37:bigbadbass with override will be loaded from DF0: (or whatever) instead of ST-37:. You may want to put all your samples in one big directory on your harddisk... NoSamples: Will load a song without asking for the samples. BlankZero: This will show the samplenumbers in the pattern in the same way as Noisetracker 1.2 (Zeros are blanked out). Show Dirs: If on, directories will be shown in Disk Op. Show Publ: If on, PT will show all free Public memory, otherwise just free Chip memory. CutToBuff: If on, the part of the sample cut away in the sample editor will be saved in the copybuffer. Load Loop: Will load loops from an IFF file when loading a sample, or adding a path in the sampleeditor. Slow Mode: Use this toggle if you have a 25 Mhz A3000 where every- thing is faster. - Set Default paths. - You can set the maximum number of presets (used to be 2500). - DMA wait. Use this on 25MHz Amigas... - Set tuning tone (note and volume). - You can salvage and recover your songs to/from a chosen address in case of a guru! - Select CIA or VBlank timing. - Set default CIA tempo. - Spectrum Analyzer/VU-meter copper colour editor! Preset Editor: - Use Preset removed, inserted Delete Disk instead. - You can now save Finetune instead of Volume in the PLST. - ST-disk number changed to hex (ST-00 --> ST-FF)! - Adding samples with IFF-loops to the presetlist is possible. - Proper PLST allocation. Protracker will no longer allocate any memory if there's no PLST. PLST: - ST-disk number changed to HEX. This means you can have up to $FF, or 255 ST-disks (used to be 99). Sampler/Sample Editor: - Sample Graphing like Audiomaster. With Show Range, Show All, Zoom Out, Range All, etc... - Play either Waveform, Display or Range. - Repeat points are shown, and can be dragged around. - Loop on/off toggle. - A line shows current position when playing back a sample. - A sampler just like on NT2.0. - Resample function w/tuning tone. - Cut, Copy and Paste functions. - Cursor to beginning/end. - Swap current sample with copybuffer. Edit Op.: 1 - Transpose All bug removed. 2 - Move changed to Copy (use this to copy samples too). 3 - Upsample changed a tiny bit (allocation). Bugs corrected in V1.1 Release B+: ---------------------------------- - 'Finish all ...'-Guru when Kick 2.0 running - removed - automatically run-command now bugfree - internal routines fasted - new protracker-logo (stolen from TinoTwist, he,he) And now we will try to explain some common misunderstandings: -------------------------------------------------------------- > Look at this man! This new tracker's got a really mind-blowing equalizer! No it doesn't. In fact we have never seen a single Amiga program with an equalizer. But VU-meters (Volume Unit that is) and Spectrum Analyzers are featured on most demos and soundtrackers. An equalizer is just like an tone control with cut/boost controls for each frequency range. Just take a look at your stereo, and maybe you'll find some sliders marked 125, 250, 500, 1k, 2k, 4k etc. That is an Graphic Equalizer. There are also Parametric Equalizers where you can change the center frequency and Q- factor (bandwidth) of each band, but they are usually found on mixer consoles and other equipment. Spectrum Analyzers shows the relative volume of each frequency band, but of course the Amiga cannot analyze the spectrum of the samples in real time, so it will will just show which notes you play. VU-meters are even simpler, they show the volume of the sound. But again, the Amiga cannot (it could, but it would take up a lot of time) show the real volume of the samples, so the VU-meter just pops up to the volume you have set for that sample, and falls back to zero. Not even the scopes will show the sample just as it is. They show 40 (or was it 48?) bytes of the sound, and will just "scroll" through the sample as it plays back. Besides, if you're so keen on calling them Equalizers, can't you at least spell it right....Equilisers.....ARRGGHH! > I have got all the ST sample disks. From ST-01 to ST-99. No you haven't. There are no standard set of 99 sample disks. You just name a disk ST-something, and copy all your samples to it. Wonga! You've got a new sample disk! If you really have 99 disks, We don't think it would hurt to throw away some of your least used samples. Who needs disks with aliased, untuned samples with 2k dead air in the beginning of each of them? No need to fill your harddisk with them either. Please tune your samples to C-2 or C-3 (use the resampling function), and cut away that ugly silence in the beginning... (BTW: Aliasing is something you get when recording a sample, NOT when you play it back.) > I really liked your PlayList editor! No you didn't. PLST is an abbreviation for PresetList!!! Things you want, that we don't want: ------------------------------------ > 8 Channels, like Startrekker and Oktalyzer. Nope! The Amiga has only got four real audiochannels, so in order to play eight channel music the CPU has to read the samples itself, and feed them to the four channels byte by byte. This will of use all the available time, and you'll not be able to do anything else at the same time. Normally sample playback is done by DMA (Direct Memory Access), were the sampledata if fetched automatically from memory without the processor intervening. Things we want, but don't know how to do: ----------------------------------------- - Reverb... Hmmm... I know what it is, and I even have an Alesis Midiverb II Digital Effects Processor with reverb and other nice effects. But how do you create reverb on an Amiga? Well, first there is Direct Sound; that's just the original sample. Then there's Early Reflections; which is the first part of the reflected sound. It's just a few short delays with perhaps some lowpass filtering, and I have already solved that part of the problem. With long delays it sounds like echos, but shorter delays makes it sound more muddy, and in stereo, it spreads the sound image. But then there's reverb, which is sound that has reflected more than once. It could probably be implemented as a series of delays with feedback, plus some damping filters here and there, but the results so far has been dis- appointing. It sounds like resonant echos, or it overloads and clips the sample. Grrrr!!! So if you have a reverb algorithm or a book that explains how to do such things, please let me know. We will include it in the next version of PT. Some info on digital filters (how to calculate those damned coefficients) would be nice too (FIR & IIR filters). Things to come in newer versions: --------------------------------- - Synthetic sounds Yes, yes, yes!!! But how do you want it implemented? It would be nice if you could draw some examples and send them to us. Please don't send us a letter that just says: "I want it to be just like on ". Programs using synthetic sounds has usually envelopes, modulation, wavetables and other stuff for each instrument, while the tracker way to it is to set all that using effect commands. How should we combine the good old samples with the new synthetic sounds? We still haven't got all music programs for the Amiga, so if you have seen something great on any program that you want to have in PT, please send a disk with the program. We have most of the trackers, but not all the synthetic sound programs. - MIDI Look, boys (and girls). Protracker is not supposed to be a MIDI sequencer. It's a music program that you use to create music for demos, games, music disks or just to listen to on your Amiga. MIDI sequencers has got a much higher timing resolution and lots of tracks, while Protracker has 16ths and only four tracks. Some of you want to hear your music played on your synthesizers too, but the tracker was not really designed to do that. The MIDI screen on PT1.0A&B looked so promising, but we didn't have time to finish it. The MIDI functions will have to be coded some day, but I just don't know when that will be... In the mean time you can use the terrible NoiseTracker 2.0 (Oh no!). Other projects we're working on, or are going to be working on: --------------------------------------------------------------- ABBS - A conversion of MBBS for Amiga. (Lattice C) RPG Adventure - Will this ever be finished? (C & Assembler) ProSound (?) - Sample Creator program. Better than Synthia? (Assembler) Amiga Freelancers are: Lars Hamre - ZAP Anders Hamre - The Mad Martian Rune Johnsrud - Quantarc Sven Vahsen - The Moose If you want to contact us (please do) write to: Lars & Anders Hamre / Amiga Freelancers Bekkeliveien 10 N-2010 STRØMMEN Norway Phone: (06) 817466 Or to: Rune Johnsrud / Amiga Freelancers Skogveien 16 N-2010 STRØMMEN Norway Phone: (06) 813850 You can also contact us at the Crusaders BBS, by writing a message to: ANDERS HAMRE, LARS HAMRE, RUNE JOHNSRUD or THE MOOSE. Phone Norway: +47-6-810864 (Node 1) +47-6-810881 (Node 2) +--------------------------------------------------------------------------+ | Do YOU want to become a member of Amiga Freelancers? We need coders that | | can/will/want to do other stuff that just demos. You could join us, and | | help us make Protracker an even better program! We need musicians (good | | or bad [no, not bad]), graphics artists or anyone else that would like to| | join us. We're just four really lazy people at the moment... | +--------------------------------------------------------------------------+ /* End of File * Protracker V1.1B Effect Commands ---------------------------------------------------------------------------- 0 - Normal play or Arpeggio 0xy : x-first halfnote add, y-second 1 - Slide Up 1xx : upspeed 2 - Slide Down 2xx : downspeed 3 - Tone Portamento 3xx : up/down speed 4 - Vibrato 4xy : x-speed, y-depth 5 - Tone Portamento + Volume Slide 5xy : x-upspeed, y-downspeed 6 - Vibrato + Volume Slide 6xy : x-upspeed, y-downspeed 7 - Tremolo 7xy : x-speed, y-depth 8 - NOT USED 9 - Set SampleOffset 9xx : offset (23 -> 2300) A - VolumeSlide Axy : x-upspeed, y-downspeed B - Position Jump Bxx : songposition C - Set Volume Cxx : volume, 00-40 D - Pattern Break Dxx : break position in next patt E - E-Commands Exy : see below... F - Set Speed Fxx : speed (00-1F) / tempo (20-FF) ---------------------------------------------------------------------------- E0- Set Filter E0x : 0-filter on, 1-filter off E1- FineSlide Up E1x : value E2- FineSlide Down E2x : value E3- Glissando Control E3x : 0-off, 1-on (use with tonep.) E4- Set Vibrato Waveform E4x : 0-sine, 1-ramp down, 2-square E5- Set Loop E5x : set loop point E6- Jump to Loop E6x : jump to loop, play x times E7- Set Tremolo Waveform E7x : 0-sine, 1-ramp down. 2-square E8- NOT USED E9- Retrig Note E9x : retrig from note + x vblanks EA- Fine VolumeSlide Up EAx : add x to volume EB- Fine VolumeSlide Down EBx : subtract x from volume EC- NoteCut ECx : cut from note + x vblanks ED- NoteDelay EDx : delay note x vblanks EE- PatternDelay EEx : delay pattern x notes EF- Invert Loop EFx : speed ---------------------------------------------------------------------------- Have you ever wondered how a Protracker 1.1B module is built up? Well, here's the... Protracker 1.1B Song/Module Format: ----------------------------------- Offset Bytes Description ------ ----- ----------- 0 20 Songname. Remember to put trailing null bytes at the end... Information for sample 1-31: Offset Bytes Description ------ ----- ----------- 20 22 Samplename for sample 1. Pad with null bytes. 42 2 Samplelength for sample 1. Stored as number of words. Multiply by two to get real sample length in bytes. 44 1 Lower four bits are the finetune value, stored as a signed four bit number. The upper four bits are not used, and should be set to zero. Value: Finetune: 0 0 1 +1 2 +2 3 +3 4 +4 5 +5 6 +6 7 +7 8 -8 9 -7 A -6 B -5 C -4 D -3 E -2 F -1 45 1 Volume for sample 1. Range is $00-$40, or 0-64 decimal. 46 2 Repeat point for sample 1. Stored as number of words offset from start of sample. Multiply by two to get offset in bytes. 48 2 Repeat Length for sample 1. Stored as number of words in loop. Multiply by two to get replen in bytes. Information for the next 30 samples starts here. It's just like the info for sample 1. Offset Bytes Description ------ ----- ----------- 50 30 Sample 2... 80 30 Sample 3... . . . 890 30 Sample 30... 920 30 Sample 31... Offset Bytes Description ------ ----- ----------- 950 1 Songlength. Range is 1-128. 951 1 Well... this little byte here is set to 127, so that old trackers will search through all patterns when loading. Noisetracker uses this byte for restart, but we don't. 952 128 Song positions 0-127. Each hold a number from 0-63 that tells the tracker what pattern to play at that position. 1080 4 The four letters "M.K." - This is something Mahoney & Kaktus inserted when they increased the number of samples from 15 to 31. If it's not there, the module/song uses 15 samples or the text has been removed to make the module harder to rip. Startrekker puts "FLT4" or "FLT8" there instead. Offset Bytes Description ------ ----- ----------- 1084 1024 Data for pattern 00. . . . xxxx Number of patterns stored is equal to the highest patternnumber in the song position table (at offset 952-1079). Each note is stored as 4 bytes, and all four notes at each position in the pattern are stored after each other. 00 - chan1 chan2 chan3 chan4 01 - chan1 chan2 chan3 chan4 02 - chan1 chan2 chan3 chan4 etc. Info for each note: _____byte 1_____ byte2_ _____byte 3_____ byte4_ / \ / \ / \ / \ 0000 0000-00000000 0000 0000-00000000 Upper four 12 bits for Lower four Effect command. bits of sam- note period. bits of sam- ple number. ple number. Periodtable for Tuning 0, Normal C-1 to B-1 : 856,808,762,720,678,640,604,570,538,508,480,453 C-2 to B-2 : 428,404,381,360,339,320,302,285,269,254,240,226 C-3 to B-3 : 214,202,190,180,170,160,151,143,135,127,120,113 To determine what note to show, scan through the table until you find the same period as the one stored in byte 1-2. Use the index to look up in a notenames table. This is the data stored in a normal song. A packed song starts with the four letters "PACK", but i don't know how the song is packed: You can get the source code for the cruncher/decruncher from us if you need it, but I don't understand it; I've just ripped it from another tracker... In a module, all the samples are stored right after the patterndata. To determine where a sample starts and stops, you use the sampleinfo structures in the beginning of the file (from offset 20). Take a look at the mt_init routine in the playroutine, and you'll see just how it is done. Lars "ZAP" Hamre/Amiga Freelancers Protracker CIA (Complex Interface Adapter) Timer Tempo Calculations: -------------------------------------------------------------------- Fcolor = 4.43361825 MHz (PAL color carrier frequency) CPU Clock = Fcolor * 1.6 = 7.0937892 MHz CIA Clock = Cpu Clock / 10 = 709.37892 kHz 50 Hz Timer = CIA Clock / 50 = 14187.5784 Tempo num. = 50 Hz Timer*125 = 1773447 For NTSC: CPU Clock = 7.1590905 MHz --> Tempo num. = 1789773 To calculate tempo we use the formula: TimerValue = 1773447 / Tempo The timer is only a word, so the available tempo range is 28-255 (++). Tempo 125 will give a normal 50 Hz timer (VBlank). A normal Protracker VBlank song tempo can be calculated as follows: We want to know the tempo in BPM (Beats Per Minute), or rather quarter- notes per minute. Four notes makes up a quarternote. First find interrupts per minute: 60 seconds * 50 per second = 3000 Divide by interrupts per quarter note = 4 notes * speed This gives: Tempo = 3000/(4*speed) simplified: Tempo = 750/speed For a normal song in speed 6 this formula gives: 750/6 = 125 BPM Lars "ZAP" Hamre/Amiga Freelancers 1990