Imported MODfiles, Noise Tracker GS and SoundSmith (A Collective GS Music Report and Review) Compiled and Edited by Charles Turley, Ph.D. A FREEWARE - Copyright (c) 1994 by Charles Turley, Ph.D. An amazingly user friendly computer for music compositions, enjoyment and file format versatility, the IIgs has remained useful and popular with its music users, from it introduction in 1986. Now that Apple has discontinued the IIgs' production and the commercial efforts have diminished to nearly 'ZERO' with the music and sound related software, it's effectively become a user supported computer. As such, the IIgs gives both the users and hobbyist programmers, virtual freedom to develop, research and share their knowledge with other users, to keep the computer in an active, enjoyable and useful status, with so many applications, especially music and sound. Imported MODfiles, Noise Tracker GS and SoundSmith, have continued to show their popularity and abilities to preform what the IIgs' other music and MIDI programs can't. With their continual use and inventive applications with music compositions, programs and utilities, it's clear that they still remain popular with the IIgs' music users. While all of the music and sound programs for the IIgs, have their own special effects, abilities, limitations and restrictions, both SoundSmith and Noise Tracker GS have consistently shown their popularity, expanded potentials, faithful use and continued support by the music user. Realizing the IIgs music users need for clear and informative detail, with technical information concerning these programs, their abilities, usefulness and relation to Imported Module files, I've composed this collective report and reviews, with personal notes and general (updated) information I've obtained, concerning; Noise Tracker GS, SoundSmith, Imported Module files - (MODfiles), accessory programs and utilities that compliment and enhance their abilities with each other. I hope that my personal experience, collectives and knowledge will be of some useful value towards the understanding of these programs, in order to stimulate their use, with more creative efforts by their users. The IIgs had no useful modification utilities or editors, that could be used directly with the 'Imported MODfiles' or create them from scratch and then, allow you to save your music efforts back to the same 'Imported MODfiles' format, until just recently. That missing aspect with the IIgs, is no longer present. With the development efforts underway and nearing completion, with respect to the rewrite of Noise Tracker GS v2.00, as a GS/OS application program. Featuring new options such as; converting, editing and saving multi-format music files to the 'Imported MODfiles' format, in (Protracker file format) and supporting most major special effects of the MODfiles, the IIgs and its music users will have the abilities to make, edit, play and 'EXPORT' MODfiles to all of those other computers. With the (FIRST) release of Noise Tracker GS v2.00, you'll have the abilities to create a NATIVE IIgs MODfile from scratch, with your own score and samples, save it and then load and play it with any of the IIgs' MOD Players and EXPORT these new NATIVE IIgs MODfiles to any other computer that can accept and play MODfiles, in the current (Protracker) MODfile format. You'll also have the abilities to do the same things that you could do with the original ProDOS 8 versions of Noise Tracker GS, such as; load, convert, edit with cut/copy/paste (within the music score and/or to the clipboard - for multiple merge scores); Noise Tracker GS files, (all formats), SoundSmith and Imported MODfiles. The added advantages with NTGS v2.00, will allow you to also save your altered, merged/enhanced or original compositions and music scores as, MODfiles, (4 track - Protracker file format, with up to 31 RAM bank samples, of a maximum size of 128k each) to use, edit, enhance and play, on the IIgs or export, to the other computers for their use and enjoyment. The program will let you save any of the music as NTGS file formats; module or score/wavebank sets. But, you can't save them as SoundSmith music scores and wavebank files. It has full editing features, with the new additions of full score cut/copy/paste for; tracks, individual blocks, individual or multiple positions. With all the major 'user friendly' editing (SPREED-SHEET STYLE) score abilities that SoundSmith has to offer, the new NTGS v2.00 program should certainly give the IIgs music users a lot of enjoyment and hopefully, will help this computer gain its respected place within other computer groups, with the creations of NATIVE MODfiles on the IIgs for export to those other computers. I'm currently consumed with beta testing the b8 version and coordinating its design and development. It just keeps getting better and better, with each new beta I get from Dave Swanson. It's a great music program and I'm sure everybody will enjoy this complete rewrite and major upgrade of Noise Tracker GS. While everybody waits for the new (FREEWARE) Noise Tracker GS v2.00 release, projected to be around September 21, 1994, I'm presenting information on other new and useful programs to use with MODfiles, along with a collective of information on MODfiles and reviews of all the IIgs' programs that can be used with them, as well as, a few experimental MODfile; editing and creation, modification and enhancement suggestions. PATtern CHanger (PATCH), by Tony Morales, is a ShareWare utility basic program, which allows you to perform various actions on Amiga MOD pattern data structures. Pattern data structures are simply collections of notes, (sometimes called blocks), that when combined together, produce a musical sequence. PATCH takes any Amiga MODfile, and allows you to adjust all notes in the sequence. PATCH allows you to increment or decrement each note. This may sound like nothing special. But, giving PATCH the correct parameters, you can often produce pleasant sounding alternatives with MODfiles. There are 12 basic notes in each musical octave, (C, C#, D, D#, E, F, F#, G, G#, A, A#,B). If you hear a song in the key of G, this means it's playing with note offsets relative to the note G. Example given, (G, B, D). It's possible to play a piece of music in a different key, such as C. This is the equivalent of the above example, played in the key of C, (C, E, G). Think how many possible notes occur between each corresponding note in the examples. Three notes between G and B, and three notes between C and E. Two notes between B and D, [go up an octave] and two notes between E and G. PATCH takes each note in a MODfile and slides it up or down as many notes as you desire. To play in a different key, slide each note up or down x many notes, where x is the number of notes, (up or down the scale), it takes to reach the new key. If you're confused, consult a person, who knows music for more details. Always make a backup copy of your MODfiles before altering them with PATCH. If you make some alterations that don't sound good, you won't harm the original MODfile. PATCH's unique modification features follow. You're prompted to type in the pathname of the MODfile you're going to use. If the MODfile's in a different directory or folder, than the one you ran PATCH from, you'll need to type in the complete pathname, (/RAM5/MOD.xxx, for example). PATCH then displays the MODfile title, type and number of patterns, with the number of the first and last pattern in the MODfile. Next, you're asked for the start and end patterns to work on. If entering the same values as displayed, PATCH will convert the entire MODfile. You can't enter an ending pattern less than the starting pattern and vice versa. Nor can you enter a negative pattern. MODfiles (that the IIgs can currently deal with), have 4 basic tracks to play notes on. PATCH prompts you if it should operate on a particular track. Type in Y for yes, N for no, at each of the track prompts, (1 thru 4). PATCH then asks you if it should increment or decrement the specified notes. Type I or D, at this prompt. The last option will ask the offset to adjust the notes. There's no way of knowing, other than by listening, which key a particular MODfile was designed in. The best way, is to explore or experiment with various values. Values of 1 or 2 usually raise, or lower, MODfiles by 1 whole note. When you've entered the value, the conversion process begins. PATCH informs you with each pattern it's converting. Most MODfiles only support 3 octaves. So, most likely a note, when adjusted, will fall outside the allowable octave range. If this occurs, PATCH won't touch the note, leaving it the way it was. This results in a pattern that is partially converted. PATCH alerts you and gives you the options to; save the pattern or not save it. If you select no, the pattern remains unconverted. All good patterns are written automatically to disk over the original MODfile. That's why I suggest you backup the MODfile before you alter it. Chances are that your first session with PATCH won't produce a masterpiece. It's possible to do some nice things with MODfiles using PATCH. But, like everything new that you try, it takes practice to make it right. TRACk ediTOR is another very useful MODfile utility basic program by Tony Morales and it's a copyrighted FreeWare. TRACk ediTOR, (TRACTOR) lets you rearrange the tracks in any MODfile. Each MODfile has 4 tracks, and TRACTOR prompts you to specify 2 track numbers, then flips those corresponding tracks around. It requires a IIgs to run, and works fine under any memory configuration. It operates on any valid pattern or range of patterns, in the MODfile. When tracks are flipped the instruments on each track plays from opposite channels. The following table shows which tracks use which channels. Note: (Virtually all '4 Track MODfiles' use this channel configuration). Track Channel 1 Right 2 Left 3 Left 4 Right It's certainly a user friendly program. Launch it, from any application that's capable of running Applesoft ProDOS BASIC programs. The file TRACTOR.BIN, must reside in the same folder as, "TRACTOR." The program prompts you to type in the pathname for the MODfile you'd like to work with. Keep in mind, if the MODfile resides in a different directory, you'll need to type in the complete pathname. It then displays the MOD's title, type, and number of patterns. As previously mentioned, patterns are blocks of notes. It shows you the number of the first and last pattern in the MODfile. First, you're asked to define the range of patterns it should be constrained to when swapping tracks. If you enter the same values as displayed, it swaps tracks with the entire MODfile. You can't enter an ending pattern less than the starting pattern, nor a starting pattern greater than the ending pattern and you can't enter a negative pattern. You're next prompted to enter the number of the first track in the pair of tracks to swap. Enter a number between 1 and 4. You're then prompted for the second track in the pair. This can't be the same as the first track you selected. After you've entered all of this information, the swapping will begin. It will inform you of each pattern it's currently swapping. The pattern is saved to disk as soon as it's swapped. Tony Morales, is the first person to have created MODfiles, better stated 'NATIVE IIGS MODfiles' (ProTracker file format), entirely on the IIgs, using his own digitized samples, with his own manual and original score/sequence efforts, then assembling them by hand. This gives him the status of being the originator and inventor of 'Native IIgs MODfiles'. A two part article written by Tony, featuring his process in 'STEP-BY-STEP' detail, is presented in 'II Alive' Magazine, with the first part in the current issue and the second to be presented in the next issue. Tony could best be described as: 'THE NEW IIGS MASTER OF MODFILES'. I'm sure Tony plans to make many more, MODfile modification, manipulation, enhancement and file conversion programs, to release them for the IIgs users to enjoy. His assistance with techniques and information have been a valued asset, with our development of Noise Tracker GS v2.00. He has developed a vast knowledge and profound understanding of the Noise Tracker GS files, MODfiles and their related players, programs and utilities. He's sincerely commited to the IIgs and the needs of its many faithful users. All he needs, is a little encouragement and support from you, to stimulate him into creating some amazing, user friendly and very useful programming 'WORKS OF ART' for the IIgs. You can write or EMAIL Tony at the following addresses: Tony Morales 2260 Rock St, Apt K Mountain View, CA 94043 GEnie: T.MORALES Internet: hexman@netcom.com --------------------------------------------------------------------------- I've been fasinated and involved with sound and music for many years. I bought my first IIgs 01 ROM computer, in 1986. Because, I found it very useful for my sound and music efforts. I've been working with sound design and engineering efforts for 26 years now. I still enjoy using the IIgs, over either the MAC or PC. As time progressed over the years, I've used all of the IIgs music programs. The IIgs is unique, with its built-in Ensoniq DOC. But, I found the limitations of 64k RAM samples with the music composition and the lack of music program special effects frustrating. Compared to some of the other computers and what they had to offer, with sound and music, I was seriously considering another computer. Al Switzer, the same friend who first introduced me to the IIgs back in 1986, also introduced me to Noise Tracker GS via: beta v0.30 release. As soon as I listened to the music it presented, I knew the limitations with all the other music programs, was no longer of any concern to me. Noise Tracker GS, with its ability to use both the RAM based sound bank and the 64k Ensoniq RAM bank, for sample sound presentations, via swap/caching, limited only by the amount of RAM memory available, opened up an entirely new series of creative and expressive music composition options with the IIgs. With each updated release of Noise Tracker GS, the abilities of the program expanded the IIgs' music formats and composition options. Version 0.70 presented the NT module format and support, along with refined options for loading SoundSmith GS music and importing music modules originally created on the Amiga's, Atari ST's and more recently MAC's and PC computers. The abilities of Noise Tracker GS fascinated me. I began spending all of my spare time studying the program and what it could present with music compositions. I was eager to attempt some Virtual (3-D) Audio compositions and needed to use both right and left channels together, for such efforts. I was able to do this, using the RAM based sound bank. But, when attempting the same with the Ensoniq RAM bank, problems resulted. The program often would lock up or crash, with such dual (Right-Left channel) Ensonic RAM sample assignments. With the release of version 1.0, these problems with assigning both right and left channels to a sample in the Ensoniq RAM bank were eliminated. Version 1.0 allowed me to do this fine with either or both RAM banks and all of their samples. I was eager to see additional functions, improvements and enhancements with updates to the program. After waiting for over a year for an update and finding none available, I decided to write to the author, Olivier Goguel, to ask him when an update to Noise Tracker GS would be released. I mailed Olivier a package with many of my Virtual (3-D) Audio music compositions and thanked him for his efforts, in developing such a fantastic music program for the IIgs. I enclosed $20 as a contribution and requested any updates he had for release of Noise Tracker GS. I also enclosed a list of improvements and enhancements, I thought would be useful with updates to the program, for his review and comments. I received a reply from him a few weeks later, expressing that he was sorry to inform me that v1.0 was his final release for Noise Tracker GS, because the FTA was dead, 'FEU' in french and he had no plans to do any more with the program. He expressed how much he liked the music I sent him, thanked me for the $20 contribution and told me that my wishes for an update to Noise Tracker GS from him, would not be available. Most Noise Tracker GS users assume that the program was an FTA creation and release. Actually, Olivier Goguel was the programmer and author entirely, for the program. He conceived it, developed it, coded it and released it with music, animation, icons and graphic routine contributions from his friends and past members of the FTA, as a final tribute to the memory of the FTA. If you'll carefully check the v1.0 of Noise Tracker GS, you'll note that it saves sound files noted as v0.60, which is actually what Noise Tracker GS v1.0 was developed from. When I pointed this out to Olivier in one of our many lengthy international telephone conversations and asked him about it, he explained that it was indeed, developed from that unreleased beta version and he simply forgot to change the reference to v0.60 in the dialog. We discussed the possibility of upgrades for Noise Tracker GS in many of our telephone conversations. I wrote to Olivier again, expressing how much this computer needed the continuation with the upgrade and development of Noise Tracker GS, asking him if I could continue with such efforts. With his reply by mail, came the entire SRC.CODES for Noise Tracker GS v1.0 with the rights, to continue with development and upgrades for it. I continued to keep in close contact with Olivier by phone and mail. We developed a friendship and co-founded the One World Software Wizards development team in June of 1992. I was given the rights and SRC.CODES by Olivier for many of his authored programs, music, demos, routines, (both released and unreleased - finished and unfinished) to continue with their upgrades and development efforts for the 1WSW team and thru my own OmniSoft Research LAB (OSRL), for release on the IIgs. With Noise Tracker GS as the top priority development effort,the first basic improvements to Noise Tracker GS resulted, when I furnished the SRC.CODES to our (now past) 1WSW team associate, Ken for his assistance with upgrade efforts. With Ken furnishing the SRC.CODES, Ian Schmidt and James Brookes made several modifications, patches and basic improvements with it, by enhancing the sound abilities, filtering efforts, improving its abilities to load more imported module formats and faster swap routines. After reviewing the first upgrade of Noise Tracker GS with Olivier, we expressed concern with several problems the upgrade presented. We both felt, while there had been some basic improvements with enhancing the sound abilities, filtering efforts added, improving its abilities to load more imported module formats and faster swap routines, this was a very hasty and unprofessional effort, having several problems that required prompt action to correct. It was all done in a little over 24 hours, uploaded to the major on-line services and released for downloads, without my knowledge, review or premission. We expressed displeasure at having the copyright to the program, improperly replaced with 2 Meg Music and Ian Schmidts claim to copyright of Noise Tracker GS. I assured Olivier, that I would take the matter up with Ian, A.S.A.P. and make certain these things that displeased both of us were promptly corrected. Taking the appropriate actions, I discussed the matters with Ian at length and had this unauthorized version removed from the major on-line services from any further down-loads or distribution. With the release of version 1.20, we eliminated some problems that resulted with saving and reloading samples from the Ensoniq RAM bank, along with various other minor sound improvements and proper dialog changes, with respect to certain LAME comments in the saved samples and the correct copyright status of Noise Tracker GS to 1WSW and OSRL. When Dave Swanson joined our 1WSW team, he updated Noise Tracker GS to v1.30, our holiday release in December of 1993, giving it additional sound enhancements, filter refinements and faster sound swap improvements, repaired its abilities to correctly save and reload sound samples from both RAM based banks and Ensoniq RAM banks, as either RAW Binary or IFF sound files, plus some additional dialog changes. Noise Tracker GS has been a well received, favored music program and a blessing for this computers music composition abilities. It's gone through many changes, with a few trials and tribulations along the way. It's transcended from its very first conceptual alpha state, as a small binary file named NoiseBlaster II v0.1, when it was nothing more than a simple RAM bank sound/sample loader-player and preview utility from Olivier Goguel, (featured in a past VAMPS/NTV release), thru its Noise Tracker GS beta versions; 0.30, 0.50 and 0.70, on up to its most current upgraded ProDOS 8 release v1.40, with many major internal auto- functional modes and improvements by our 1WSW 'Master Programmer', Dave Swanson. You could say it's gone through its; Alpha, Beta, Delta and Gamma states, now progressing on toward its ultimate 'Omega Factor' capabilities, with continual upgrade efforts from our 1WSW team members, to improve it to the fullest abilities. Now it's under restricted beta testing, as a complete rewrite by Dave Swanson. It's now a GS/OS application program, in the final stages of development as an (ALL-NEW), Noise Tracker GS v2.00. Tony Morales, has developed the NT MOD Player GS/OS application program for loading and playing the NT music module format, from any storage device, having included the functionality of tool 220 in the program, thus eliminating the necessity of tool 220. This program gives you the ability to load and play the NT Module file format via your GS/OS v6.0.1, from the finder, via either your hard drive, 3.5 disk or whatever other device you use to launch GS/OS applications from. Dave Swanson is working on the next (pending) release of Noise Tracker GS v2.00, with many more amazing enhancement and improvement efforts, along with the assistance of many of our other team members, IIgs associates and friends. It has little, if resemblance to the P8 versions of Noise Tracker GS. It has so many new features and improvements, you'll be astounded with its abilities. With its release (COMING SOON !) and continual upgrades, you'll be able to; import MODS and convert them to both of Noise Tracker GS' file formats, using all of their major special effects and vice versa, compose, edit and save your own original MODfiles from scratch. Import SoundSmith music and wavebanks or instrument files, any of the current NT music file formats, save them all and/or create and convert, modify, manipulate, combine and enhance them with ease, to your own specifications. Then, you can save them as a MODfile (IN THE PROTRACKER FILE FORMAT), with all of the major special effects that MODfiles have, for use with any of the IIgs' MOD players or you can port them over to the other computers for their enjoyment by; Amiga, Atari ST, MAC and PC users. The new (FREEWARE) GS/OS application program, rewrite and release of Noise Tracker GS v2.00, will not convert and save any of the music formats to SoundSmith music formats. That ability already exist with the MODCONVERT and MODIFIER programs for the MODfiles. It won't have MIDI support either. Several IIgs MIDI music programs and pending file format converters for them, with the SoundSmith program and its MIDI abilities, will cover any such needs. The SoundSmith MIDI music can be imported into the new Noise Tracker GS v2.00, for additional enhancements and conversion efforts. Nor will it have any intro-music, SHR graphic intro-screen, whistles, bells, dazzle graphic players, screen savers, alarm clocks, jukebox options or the like. It's being presented and released as a serious multi-music format editor, converter, 'user friendly' expressive music sequencer and GS/OS application program, with full featured MODfile creation, edit and save abilities. There will be no upgrades from our 1WSW team, for the P8 Noise Tracker GS program. However, the new GS/OS rewrite of NTGS, will support, import and export, allowing you to convert all of the ProDOS NTGS music files. Soon, you'll all have the abilities to create, convert, edit, enhance, alter and modify MODfiles to your own individual specifications and desires, with GS/OS user friendly ease and do it with Noise Tracker GS v2.00 on your own wonderful IIgs music machine. I'm deligently coordinating its beta testing and development, every day and having a blast creating, editing, saving and playing native IIgs and anhanced original Imported MODfiles, via; ShellPlay, sonicTracker and MODZap. Within a few weeks, you too can do the same (using the popular PROTRACKER file format) and dazzle all those other computer users with your own impressive 'NATIVE IIGS EXPORTED MODFILE' creations and musical works of art. I just finished an international telephone conversation with Olivier Goguel, in FRANCE, informing him of the (ALL-NEW) Noise Tracker GS v2.00. We discussed many things about it and he's looking forward to my sending him the program, so he can warm up his 'friendly old IIgs' and check it out. He was very happy to hear about all the new NTGS rewrite has to offer. Noise Tracker GS lives on, and will continue to push the IIgs to its maximum musical abilities, with each future upgrade and release. About MODCONVERT v1.2 - (FREEWARE) This program consist of two files; a basic file (MODCONVERT) and a binary file (MODCONVERT.BIN). They must remain together in the folder/directory they were copied to in order for the program to work. The program was originally written by our (now past) 1WSW team member Alex, from Germany and given to me to improve, upgrade and distribute as a FREEWARE. The program will convert any MOD music file, from any computer; MAC, AMIGA, IBM or ATARI ST, to a SoundSmith GS or SSP music file. You must make sure that the MOD file is a binary file (BIN). If it's not, the program will not recognize it or attempt to do a conversion. If it's not a binary file, then you should change the MOD file to a binary file, (BIN - file type 06), before you attempt to do any converting with this program. You can use any file type changer utility to do this. I've found, in using this program, that it has many limitations with both; quality and construction of the samples/instrument files that it saves with the converted music file. Thus, I use Noise Tracker GS to load the MOD file, then I save the instruments via Noise Tracker GS as 'IIF' files, for use with the converted SoundSmith music file. I usually don't select the option to convert both the music and the instruments of a MOD file, for this reason. When you do use this mode, the program saves the instruments files with default names; INST1 - INST15 and so on, as raw binary file types. The older versions of MODCONVERT, wouldn't handle any MODfiles that were too large or that had too many instruments or tracks to convert. The older versions of the program would simply lock-up or break into the basic line where the error was. This version was updated to allow you the option to ' DO IT ANYWAY ', without such problems occurring. KEEP IN MIND THAT WHEN YOU: ' DO IT ANYWAY ' YOU'll MOST LIKELY, GET SOME BIZARRE SOUNDS WHEN SAVING THE INSTRUMENTS. SO DO WHAT I SUGGESTED AND LOAD THE MODULE FILE VIA NTGS, THEN SAVE THE SAMPLES/INSTRUMENTS AS IFF. BE SURE TO USE THE DEFAULT NAMES; INST1 - INST15, ETC. SO THAT THE SAVED IFF INSTRUMENTS - SAMPLE/SOUND FILES CAN THEN BE CONVENIENTLY LOADED BY SS OR SSP, TO MATCH THE CORRECT INSTRUMENTS NEEDED FOR THE MUSIC SCORE. The only advantage I can see currently, to converting an imported module to the SoundSmith GS or SSP music format is to be able to manipulate, enhance and modify the music score, to save that file, then import it to NTGS for additional changes, enhancements, modifications, etc. With the release of the new GS/OS application program (FREEWARE), Noise Tracker GS v2.00 and its continual upgrades, having implemented the special editing functions of SoundSmith, i.e.; track, block, individual position, volume fade-in and fade-out, etc., the logic to such conversions will become antiquated ! You can also use the most current release of MODZap (v00.90b3) to save MOD sounds, as raw data sound binary files, (KEEP IN MIND, THAT MODZAP CAN'T CURRENTLY SAVE A LOOP SAMPLE, AS A LOOP SAMPLE) then convert them to IFF files, modifying, cut & paste EDIT functions and a vast host of other special effects, using such programs as; AudioZAP, SSS Sound Editor (SE.SYSTEM), NTGS v1.40, Noise Tracker GS v2.00, Sound Ace, Sound Edit (USE), DigitalSessions, Sound Shop, etc. The MODCONVERT basic program is slow and works best if copied to RAM disk. You can make the conversion process fast and simple by copying the MOD files and the program files to RAM, with ProDOS and the Basic.system file, then run the program and save the converted music and/or instruments to RAM also. You can also copy and use MODCONVERT on your hard-drive. After you've done your conversion, you can copy the converted files to where you want them, load them into SoundSmith GS or SSP and make the modifications, etc. to the music score, rearrange or substitute the instruments, etc., to make your own customized version of the original MOD music file, as a new SoundSmith GS or SSP music and instruments wavebank set, then save them, via SoundSmith GS or SSP to the disk or device of your choice. I'm sure those of you that enjoy using the SoundSmith GS or SSP program will be glad 1WSW has updated and released this MODCONVERT P8 basic program. You'll enjoy using it and if you do any conversions with it and SoundSmith GS or SSP compositions, I'd like for you to send them out for down-loads, to other IIgs music users to listen to and enjoy. If you can't, send them to me and I will ! It's still far from perfect in many respects, but it's a FREEWARE and it's the only program I know of that will allow you to convert MODfiles to SoundSmith GS music files from P8 basic. I received a beta of MODCONVERT II in April, from Alex, which is a P8 system file. It has problems when saving the samples and converting the music score from an imported MODfile. But, it looks like it will be a useful program, when the final version is perfected and released. Alex also expressed in his letter with the beta, that his Ninja Force group have several unique music programs and utilities, that will work with Noise Tracker GS, SoundSmith and imported MODfiles for the IIgs, under development for release soon. The Ninja Force group from Germany are a very talented team of programmers that are devoted to the IIgs and its many users and should prove to contribute many worthy wares for the IIgs users needs. The 'Compact' option found in the AudioZAP Sound Editor, can reduce the size of the 'IIF' files, to about 1/2 their original size. Then you can save the sound files for use with SoundSmith GS or SSP GS in the SS file type/format. This would effectively, allow you to load and include more complex sample/sounds and still remain within the 64k maximum, for the total of 15 instrument limitations, with SoundSmith. The FREEWARE program, Modifier by Ian Schmidt, is a GS/OS application program for converting the imported MODfile score and sounds or instruments/samples. It saves the music score and instruments as files that SS or SSP can load and use. Modifier has its limitations also. It saves the score and all samples, without regard for the (64k) limits the Ensoniq RAM places on the amount of samples possible, which total 15. MODifier makes no effort to insure that the instruments fit into 64k of DOCRAM, nor does it 'synthesize' effects SoundSmith doesn't support. It converts many module effects into SoundSmith equivalents. MODifier can't coherently convert all MOD music scores, as there are thousands of MODs and at least 19 programs on the Amiga which use some variant of the module format. MODifier primarily supports ProTracker, NoiseTracker, and StarTrekker modules. Some programs such as DeliTracker use a completely incompatible format so don't even attempt to convert DeliTracker MODs, MED MODS, OKTAMODS, OKTA-MED MODS and other like varieties. None of these Imported MODfile formats can be used with the IIgs currently and most like won't be of any use for any IIgs program support for a long time to come, 'IF EVER'. MODifier has detailed, ample documentation to assist you with using it proficiently, to its maximum abilities. SuperSound PRO is a program developed and released by 1WSW, during 1992-93, (that is a generic FREEWARE clone of SoundSmith GS) when Huibert Aalbers was a 1WSW team member. Several bugs and problems were found with the SHAREWARE and final v1.0.1 release of SoundSmith GS. In a conversation I had with Huibert Aalbers, (the author of SoundSmith GS) he informed me that he accidently destroyed some 37 lines of the SRC. CODE for SoundSmith GS v1.0.1, and was attempting to reconstruct them, to send me, so that our One World Software Wizards team could develop the SuperSoundPro music program, with continual upgrades and release it as FREEWARE. Our 1WSW team worked on it to correct some of the problems, as best we could and released it in 1993 as a FREEWARE: SSP DEMO, with Huiberts blessings and full consent. Huibert has given up on any more efforts with the IIgs, moved to Canada and from what he related in our last conversation, is now devoting all of his efforts to developing a MAC version of SoundSmith. Thus, both SoundSmith GS and the SSP programs are at their FINAL states of development. No more work is planned for either of them ! If you have the need, skills and patients to convert your MODfiles collection to SoundSmith music files, you'll have a lot of creative media to work with and can do some impressive SoundSmith GS music compositions for additional use as imports for NTGS. The following information concerning: SoundSmith GS and the SuperSoundPRO GS DEMO is an update and excerpt from the SuperSoundPRO GS (SSP) DEMO Reference Manual. This information is a concise review for the SuperSoundPro.GS (SSP) DEMO. It is also equally applicable to both SoundSmith GS v1.0 and v1.0.1. Please note: Updates to SuperSoundPRO or SoundSmith GS have been abandoned. About: SuperSoundPro.GS (SSP) DEMO First you should know that the program is not public domain and is FREEWARE. It's constructed SRC.CODES are available to any sincere and talented programmer for the asking, if they wish to do any rewrites or upgrades. SuperSoundPro is a functional and combined upgrade of SoundSmith GS v1.0 and v1.0.1. The name SuperSoundPro was suggested to me in a conversation back in 1992, I had with Earl Childers, Pres. of Seven Hills Software. They were hoping to be able to develop SoundSmith GS to a commercial version and release it. But, many problems resulted and the project was canceled. A beta version of SoundSmith GS v1.0, the (never released) commercial program by Seven Hills and ESP, was uploaded (without any authorization) to Internet and many BBS' around the world, which created many problems, bad feelings and destroyed any further development efforts from Seven Hills and the European Software Partners, (ESP). Next the SHAREWARE v1.0.1 of SoundSmith GS, released by Huibert Aalbers arrived, on-line as an alternative and hopeful solution to the abandoned SoundSmith GS v1.0 project. Realizing that SoundSmith v1.0.1 had some major bugs and limitations with MIDI functions and several other problems, our 1WSW team, (with the assistance, knowledge and blessings of our past team member Huibert Aalbers) decided to release this FREEWARE for all of you to use and enjoy, while we were (then beginning) to work on a project, for a major commercial upgrade of SoundSmith GS v2.0. As a result of many additional complications, SoundSmith GS v2.0 has been abandoned, as have any future efforts with any more upgrades to SoundSmith GS. If any of you have sent Huibert a shareware fee for SoundSmith v1.0.1 and you feel that the program didn't meet up to your expectations, please contact the 1WSW team Executive Coordinator to rectify your discontent, to the best abilities possible. SuperSoundPro.GS (SSP) is a (FREEWARE release) and full function Apple IIgs GS/OS application program, that's relevant and functional in all respects, with SoundSmith GS, using MIDISYNTH (tool 35), designed to create both; regular and 3-D enhanced stereo music with ease on your IIgs. A unique FREEWARE NDA, was also included with its release. This is a full function, SL player/recorder new desk accessory (NDA), that allows you to; play/modify/record and save synthLAB v1.1 music, from within the SSP program. You even have the ability (with an Apple MIDI interface and the proper GS/OS MIDI setup, I/O port setups and the appropriate MIDI instruments, keyboard or synthesizers) to port the synthLAB music into the SSP.GS program, via MIDI file to enhance it, as you wish, save it and use it the way you decide to use it. These options, should open up a new creative door to all Apple IIgs MIDI composers and music devotees. The program was released at Apple Expo West and to Internet in April of 1993. The SSP program is 100% compatible with all previous SoundSmith GS music, with the exception and excluding the first 'ANTICS' SoundSmith release, which saved the music score files as a P8 system file. If anybody still has music made with the first 'ANTICS' version, (CRUDE AND LIMITED AS THEY WERE) if you so wish, you can simply use any file type changer program and change the music P8 system file to the current SoundSmith GS file type. It should then load and function properly, via any current SoundSmith GS versions 0.94 thru 1.0.1 or the SSP DEMO program. The sound/sample wavebank file was a binary file and you don't need to convert it. However, keep it in mind, that neither SoundSmith or SSP can directly load and use the GS wavebank file format generated and saved by the SS or SSP programs, with its score. You can conviently, load and/or import the SS or SSP GS wavebank file, via either AudioZAP or Noise Tracker GS, extract the individual samples, save each as IFF file formats, then you can load the SS/SSP music score and the SS/SSP programs will automatically load the correct samples for the score. The SSP DEMO (FREEWARE) release, is an improved enhancement of the (OFFICIALLY) unreleased SoundSmith GS v1.0 and has somewhat better MIDI compatibility support and sync. functions, than the SHAREWARE release v1.0.1 of SoundSmith GS, having combined some improved aspects of each. About SuperSoundPro GS DEMO Instruments: The instruments (sounds/samples) used by SuperSoundPro GS DEMO, must be standard ASIF, Polysons or (NT instrument/sample/sound (IFF) files) which can be import constructed and saved with either NoiseTracker GS, any of the SSS Sound Editor versions or any of the many other Sound Editors that save IFF/AIFF samples or SoundSmith file format sound samples. As mentioned above, you can also extract and save the sample files via AudioZAP, from the SS/SSP wave bank file. SS/SSP instruments/sounds/samples are available from a multitude of sources or they can be designed, converted and saved via; the Sound Editors, which are included with many other exceptional SSP compliment programs, utilities and music/sample data disks, in the response and reply kit, you'll receive promptly, when you send your request with disks for them, with return postage. The special conversion program update of MODCONVERT, to directly convert Amiga Music Modules to SSP or SS music will be included also. About Launching: Insert the SuperSoundPRO GS DEMO. MUSIC LAUNCH/BOOT disk in disk drive 1. Point and click your mouse on the SSP.GS, to launch it from your GS/OS Turbo mini- Launcher. For those of you with limited RAM memory in your Apple IIgs, we have included a FREEWARE mini-launcher: TURBO LAUNCHER - (START), donated for update, by Seven Hills Software. If you need to use this fast load mini-launcher to conserve RAM memory, you can select the TURBO LAUNCH (START) application program, via your favorite file copy utility and replace the finder application program or your start program with it. You can then use this 'START' application (mini-launcher) program to select and launch SuperSoundPRO GS DEMO (SSP), any other P16, GS/OS application program or P8 system program. When SSP is launched, the TITLE.SCREEN appears, the 3-D Stereo INTRO.MUSIC plays and then the programs GS/OS desktop appears with one open window. About the Windows, Menu and Options: Instruments Window: This window is for a list of loaded instruments (sounds/samples) used with the SS/SSP music or songs you load. There are 4 buttons in this window for your use to: load, remove/delete instruments and save SSP music wavebank files (not music files). It's possible (currently) to load only up to 15 instruments for use with SS/SSP music. We are working on a duel RAM bank, with unlimited multiple samples/sounds, like NoiseTracker GS uses. We hope to have this included in the next release of SSP. Just when this will be released, (if ever) will depend on you 'the user'. If you want updates and improvements for the SSP DEMO program, you'll have to write and tell us what updates and improvements you want ! You can see how much memory is available by viewing the size of the largest free block at the bottom of the window. This value doesn't however, always represent the size of the largest loadable instrument, as the IIgs handles DOC Memory in a unique and special way. We can't explain how everything works in the IIgs DOC memory in this SSP.GS reference manual. You can find more information in your Apple IIgs Hardware Reference Manual. Using the DOC Memory option from the SSP.GS DEMO 'Information menu', lets you see a map of the ENSONIQ DOC Memory. When an instrument has been loaded, two other windows become active. The first one gives you information about the instrument selected in the instrument list. You'll find the fully functional and compatible MIDI parameters. The keyboard window allows you to hear the selected instrument and also see the note played in the top right part of the screen. Playing on the keyboard while the music is running with MIDI, will record the notes. The Open Music option of the File Menu allows you to load music. After loading the instruments and the music, a new window will appear. This window should look familiar to everyone who ever used; Appleworks GS spreadsheets, the older versions of SoundSmith and other programs that use this layout for: Cut/Copy/Paste functions of data. You can edit the music by selecting any zone (clicking the mouse on the block number selects the whole block, on a line number selects the line (single note position), on a track number (selects the track), using the; Cut, Paste, Copy and Clear commands. The selected zone can be extended by holding the Shift key down while pressing the mouse button. When a single case is highlighted, you can move around by using the arrow keys. These commands are identical to the ones used by AppleWorks GS, SoundSmith GS and many other programs, to make them easy to learn and user friendly. To enter a new note, you can enter the values in the three editable boxes on the music window (a single case must be selected) and pressing RETURN or you may use the keyboard shortcuts; To change the Octave press 1-7 on the numeric keypad. To change the instrument press 1-F on the main keyboard. To enter a note using the current instrument, effect and octave press: G for C , Y for C# H for D , U for D# J for E K for F , O for F# L for G , P for G# ; for A , [ for A# ' for B The effects are composed by an effect number and an effect value. They modify the way a note is played (except the set tempo effect which modifies the tempo for all the following notes). The following effects are defined; Effect: 0 = Arpeggio Value: 0 = no Arpeggio nm = Increment1=n, Increment2=m 3 = Set Volume nm = New Volume (0-$FF) 5 = Decrease Volume nm = Volume to subtract from: (Instrument Volume) 6 = Increase Volume nm = Volume to add to: (Instrument Volume) F = Set Tempo nm = New tempo You can now start to compose by using the New Music File option from the File menu. Before you start to compose new music you need to know the way SSP plays the music. You can use up to 14 tracks (0-13) simultaneously, and you can use any instrument sample/sound in any track. But, you can only play one instrument at a time in one track. We'll show you how this works with an example: Track 00 00. C#3 1000 01. E3 2000 02. --- 0000 03. C#3 1000 04. STP 0000 SSP DEMO will first play line 00. This means that it will play a C#3 note using the first sample. Then it will play line 01. To do this, it will first stop to play the C#3 note and then play the E3 note, using the second sample. This means that if the first sample is long, you won't hear it completely. If you want to continue to play a note, you must do what we did on line 02. You can repeat this many times, if your sample is very long. The instrument will continue to be played until the end of the wave is reached or a new note is played. If you want to stop a note without playing another one, you must enter a STP command instead of a note (line 04). SSP DEMO gives you total control over the stereo and 3-D (dimensional sound scape) enhancement effects. There are two different ways to select on which channel, a note will be played. The first one is used by all the IIgs music programs. Each one of the instruments has a stereo parameter that indicates, on which channel it will be played. To use this method you must select (for each instrument) in the (Instrument data Window), the stereo channel (Right or Left - R, L) that you want to assign to that particular instrument. Then, you must go to the Tracks option from the Information menu and click on the (Use Instrument data) button. The other way to use stereo is powerful and more impressive. You assign a stereo channel to each track. This means that an instrument will play on the right or left channel depending on which track it is played on. This is a very interesting and creative option. Because, it allows you to create incredible 3-D Stereo sound effects. This option is activated by clicking on the: (Use Channel/Track data) button on the: Tracks dialog box. This is the same basic Channel/Track data format used by almost all of the 'Imported MODfiles', using their four tracks. SSP, allows you to do this with up to 14 tracks, for some vivid 3-D sound scape dimensional and localization points, sweeps, etc. The Music option from the Information menu allows you to set some important parameters like the length of the music, the tempo, etc. The length of the music is given in number of blocks. If the music is for example four blocks long, you must tell the program which four blocks to play. This is necessary because you may want to repeat some blocks. You can play blocks 0,1,2 and 3 or 0,1,0,1 or 2,4,6,8, etc. Imagine that you want to play the following sequence: 0,1,2,2. Set position to 0 and then block number to 0. Then set position to 1 and block number to 1. Repeat the same steps for positions 2 and 3, setting the block number to 2. On the Music data dialog box there is also a check button. If you click on it, the entire music score will loop (or play from start to end - over and over again). The Preferences option from the Information menu, lets you set some more important parameters. The volume scroll bar sets the main volume (this is the same value that you set on the control panel). The Keyboard translation scroll bar is used to set the keyboard octave (if the keyboard translation is 2, the first note of the keyboard will be C2). The sound file format buttons allow you to select the type of file that will be used when saving a sound file (not a music file !). When the sound file format is set to Music Studio, SuperSoundPro GS will save two files, a wavebank and a sound file. These files can be loaded by Music Studio. If you're wondering why Music Studio is an option on SuperSoundPro GS, some IIgs users still enjoy using Music Studio. This allows you to use new instruments with the Music Studio program. The SuperSoundPro GS (SSP GS) binary file has the following structure: Number of instruments: 2bytes DOC Memory: 64K Instrument Definition: 92bytes*Number of instruments The Play options from the Play menu doesn't need to be explained. When using the Graphic Player option you'll see that you can move a cursor that looks like an electric guitar. Use it to select the active tracks and the ones that are displayed on the screen. Since no more than four tracks can be displayed at once, you must first un-select a track to be able to select another one. The Continue and Graphic Continue options use the value of the Position scroll bar (on the music data dialog box) to know where to start to play the music. The following is an edited and compiled collection of notes originally available from several on-line services, dealing with composing music with: SSP DEMO or SoundSmith GS. If you can't read spread-sheet music, you're probably going to initally be confused, no matter how simply I try to explain this. Although when I first started, I couldn't read spread-sheet music either. It took me about a week to get used to it. But, now it's really easy to use and fairly simple to understand. The beauty of this method for music score display and manipulation, is that it's real easy to understand and use, and the only 'user friendly' alternative to composing music, if you can't read or write normal music scores, (LIKE ME, who plays by ear). If you can read and/or write music, you'll have to learn how to translate a note on a scale to a SUPERSOUNDPRO DEMO spread-sheet-like note. It's fairly straight forward, but like anything else you've never done before: practice is the only logical way to learn how to get it all right. When you first run SUPERSOUNDPRO DEMO, you are greeted by the INTRO MUSIC AND INTRO PICTURE. If you like the program, PLEASE send your comments, (LIKES & DISLIKES). The effort and price for a postage stamp and a postcard or letter to show your interest and appreciation would be very welcomed. It's really a small price to pay for such a great (FREEWARE) MIDI sequencer composition program. Next, you'll see a dialog box containing various instrument options. At this point, as you probably already know, you can load in a song to be played (from the FILE menu.) Another thing you can do is load in an instrument (see that big "Load Instrument" button). Try loading an instrument now. Just pick one from any song you happen to have (KEEP IN MIND THAT SSP IS FULLY SOUNDSMITH MUSIC COMPATIBLE) (you'll probably have to swap disks unless you have a hard drive.) Now you'll see a keyboard & an instrument data box appear. Try clicking a few notes on the keyboard with your mouse. Nothing too spectacular here. The only reason you'll ever use the keyboard is to test an instrument before you use it to see what it sounds like. Or, if you'll be writing your own songs, this is how you'll probably do it (just like a real keyboard.) For now, don't worry about the stuff in the instrument data box. I'll get to that later. If it appears that SUPERSOUNDPRO DEMO has a problem sometimes when it comes to starting a new song. If you're not careful, you could waste a lot of time entering notes only to find out later that the tempo is stuck on zero! What this means is that your song has no tempo & it will NOT play! Here's what you do to avoid this: 1. Load in any song (ie. "open" it from the FILE menu.) 2. Close the song. 3. Start a new song by selecting "New" from the FILE menu. 4. Open the "Music" option from the INFORMATION menu. 5. Make sure the "Tempo" is set to something other than zero. 6. You're ok! Now you can start composing. There are other ways to start a new song. But, this method works the best. From here, it's a good idea to save your empty song & reload it. Then check the tempo again. You can never be too sure! While you were in the "Information" box, you might have noticed the other items: Position, Block, etc. This is where you tell SUPERSOUNDPRO how to play your song. Since SUPERSOUNDPRO uses a spread-sheet instead of a musical staff, you'll be typing your notes into "Blocks" and "Tracks." Each block can contain up to 896 notes (64 rows * 14 Tracks, 0-13). The "Information" box is where you choose how many blocks (positions) are in your song & in what order you want to play them. SUPERSOUNDPRO can play blocks in any order. For example: Position Block -------- ----- 0 0 1 1 2 1 3 2 4 2 5 1 6 3 This tells SUPERSOUNDPRO to play block #0 followed by #1 (twice), #2 (twice), #1 again, & #3 last. For your first few songs, you'll probably just play the blocks in order: 0,1,2,3,... without repeating any blocks. When you get used to using SUPERSOUNDPRO, you'll realize that many songs repeat themselves. So instead of wasting blocks on identical music, you can just repeat a block each time it's needed. So, set the number of positions to something like 5. Then set position #0 to block #0, position #1 to block #1, and so on up to position #4 (since positions start at 0, #4 is actually the fifth position.) Now you're ready to start typing in notes. Get back to the main screen by clicking "OK." you'll see the familiar blank spread-sheet. Make sure you have at least one instrument loaded & you're ready to go. Before you start entering notes, make sure your "Caps Lock" key is down. SUPERSOUNDPRO will only recognize upper case notes. Another thing you have to get used to is the numbers on the keypad and the main keyboard are DIFFERENT & they do different things. Ok, hit your "G" key. Notice that a "C" note was placed in highlighted box. The number after the "C" is the note's octave. For example, C5 means "C" in the fifth octave. You'll find that different instruments sound better in different octaves. Octave 0 is a lower note than Octave 5. Why, you might ask, did the letter "G" produce a "C" note? Well, the keyboard is mapped out like a musical keyboard as follows: key: G H J K L ; note: C D E F G A Where is the "B"??? Well, there is no key for "B". Normally, If you want a "B" you have to enter it manually. Click on the "Note" box at the top & type "B5" & hit Return to put a fifth octave B in the box. ALTERNATIVE: Because the original program was authored in SPAIN, an alternative to the 'No key for "B", does exist. As an alternative, go into the Control Panel (by pressing; Control, Option and ESC. keys) and select options. For Keyboard layout, select Spanish. Return to the program and the ";" key will give you a B note, the "M" key will give you an A note and the "\" key (to the right of the spacebar), gives you an A# note. Make certain to change back to your normal keyboard layout in the Control Panel when you quit and start with another GS/OS application program, such as a word processor or the like. Otherwise, they will be in Spanish ! Without using the 'ALTERNATIVE', in the normal keyboard layout (U.S.A.), sharp notes are done the same way as covered before the ALTERNATIVE: key: Y U O P [ note: C# D# F# G# A# Again, please note: (using U.S.A.), that some sharps don't exist: B & E. The B# is a C and a E# is an F. Notice that the keys for sharps are just above and to the right of the regular notes (just like on a real keyboard.) What about flat notes? There aren't any. Don't worry though. If you want a flat note, just use its equivalent. For example, if you need a A flat, simply use a G sharp (they are the same note anyway.) Here are the flat equivalents: flat: D E G A B use: C# D# F# G# A# As before, some flats don't exist: F & C. Fb is an E and Cb is B. Look at the keyboard below & you'll see why certain notes can't be sharp or flat: _________________________________________ | | C | | D | | | F | | G | | A | | | | # | | # | | | # | | # | | # | | | | | | | | | | | | | | | | | D | | E | | | G | | A | | B | | | | b | | b | | | b | | b | | b | | | |___| |___| | |___| |___| |___| | | | | | | | | | | C | D | E | F | G | A | B | |_____|_____|_____|_____|_____|_____|_____| For those who can't read sheet music, (LIKE ME, WHO PLAYS BY EAR) here's where the notes are on the scale: _________________________________________ F E T _____________________________ R __________ D E C B _________________________________________ B L A E _________________________________________ G F _________________________________________ E ------------------------------------------------------------------------ _________________________________________ A G _________________________________________ F B E A _____________________________ S___________ D S C _________________________________________ B A _________________________________________ G (Hopefully, that didn't confuse or mystify you to much. As above and below, I didn't lay it out or character draw it. I only obtained it from on-line text files and tech. notes, including it for your reference, hoping it might be useful). On sheet music, the clefs are marked with: T /\ __ R | / B / \ E / A \ | B / /\ S / B < < | S / L \__/ _/ E Pardon the bad (lunatic ?) artwork, but you get the idea. Now you'll notice that all your notes have no instrument associated with them yet. If you plan on using a single instrument for an entire track, you cam simply click on the track number to highlight it. Then choose "Change Sample" from the EDIT menu (instruments are also called "samples"). You'll want to change from "0" to the number of the instrument you want. The sounds, samples or instruments are numbered from 0-F (hex) according to how they are listed in the "Instruments" box. Another way to choose an instrument is to insert it manually with each note. Here's where you have to remember that the keypad numbers are different from the main numbers. The keypad is used to set a note's octave, & the main row of numbers above the keyboard are used to set the sample (instrument.) - (Samples, Instruments and Sounds are all the same thing) Here's how to usually enter notes: 1. Enter the octave using the keypad. 2. Enter the instrument using the regular numbers. 3. Enter the actual note using the proper key (see above.) You must hit the keys in this order or it might not work. If you hit the wrong key, just go back and try again. Also note that this won't work for "B" notes because they have to be typed in manually. Any note can be typed manually, & I know some people prefer to do it this way. Just click on the Note & Sample boxes to enter the note & instrument manually. The octave is set along with the note (C#5, for example). The box labeled "Effect" is for effects. These include changing tempo & volume. When you enter an effect for a note, the change is not just for that note. Whatever you do will effect all notes after the one you changed. To change tempo within the score, click on the effect box & enter "F" followed by hex number from 1-F. DO NOT TYPE "0" FOR TEMPO!!! I can't stress this enough. If you enter a zero, your song will have no tempo & will not play. To change volume, type "3" followed by a hex number from 00-FF. 00 is no volume, FF is full volume. Now for the hard part. SUPERSOUNDPRO doesn't use time signatures. In other words, there is no 4/4 2/4 3/4, etc. You have to scan your music first & see what the shortest note is. This will usually be a sixteenth note. In this case, a sixteenth note is simply one box long. An eighth note would be two boxes long. A quarter note, 4 boxes. A half note, 8 boxes. A whole note, 16 boxes. This means that for a half note, you must leave 7 empty boxes after the note. For a sixteenth note, you don't have to leave any empty boxes. You may find that when you play your song, it's too fast or too slow. Go back to the "Music" box (from the INFORMATION menu) & reset the tempo to make it sound right. Tips & hints on writing music with: SUPERSOUNDPRO DEMO or SoundSmith GS After booting SUPERSOUNDPRO DEMO and getting past the title screen & Title song a small, empty box with 4 buttons is displayed. The only button you can use at this point is Load instrument. This is how you load instruments. You can load instruments from any disk and use them. The author of SUPERSOUNDPRO, was gracious enough to include a plethora of instruments for our use, all of which sound better than any of Music Studio's sounds (but, SSP sounds may be saved into MS Wave-files. If you do this, make sure you change the envelope form in the Design instrument section of Music Studio). To change the default volume of an instrument, highlight the instrument and use the scrollbar to set the volume. You can test the notes on the keyboard and what you play on a keyboard will be recorded into your song. Now that you have selected all your instruments (you can still select more later on if you don't have enough), ( UP TO 15 INSTRUMENTS TOTALING NO LARGER THAN 64K) go to the file menu and select 'New Song.' This will give you the familiar spread-sheet that you usually see littered with 'D#5's and stuff, except that it is empty. You are now ready to begin composition. First of all, select MUSIC from the pull down menu. You should get a screen with 'Number of Positions','Position','Block' and 'Tempo'. Set the number of positions to about 10 or so, and then set POSITION #0 to BLOCK #0 and Position #1 to Block #1 and so on and so forth and then set Tempo to whatever you want. (REMEMBER DON'T USE 0 (ZERO)) 1 is the fastest and 16 is the slowest. The Position bar and the Block bar are vital. The program plays the blocks according to how you tell it to: for example, SSP starts at position zero and at position zero, you have instructed SSP to play Block #0. After playing Block #0, SSP moves on to the next position. At position #1, you have instructed SSP to play block #1. But, let's say you want to repeat a block. Set position #10 (or whatever) to block #10 and Position #11 to block #10. This will repeat the 10th block. Hit the 'OK' button to get back to the Spreadsheet. What you should do at this point, is put any note on the screen and save it to /RAM5 and then close the spreadsheet and load the song back up (but, 'Cancel' the loading of new instruments). This way, you have loaded a song and are modifying it. Delete the dummy note you have placed on the screen and now you are ready to begin. On some other songs, you may have noticed the way the notes were arranged: Note instrument || | | D#5 | 4000 | | ||| Octave Effect Note: This is the note. The musical alphabet is CDEFGAB and that is how SSP looks at it's notes. Some times a note will have # after it. This denotes a 'Sharp' or an increase in the notes pitch. Since SSP doesn't recognize flats, only sharps may be used, such as G# instead of Ab (these are both the same note). Sometimes, though, notes can't be sharp. These notes are B and E. This is because B# is C and E# is F. Keep that in mind. (The following is an example of a musical staff. If you'll notice, they are in alphabetical order from bottom to top, counting spaces and lines) Spaces Lines(Treble) _______________________________________________ F(ine) E _______________________________________________ D(oes) C _______________________________________________ B(oy) A _______________________________________________ G(ood) F _______________________________________________ E(very) _______________________________________________ A(lways) G _______________________________________________ F(ine) E _______________________________________________ D(o) (Bass) C _______________________________________________ B(oys) A _______________________________________________ G(ood) Octave: This is what pitch the note will be played at. Each new octave starts at C(ex: A4 B4 C5 D5). You can usually use the C in the Treble Clef as C5, the C in between the two clefs (middle C) as C4 and the C in the Bass Clef as C3. Your octave may range from a low 2 to a high 7. Instrument: This is the instrument number to play. They range from 1 to F(a Hex number{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}). You can use any instrument in any row. Effect: A very useful tool. This affects the way a note preforms. The most useful effects are Volume and Tempo. To change the volume of your score, go up to the effect box and type 3 (this says, I'm changing volume, to SSP) followed by any number from 00 to FF (again, this is Hex). 00 is no volume at all and FF is full blast. This type of volume only affects the current note. To change the Tempo, go to the Effect box and type F (again, "I'm changing Tempo now!!") followed by any number from 01 to 0F. (WARNING-WARNING: Under NO circumstances type F00 and play it as it will shut off the speed of your song. There is no way out of this (the Tempo Bar in the pull-down is now all solid, and you can't change Tempo again in your song because your song isn't moving!) Your only option is to reload the song. Again please make note of it. The first question everyone asks is "How do you set the Time Signature?" Forget this. There are no time signatures in SUPERSOUNDPRO. If you want to make a whole note, put down a note and leave 3 blank spaces after it. If you want to make an eight note, put down a note and leave no spaces after it (if you aren't adding anything after it, that's fine. The note will play to it's full extent, but it won't mess anything up. If you're pickey, place 'STP' in place of the note/octave. This should stop the note. Let's say you have sixteenth notes in your song: to make a whole note, put down the note and leave 7 blank spaces after it. To make a quarter note, put down a note with 1 blank space. As you can see, I've doubled the distance between all notes, and with this, you may also need to half the tempo. Usually, however, duration doesn't mean anything in SSP. What is important is when each note starts since that is all that is really audible. Shortcuts: Instead of typing in each note, octave, instrument, and effect, you can simply highlight the square you want to work on by clicking on it. Then, typing any number on the keypad will set the octave, and any number on the top-number-row will set the instrument (apparently, 5 on the keypad and 5 on the keyboard are different!). Typing the keys between [G] and [:;] on the keyboard will produce the notes C though A. The letters on the row above will produce the sharp notes. Ex: [Y][U] [C#][D#] [G][H] will give you [C ][D ] Of course, all the Open Apple-commands work as well. Cut and Paste is vital to a song writer. If you want to copy part of your song, take your mouse, click and hold at the top part of your segment and drag the mouse all the way to the bottom part of your segment. You may also drag it across several rows. Now that it's all highlighted, release the mouse and select Cut or Copy (cut removes the selection and puts it into memory, copy copies it into memory). Now take the mouse and move it to the top corner of where you want your segment to end up and then select paste(or hit Open Apple-V). and, there it is. You may notice Fade IN and Fade Out in the menu(OA+ and OA-). This is a real effective item. All you do is select the area of the song (for example, the last block) and then select Fade Out or Fade In. SSP automatically calculates the variables needed for a nice, even fade in/out. Change Sample: If, for some reason, you decide you don't like the instrument you wrote your song with, select the portion of the song with the instrument (you can select whole rows, columns, and blocks by clicking on the heading), and go to change sample. Put simply, SSP is asking: You, do want me to change all the instruments Number x to instruments Number y. This is useful. Set Octave: This is rather useful. Sometimes, you make a really great Drum Beat, and when you listen to it, you discover it sounds like your supper is attacking you from the inside because the octave is to low. (THIS IS A GROWL EFFECT, THAT I USE IN SOME OF MY VAMPS COMPOSITIONS). Select the area and then pick Change Octave from the Menu. This will set everything in the selected area to Octave x. A drawback of this is when you have multiple octaves such as B3 C4 D4, it will change them all to the same octave, such as B5 C5 D5 (which will produce 1 high note and 2 low notes instead of 3 low notes). (WELL, NOTHING IS PERFECT)! Never forget about the UNDO item. If you make a bad mistake (such as fading a part of a song you don't want to) go up and select Undo and it will undo it. DOC: It shows exactly what memory specifically designated for your DOC (Digital Oscillator Chip (the ENSONIQ sound chip!) is used up by the instrument data. Play and Graphic Play are used to listen to your music. Continue and Graphic Continue doesn't continue the song from where you stopped it, it acts as a loop so it will play forever. Stop Sound stops it from playing. (You can do Continue and listen to the song while you're writing it. It'll play the notes after you add them.) After you have a song all written out, go back to MUSIC in the Pull-down and set the Total Positions to the greatest position +1. This will cause the song to end right after the last position. (+1 because Number of Positions starts with 1 and Position Number starts with 0). Clicking on the LOOP box will make the song start over after the last position. A few Hints: To give your song a spacial hollow type sound, copy all the tracks and fill up all 14 tracks with your music. The sound effect is interesting. The lower the octave of a note, the longer it gets. To make a long fuzzy sound, use C2 with the instrument. If you're just starting out, I recommend adding a drum beat to a classic song such as 5th Symphony, Blue Danube, etc. See the example of Pachelbel's Canon in D under the name 'New.Cannon'. To give that BassDrum2 more bass, play 2 or 3 notes at the exact same time. Echo the note, by staggering in adjacent tracks, positioned one above and one below the original tracks note position. If there are any questions at all, please, feel free to write me or give me a call. I look forward to your reply. I hope this SSP GS Reference Manual will help you to understand the basics for using SuperSoundPro GS, how the program works and how to compose some music. This SSP GS Reference Manual covers all the important functions of this program. I know that some points could be explained in greater details. However, since I wanted to include this compiled Reference manual, with the SSP.GS program, I couldn't spend more time on it. I will furnish any MORE comprehensive SSP.GS program operations that I can, which you request with the REPLY KIT, that includes some useful compliment programs, utilities and music/sample data disks. As soon as you send your (REPLY/RESPONSE) with your disks and return postage, to cover mailing cost you'll receive your reply kit, promptly. Make sure the program is distributed on a FREE basis, please be advised, this program is FREEWARE. We spent a great deal of time, energy and effort designing the SuperSoundPro GS DEMO for the Apple IIgs world to use and enjoy FREELY, as an alternative to the SoundSmith ShareWare versions. Hopefully, you'll like this (FREEWARE) full-function MIDI program enough to send your comments, (LIKES & DISLIKES) about the SuperSoundPro GS DEMO program. The REPLY/RESPONSE accessories package will be sent to you when you respond with your comments and any problems that you find with the SSP DEMO program, when you use it. Please send your responses, with four 800k (3.5) DSDD disks, return postage and your comments, if you want the REPLY/RESPONSE accessories package to: Charles T. Turley, Ph.D. - (Dr. Tom) Executive Coordinator One World Software Wizards 115 Santa Clara St. Brisbane, CA. 94005 USA Tel. (415) 468-1609 Remember, you'll receive a wonderful collection of useful accessories, sounds and music, along with any additional detailed information or updated files I can present, that you request, covering every function of these SSP compliment programs, with tips, tricks and special Noise Tracker GS (VAMPS/NTV) Virtual (3-D) Audio Global Stereo sound scape design techniques. I hope you'll enjoy using the SuperSoundPro GS DEMO. If you like the SSP GS DEMO please let me know. If you don't, let me know also. If you have any problems with the program, please let me know what they are, so I can advise you how to correct them. If you can't locate it anywhere, send two blank disks with return postage and it will be mailed to you promptly, for your use, review and comments. A final (reminder) note to all SS and SSP users: Huibert Aalbers accidently destroyed some of the SRC.CODE for his release of SoundSmith GS v1.0.1. He is a full time university student and he is involved with writing a SoundSmith for the MAC and also an assembly language tutorial for the MAC, with whatever spare time he has. Without the SRC.CODES for the original SoundSmith GS v1.0.1 our team was not able to do very much to improve the problems that were discovered with SoundSmith GS v1.0.1. We have attempted to reconstruct the codes and do the best we could to correct those problems by rewriting, enhancing, patching and releasing the SSP GS DEMO as a FREEWARE for the IIgs world to use. Huibert had a disabled IIgs that refused to function. He's bought a new MAC and has moved to Quebec, Canada. to go to, live, work and continue with his education. Effective, last November of 1993, Huibert left the 1WSW team and has abondoned any more efforts for any upgrades with either SoundSmith GS or SuperSoundPRO GS or any efforts with the IIgs. KNOWN BUGS WITH THE SSP GS DEMO PROGRAM THERE IS ONLY ONE KNOWN BUG WITH THE DEMO PROGRAM ITSELF. BE VERY SELECTIVE WHEN YOU DO ANY CUTS AND PASTES INTO TRACK 13. (don't cut & paste an entire track into track 13-do your cut & paste efforts to track 13 in small increments or sections only !) THIS TRACK MAY LOCK UP YOUR ENTIRE PROGRAM AND CAUSE YOU TO HAVE TO RE-BOOT, THUS YOU WOULD LOSE ANYTHING YOU HAD DONE SO FAR WITH THE COMPOSITION OF YOUR SONG/MUSIC. BE SURE TO SAVE YOUR WORK OFTEN TO AVOID THIS PROBLEM. CONCERNING THE 3-D SL MIDI NDA: IF YOU LOAD A (SL FILE) AND PLAY IT THEN LOAD A SS OR SSP MUSIC FILE OR SONG, YOU MAY HAVE SOME SEVERE CONFLICTS WITH THE SAMPLES AND THE SOUND OF THE SAMPLES. THEY WILL OFTEN RETAIN THE SOUNDS OF SAMPLES FROM THE SL MUSIC FILE. OTHER STRANGE CONFLICTS AND PROBLEMS MAY ALSO RESULT WITH THE INCORRECT USE OF THIS NDA WITH THE SSP DEMO PROGRAM. TRIAL AND ERROR ARE YOUR BEST TEACHERS USING THIS NDA WITH THIS PROGRAM. SO, USE IT WITH CARE ! I'VE ATTEMPTED TO DISCOVER AND RELATE ALL THE BUGS I COULD FIND WITH THIS SPECIALLY DESIGNED AND CONSTRUCTED SSP DEMO BOOT DISK AND SSP DEMO PROGRAM DATA DISK. IF YOU ENCOUNTER ANY OTHER BUGS OR ANOMALIES, PLEASE WRITE AND LET ME KNOW, SO THAT I CAN RELATE THE INFORMATION, WITH ANY POSSIBLE SOLUTIONS ON TO OTHER USERS. I hope you'll understand that we have done the best we could, with what we had to work with, our limited resources and the limited time we had to work with it. If you have the talents and/or skills, resources and time to improve this SSP GS DEMO (FREEWARE) release, please do ! I'll be happy to furnish you with the SRC.CODES. Next comes an edited excerpt, dealing with notes for tuning with SoundSmith GS from: Ian Schmidt, via his original on-line posting. Note that MegaTracker is Ian's SoundSmith Player. How to sample perfectly tuned SoundSmith/MegaTracker instruments First off, print out the tuning table at the end of this SECTION. Compare the frequencies to those offered by your favorite sampler (I personally wouldn't do this without either Audio Animator and its sw, or AudioZap. Once you find the closest one, its a matter of checking which note that corresponds to and then sampling that note from your instrument at that frequency. Then clean it up, convert to ASIF, and you're done. Tuning for standard MOD-type sequencers (including SoundSmith GS) (note: NoiseTracker is slightly flat from these specs) (note2: MOD/SS's definition of MIDI octaves is one above the Intl. MIDI Associations's...so subtract 1 octave to get a normal MIDI note) Note Frequency (Hz) Note Frequency (Hz) C1 N/A C2 2107 C#1 1130 C#2 2193 D1 1182 D2 2346 D#1 1233 D#2 2499 E1 1336 E2 2601 F1 1387 F2 2754 F#1 1490 F#2 2958 G1 1542 G2 3111 G#1 1645 G#2 3315 A1 1747 A2 3519 A#1 1850 A#2 3723 B1 1953 B2 3927 Note Frequency (Hz) Note Frequency (Hz) C3 4182 C4 8313 C#3 4386 C#4 8823 D3 4692 D4 9333 D#3 4947 D#4 9894 E3 5253 E4 10506 F3 5559 F4 11067 F#3 5865 F#4 11730 G3 6222 G4 12444 G#3 6579 G#4 13158 A3 6681 A4 13974 A#3 7395 A#4 14790 B3 7854 B4 15657 Note Frequency (Hz) Note Frequency (Hz) C5 16626 C6 33303 C#5 17646 C#6 35292 D5 18717 D6 37383 D#5 19788 D#6 39627 E5 20961 E6 41973 F5 22236 F6 44472 F#5 23562 F#6 47124 G5 24939 G6 49929 G#5 26418 G#6 52887 A5 27999 A6 55998 A#5 29682 A#6 59364 B5 31467 B6 62883 --------------------------------------------------------------------------- EXPLORING SOUNDSMITH "Exploring SoundSmith" is an 82 page guide to all the features of SoundSmith. The publication, from Al Crout and Gareth Jones, covers every possible aspect of making music with the IIgs and SoundSmith. Sections include such topics as; getting the best possible sound from a IIgs, musical composition using the SoundTracks module (THE MUSIC SCORE AND EDITING PORTION OF THE PROGRAM), MIDI recording and play back and saving your work to storage devices. It has appendices which briefly cover a number of items of shareware and freeware for the enhancement of SoundSmith including DreamVoir, AudioZap and Noise Tracker GS. I found the MIDI recording information, reviews and tech. materials very revealing, informative and easy to understand. This portion alone makes the publication a very worthy addition for anybody using SoundSmith that never fully understood its MIDI abilities before. Exploring SoundSmith costs $15.00 (US) post paid and can be ordered from: Gareth Jones Apartment 1 3872 Sunset Street Burnaby British Columbia Canada V5G 1T3 Tel. (604) 435-1416 Gareth furnished me with a copy for review and I must say it's an very informative and well written publication, that all serious SoundSmith users should have. In a lengthy, friendly and informative conversation, I had last week, with Al Crout, he informed me that he was working on a HyperStudio stack, that had a lot of information from the publication with undated information and other things of interest for SoundSmith users. If you should care to make contact with him for information about this, his mailing address follows: Al Crout Apt. 102, 215 Mowat Street New Westminster British Columbia CANADA V3M 4B1 Next, is my compiled and edited collection of notes and on-line postings, that deal with Imported Modules, with some possible novel and experimental procedures, you might care to try. A composite of all related information concerning the construction and operation of Imported MODULE files (MODfiles) from the Amiga, follows. They were passed along to me from many people and collected over the past few years, from many on-line services. They all pertain to commands, special effects and native languages of the Amiga computer. You shouldn't confuse the context of this portion of this collective article and reviews, with programming languages or commands native to the IIgs. The content of this portion is presented for experimental and research use only, to help any of you, that care to take on the challenging adventure of modifying, altering, enhancing or reconstructing an Imported Module file that's a standard text file type. If you have an Imported Module file that is a text file, you should be able to load it into WRITE AWAY!, a (ShareWare) which is a very useful, well designed and unique word processor GS/OS application. You might also try using the ShadowWrite (FreeWare) NDA. If you have an Imported Module file that isn't a text file, change it to a text file with any file type changer program. Such efforts, will become needless and antiquated, for their originally intended purpose, within couple of months or so, with the release of Noise Tracker GS v2.00. But, pending its release, which will allow you to construct, edit and arrange MODfiles (ProTracker file Format) music scores, then save them, (Native MODfiles from the IIgs - AT LAST), you can review this following information to gain an over-all understanding of MODfiles, for whatever use you care to apply the knowledge you might gain, for your future efforts with MODfile music on the IIgs. Even with the release of Noise Tracker GS v2.00, (the first GS/OS application program for composing, editing and saving MODfiles), you can still experiment and play around with the MODfiles or even with the Noise Tracker GS v2.00 music file format, and (with trial & error), obtain some interesting results. Sometimes they could result in unique effects and sometimes they could result in completely corrupting the files structure and usefulness. As with any file you are experimenting, attempting to modify or alter, you should always keep a copy of the original, in the event you mess up, with your efforts. --------------------------------------------------------------------------- Protracker 2.1A Song/Module Format Information: Courtesy of: Lars Hamre and Peter Hanning 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 This little byte 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", and then comes the packed data. In a module, all the samples are stored right after the pattern data. To determine where a sample starts and stops, you use the sample info 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. Amiga Imported MOD tips from Mike: This is an explanation for how the notes are played on the Amiga. So, you can figure out how to handle them. The Amiga's audio DMA runs on a bus cycle of 2.79365E-07 seconds. (All you really need to know about the Amiga's audio DMA for your purposes is this number.) All the sample playback periods are based on this number. The table can be constructed of Amiga playback sample periods with the following formula: 1 Sample period=--------------------------- Sampling rate * 2.79365E-07 And you get the following table. C C# D D# E F F# G G# A A# B ------------------------------------------------------------ 1st Octave.| 856 808 762 720 678 640 604 570 538 508 480 453 | 2nd Octave.| 428 404 381 360 339 320 302 285 269 254 240 226 | 3rd Octave.| 214 202 190 180 170 160 151 143 135 127 120 113 This gives the values for the 3 octaves the Amiga can play from a raw sample. To get the sample rates in samples per second that you'll need you use the formula: 1 Sample rate(Hz) =--------------------------- Sample period * 2.79365E-07 (from table) So for a note C-2 the sample rate is 8363 Hz. The fine tuning is accomplished buy adding/subtracting to the periods taken from period table at playback. Thus you get this conversion formula: 1 Sample rate(Hz) =------------------------------------------ (Sample period + Finetuning) * 2.79365E-07 (Finetuning value can be positive or negative) MED and the newer Trackers can also use IFF instrument files which contain a sample for each octave. With these instruments you use only the playback rates from one octave but a different sample from the file. This allows five instead of three octaves per instrument. Tempo (playing speed) To understand this completely, you need to know some technical aspects. MED uses the CIAB timers for timing. They give " timing pulses " that trigger the MED's player interrupt. On each timing pulse effects are handled (e.g. commands 1,2,3,4,5,D, hold/decay, synthsounds). But, the new note is usually not played on each pulse. The time between timing pulses can be changed (primary tempo). The new note is usually played on every 6th pulse. But, this can be changed also (secondary tempo). For example, if new note was played on every 3rd pulse, the playing speed would be twice as fast. This doesn't affect the speed of effects. Graphically: pulse \ PLAY NOTE the time between pulses can be changed (primary tempo) pulse / DO EFFECTS \ \ pulse DO EFFECTS \ The number of pulses between / notes can be changed (4 in this example). pulse DO EFFECTS / This is the secondary tempo. / pulse PLAY NOTE MED V3.2 player commands/effects: This section gives information about commands/effects. They are events which affect the playing and they are handled by the MED player routine. C - 2 1 2 3 4 | \ | command number \| data byte You insert the commands usually by hand (turn editing on, move cursor on the command numbers and type the numbers). It may be a bit easier if you turn off automatic-advance with Ctrl-A. Here are the descriptions of each of the currently recognized commands: Command 0: ARPEGGIO MIDI: controller value This command changes the pitch of the note quickly (6 times during 1 note). It can be used to create "chords" or special effects. If you've listened to music made with the C-64, you MUST have heard arpeggios. The pitch is changed between 3 different pitches during one note: the 1st pitch is the pitch of the original note the 2nd pitch is the pitch of the original note + the 1st number of databyte halfsteps up the 3rd pitch is the pitch of the original note + the 2nd number of databyte halfsteps up Note: 3rd pitch | 2nd pitch | 1st pitch | 3rd pitch | 2nd pitch | 1st pitch changed 6 times during note It may be a bit difficult to understand, so here's an example: You want to make an arpeggio which sounds like C-major chord. The lowest pitch is C (C-2 in this example). The second is E-2 (4 halfsteps higher than C-2). The third is G-2 (7 halfsteps higher than C-2). 4 halfsteps from C-2 -+ 7 halfsteps from C-2 |/ That produces: C-2 1047 --- 0047 --- 0047 and so on... Data byte for a minor chord would be 37. The arpeggios sound better with some instruments than others. MIDI: See command 5 for a description. Command 1: SLIDE UP MIDI: pitchbender up This command slides up the pitch of the current track. With Amiga samples: Decreases the period of the note the amount of databyte on each timing pulse. Sounds rather technical ?? Yes. The instructions for previous (before 2.10) versions of MED contained detailed instructions for making good-sounding slides with this command. Because this version now contains the easy automatic slide making (Amiga-T), I felt that these instructions are not necessary any more. If you use this function for special effects (not real slides) then you can experiment with the values for the databyte. Example: A-1 1000 --- 0000 --- 010F <- slide up a bit With MIDI: This commands works very differently with MIDI. It actually "turns" the pitchbender 8 * databyte steps up on each timing pulse. Because the actual range of the pitchbender may be different with different MIDI-devices, you must find the right value by experimenting. There's also one thing you should know: when a new note is played, the pitchbender isn't reset automatically. To reset the pitchbender, you use this command with databyte zero. Example: G-2 L1FF <-turn it up very quick --- 0000 --- 0100 <- then reset the pitchbender Command 2: SLIDE DOWN MIDI: pitchbender down It's just like command 1 except it slides down. Command 3: PORTAMENTO MIDI: set pitchbender This is another slide command (on some old MED versions (2.00) this was a vibrato command, see command 5 now). It can be used to make perfect slides more easily. First an example: C-2 5000 <- played note C --- 0000 E-2 5305 <- this note is not played!! Instead, slide target is set --- 0300 to G-2 and slide speed is 5 --- 0300 <- when speed is zero, use the previous speed --- 0306 <- the speed can be changed, of course This example would slide from C-2 to E-2, but the slide stops EXACTLY when E-2 is reached. The remaining 3's have no effect. This command is easier to handle with automatic slide making (see Edit/S1 above). MIDI: By using this command, you can set the pitchbender to an absolute value, instead of sliding as commands 1 and 2 do. The data byte is the pitchbender value, expressed as a signed hexadecimal digit (a nightmare to non-programmers!). 00 = center position 80 (-7F) = smallest value 7F = largest value Example: C-2 3000 --- 037F <- pitchbender to max. value --- 0300 <- reset Command 4: VIBRATO MIDI: modulation wheel The first number of the data byte is vibrato speed, the second is vibrato depth. If the numbers are zeros, the previous speed and depth is used. Example: F-215000 --- 0000 --- 0433 <- slow, not much depth --- 0437 <- more depth --- 043F <- full depth --- 0482 <- fast, not very deep MIDI: This command affects the modulation wheel of the current channel. The data byte can be 00 - 7F. 00 = no modulation, 7F = maximum. Values 80 - FF are reserved for future expansion (and won't work). Command 5: OLD VIBRATO MIDI: controller number This is the old vibrato command (previously it was 3). The command 3 is automatically converted to 5 when loading old MED songs. The pitch of the note is changed between two values, databyte is the depth. Example: A#1 J502 --- 0507 increasing depth --- 0517 v --- 0527 --- 0537 MIDI: Command 5 in conjunction with command 0 allows you to change any controller of MIDI (command $Bx cc vv, where cc = controller number, vv = value). First you set the number of controller you want to change with command 5. Then you can select the value with command 0. Subsequent uses of command 0 will affect the controller previously set with command 5. Each channel has its own controller number. If the controller value is $00, you can't use '00', because the command '000' means 'do nothing'. Instead, you type '80'. Acceptable controller numbers and values are $00 - $7F. For example: (assuming instrument 3 is set to MIDI channel 1) C-2 3000 --- 0507 <- controller $07, volume, according to MIDI standard D-2 307F <- set max. volume ($7F), command $B0 $07 $7F is sent --- 0000 F-3 3001 <- small volume ($01) --- 055C <- select controller $5C (tremolo depth) G-4 3080 <- set to 0 (note: $80 = $00) Command 8: SET HOLD/DECAY MIDI: set hold only This command must be located on the same line with a note. The command assigns the hold and decay values for the note (see above for description about hold/decay). hold value decay----------+| || Example: C-3 3824 -|- 3000 -|- 3000 --- 0000 Command 9: SEC. TEMPO MIDI: no action This command sets the secondary tempo (the number of timing pulses/note). The argument must be 01 - 20. Example: --- 0903 <= double tempo --- 0000 Command A: VOLUME SLIDE MIDI: polyph aftertouch This is the same as command D (for Noisetracker/Protracker compatibility). However, please use D instead of this. MIDI: Command A changes the polyphonic aftertouch of the most recent note. The value should be $00 - $7F. Example: C-3 4000 --- 0A30 <- aftertouch $30 --- 0000 --- 0A00 <- aftertouch $00 Command B: POSITION JUMP MIDI: position jump This command lets you make songs that have a beginning which is played only once and then some part which is looped forever. Position jump causes the jump to play sequence number pointed by the data byte. If the data byte is 0, then the playseq jumps to the first entry. Example: --- 0B02 <- start playing from play sequence number 3 Command C: SET VOLUME MIDI: set volume You can override the default volume of the instrument with this command. Example: A-3 4C20 <- played with volume 20 There are 65 volume levels (0 - 64), 0 = no sound, 64 = maximum. The data byte of command C can be 00 - 64 or 00 - 40 (decimal or hex). Non-programmers will probably want to use the decimal numbers. See (Play/[Dec/Hex]). If you want the playroutine to have maximum performance, then use hex values. It's also possible to change the volume of already played note. Note that it doesn't work with MIDI-instruments. Example: A-3 4000 --- 0000 --- 0C10 <- volume to 10 It's possible to change the default volume of an instrument (MED V2 and later). The value must be between 80 and C0 (always hex!). Value $80 = volume 0, and $C0 = 64. Note: This can cause trouble in multi-modules, because the set of instruments (and their default volumes) are common. I recommend that you change the default volume only on non-multi-modules. Command D: VOLUME SLIDE MIDI: channel pressure You can increase/decrease volume smoothly with this command. The data byte is divided in two parts: C-3 3D01 || |+- Amount of decresdendo +-- Amount of crescendo If crescendo is zero, then the decrescendo is performed. Otherwise only crescendo is performed. Example: C-2 3C40 --- 0D01 <- a bit more quiet --- 0D01 <- even more --- 0D20 <- and crescendo back to original One unit in these commands means six actual volume units, so this example would look like this, when using the C-command (except that it doesn't sound so smooth): C-2 3C40 (volumes are decimal in this example) --- 0C34 <- -6 --- 0C28 <- -6 --- 0C40 <- +12 MIDI: This command sends a channel pressure (channel aftertouch) message using the channel in which the most recent note was sent. The databyte should be $00 - $7F. D#5 J000 --- 0D40 <- channel aftertouch $40 --- 0D00 <- to $00 Command E: SYNTH/JMP MIDI: pan control When used with synth/hybrid instruments, this command triggers a jump in the waveform command sequence. The databyte is the jump destination (line number). Example: C-4 4000 <- this should be synth/hybrid instrument --- 0000 --- 0E05 <- cause a jump to line # 5 With MIDI-instruments, this command controls the stereo location of the sound. The data byte can be 00 - 7F. left mid right | | | 00 3F 7F If you've used MED V2.00/V2.01 or NoiseTracker/SoundTracker, you may remember that this command controls the low-pass filter. I think that it was unnecessary to spend the command E only for controlling only a single switch. See command F. Command F: TEMPO/MISC. MIDI: tempo/misc. Command F has many different actions depending on the data byte. If the data byte is zero (00), this command causes the immediate jumping to the next block on the playing sequence (or to the beginning of this block if you're only playing the block). This function is better to implement by making the block shorter (takes less memory). Example: C-2 4F00 <- this is the last note of this block When the data byte if 01 - F0, the command changes the tempo. This is the primary tempo (length of the pause between timing pulses). If the new tempo is 01 - 0A, it is compatible with Trackers, but now you should use the command 9 instead of this command, as it's directly Tracker-compatible (set the primary tempo to 33). Example: E-3 6FF0 <- highest tempo --- 0000 --- 0F0B <- slowest Data bytes FF1 - FFF are reserved for special actions, some of them are currently used: FF1 causes the same note played actually twice. This way it's possible to create fast rhythms. C-3 2FF1 is same as C-3 2000 C-3 2000 with double tempo FF2 plays the note only once, but it is not started immediately: C-3 2FF2 is same as --- 0000 C-3 2000 with double tempo FF3 works like FF1 except the note is played three times (very fast). FF8 turns off the low-pass filter (power-LED will dim). FF9 turns the low-pass filter on (bright LED). FFA sends MIDI "hold pedal on"-command (works only with MIDI-instruments). FFB sends MIDI "hold pedal off"-command (works only with MIDI-instruments). FFD works only with Amiga-samples. It causes the pitch of the channel to be set to the pitch of the new note, but the new note is not replayed. C-1 2000 <- play note --- 0000 C-2 2FFD <- don't replay the note, just set the pitch to C-2 FFE stops playing immediately. If you want to make a song which plays only once, put this command to the end of the song. This command can be easily entered: Click "Stop playing" while holding the Shift-key. FFF Stops the note on the current track. Works with both Amiga- and MIDI- instruments. Nearly identical to "C00" on Amiga-samples, but because "C00" doesn't work with MIDI, I made this command. About MMD: Tempo (playing speed) To understand this completely, you need to know some technical aspects. MED uses the CIAB timers for timing. They give " timing pulses " that trigger the MED's player interrupt. On each timing pulse effects are handled (e.g. commands 1,2,3,4,5,D, hold/decay, synthsounds). But, the new note is usually not played on each pulse. The time between timing pulses can be changed (primary tempo). The new note is usually played on every 6th pulse. But this can be changed also (secondary tempo). For example, if new note was played on every 3rd pulse, the playing speed would be twice as fast. This doesn't affect the speed of effects. Graphically: pulse \ PLAY NOTE the time between pulses can be changed (primary tempo) pulse / DO EFFECTS \ \ pulse DO EFFECTS \ The number of pulses between / notes can be changed (4 in this example). pulse DO EFFECTS / This is the secondary tempo. / pulse PLAY NOTE MED V3.2 player commands/effects: This section gives information about commands/effects. They are events which affect the playing and they are handled by the MED player routine. C - 2 1 2 3 4 | \ | command number \| data byte You insert the commands usually by hand (turn editing on, move cursor on the command numbers and type the numbers). It may be a bit easier if you turn off automatic-advance with Ctrl-A. Here are the descriptions of each of the currently recognized commands: Command 0: ARPEGGIO MIDI: controller value This command changes the pitch of the note quickly (6 times during 1 note). It can be used to create "chords" or special effects. If you've listened to music made with the C-64, you MUST have heard arpeggios. The pitch is changed between 3 different pitches during one note: the 1st pitch is the pitch of the original note the 2nd pitch is the pitch of the original note + the 1st number of databyte halfsteps up the 3rd pitch is the pitch of the original note + the 2nd number of databyte halfsteps up Note: 3rd pitch | 2nd pitch | 1st pitch | 3rd pitch | 2nd pitch | 1st pitch changed 6 times during note It may be a bit difficult to understand, so here's an example: You want to make an arpeggio which sounds like C-major chord. The lowest pitch is C (C-2 in this example). The second is E-2 (4 halfsteps higher than C-2). The third is G-2 (7 halfsteps higher than C-2). 4 halfsteps from C-2 -+ 7 halfsteps from C-2 |/ That produces: C-2 1047 --- 0047 --- 0047 and so on... Data byte for a minor chord would be 37. The arpeggios sound better with some instruments than others. MIDI: See command 5 for a description. Command 1: SLIDE UP MIDI: pitchbender up This command slides up the pitch of the current track. With Amiga samples: Decreases the period of the note the amount of databyte on each timing pulse. Sounds rather technical ?? Yes. The instructions for previous (before 2.10) versions of MED contained detailed instructions for making good-sounding slides with this command. Because this version now contains the easy automatic slide making (Amiga-T), I felt that these instructions are not necessary any more. If you use this function for special effects (not real slides) then you can experiment with the values for the databyte. Example: A-1 1000 --- 0000 --- 010F <- slide up a bit With MIDI: This commands works very differently with MIDI. It actually "turns" the pitchbender 8 * databyte steps up on each timing pulse. Because the actual range of the pitchbender may be different with different MIDI-devices, you must find the right value by experimenting. There's also one thing you should know: when a new note is played, the pitchbender isn't reset automatically. To reset the pitchbender, you use this command with databyte zero. Example: G-2 L1FF <-turn it up very quick --- 0000 --- 0100 <- then reset the pitchbender Command 2: SLIDE DOWN MIDI: pitchbender down It's just like command 1 except it slides down. Command 3: PORTAMENTO MIDI: set pitchbender This is another slide command (on some old MED versions (2.00) this was a vibrato command, see command 5 now). It can be used to make perfect slides more easily. First an example: C-2 5000 <- played note C --- 0000 E-2 5305 <- this note is not played!! Instead, slide target is set --- 0300 to G-2 and slide speed is 5 --- 0300 <- when speed is zero, use the previous speed --- 0306 <- the speed can be changed, of course This example would slide from C-2 to E-2, but the slide stops EXACTLY when E-2 is reached. The remaining 3's have no effect. This command is easier to handle with automatic slide making (see Edit/S1 above). MIDI: By using this command, you can set the pitchbender to an absolute value, instead of sliding as commands 1 and 2 do. The data byte is the pitchbender value, expressed as a signed hexadecimal digit (a nightmare to non-programmers!). 00 = center position 80 (-7F) = smallest value 7F = largest value Example: C-2 3000 --- 037F <- pitchbender to max. value --- 0300 <- reset Command 4: VIBRATO MIDI: modulation wheel The first number of the data byte is vibrato speed, the second is vibrato depth. If the numbers are zeros, the previous speed and depth is used. Example: F-215000 --- 0000 --- 0433 <- slow, not much depth --- 0437 <- more depth --- 043F <- full depth --- 0482 <- fast, not very deep MIDI: This command affects the modulation wheel of the current channel. The data byte can be 00 - 7F. 00 = no modulation, 7F = maximum. Values 80 - FF are reserved for future expansion (and won't work). Command 5: OLD VIBRATO MIDI: controller number This is the old vibrato command (previously it was 3). The command 3 is automatically converted to 5 when loading old MED songs. The pitch of the note is changed between two values, databyte is the depth. Example: A#1 J502 --- 0507 increasing depth --- 0517 v --- 0527 --- 0537 MIDI: Command 5 in conjunction with command 0 allows you to change any controller of MIDI (command $Bx cc vv, where cc = controller number, vv = value). First you set the number of controller you want to change with command 5. Then you can select the value with command 0. Subsequent uses of command 0 will affect the controller previously set with command 5. Each channel has its own controller number. If the controller value is $00, you can't use '00', because the command '000' means 'do nothing'. Instead, you type '80'. Acceptable controller numbers and values are $00 - $7F. For example: (assuming instrument 3 is set to MIDI channel 1) C-2 3000 --- 0507 <- controller $07, volume, according to MIDI standard D-2 307F <- set max. volume ($7F), command $B0 $07 $7F is sent --- 0000 F-3 3001 <- small volume ($01) --- 055C <- select controller $5C (tremolo depth) G-4 3080 <- set to 0 (note: $80 = $00) Command 8: SET HOLD/DECAY MIDI: set hold only This command must be located on the same line with a note. The command assigns the hold and decay values for the note (see above for description about hold/decay). hold value decay----------+| || Example: C-3 3824 -|- 3000 -|- 3000 --- 0000 Command 9: SEC. TEMPO MIDI: no action This command sets the secondary tempo (the number of timing pulses/note). The argument must be 01 - 20. Example: --- 0903 <= double tempo --- 0000 Command A: VOLUME SLIDE MIDI: polyph aftertouch This is the same as command D (for Noisetracker/Protracker compatibility). However, please use D instead of this. MIDI: Command A changes the polyphonic aftertouch of the most recent note. The value should be $00 - $7F. Example: C-3 4000 --- 0A30 <- aftertouch $30 --- 0000 --- 0A00 <- aftertouch $00 Command B: POSITION JUMP MIDI: position jump This command lets you make songs that have a beginning which is played only once and then some part which is looped forever. Position jump causes the jump to play sequence number pointed by the data byte. If the data byte is 0, then the playseq jumps to the first entry. Example: --- 0B02 <- start playing from play sequence number 3 Command C: SET VOLUME MIDI: set volume You can override the default volume of the instrument with this command. Example: A-3 4C20 <- played with volume 20 There are 65 volume levels (0 - 64), 0 = no sound, 64 = maximum. The data byte of command C can be 00 - 64 or 00 - 40 (decimal or hex). Non-programmers will probably want to use the decimal numbers. See (Play/[Dec/Hex]). If you want the playroutine to have maximum performance, then use hex values. It's also possible to change the volume of already played note. Note that it doesn't work with MIDI-instruments. Example: A-3 4000 --- 0000 --- 0C10 <- volume to 10 It's possible to change the default volume of an instrument (MED V2 and later). The value must be between 80 and C0 (always hex!). Value $80 = volume 0, and $C0 = 64. Note: This can cause trouble in multi-modules, because the set of instruments (and their default volumes) are common. I recommend that you change the default volume only on non-multi-modules. Command D: VOLUME SLIDE MIDI: channel pressure You can increase/decrease volume smoothly with this command. The data byte is divided in two parts: C-3 3D01 || |+- Amount of decresdendo +-- Amount of crescendo If crescendo is zero, then the decrescendo is performed. Otherwise only crescendo is performed. Example: C-2 3C40 --- 0D01 <- a bit more quiet --- 0D01 <- even more --- 0D20 <- and crescendo back to original One unit in these commands means six actual volume units, so this example would look like this, when using the C-command (except that it doesn't sound so smooth): C-2 3C40 (volumes are decimal in this example) --- 0C34 <- -6 --- 0C28 <- -6 --- 0C40 <- +12 MIDI: This command sends a channel pressure (channel aftertouch) message using the channel in which the most recent note was sent. The databyte should be $00 - $7F. D#5 J000 --- 0D40 <- channel aftertouch $40 --- 0D00 <- to $00 Command E: SYNTH/JMP MIDI: pan control When used with synth/hybrid instruments, this command triggers a jump in the waveform command sequence. The databyte is the jump destination (line number). Example: C-4 4000 <- this should be synth/hybrid instrument --- 0000 --- 0E05 <- cause a jump to line # 5 With MIDI-instruments, this command controls the stereo location of the sound. The data byte can be 00 - 7F. left mid right | | | 00 3F 7F If you've used MED V2.00/V2.01 or NoiseTracker/SoundTracker, you may remember that this command controls the low-pass filter. I think that it was unnecessary to spend the command E only for controlling only a single switch. See command F. Command F: TEMPO/MISC. MIDI: tempo/misc. Command F has many different actions depending on the data byte. If the data byte is zero (00), this command causes the immediate jumping to the next block on the playing sequence (or to the beginning of this block if you're only playing the block). This function is better to implement by making the block shorter (takes less memory). Example: C-2 4F00 <- this is the last note of this block When the data byte if 01 - F0, the command changes the tempo. This is the primary tempo (length of the pause between timing pulses). If the new tempo is 01 - 0A, it is compatible with Trackers, but now you should use the command 9 instead of this command, as it's directly Tracker-compatible (set the primary tempo to 33). Example: E-3 6FF0 <- highest tempo --- 0000 --- 0F0B <- slowest Data bytes FF1 - FFF are reserved for special actions, some of them are currently used: FF1 causes the same note played actually twice. This way it's possible to create fast rhythms. C-3 2FF1 is same as C-3 2000 C-3 2000 with double tempo FF2 plays the note only once, but it is not started immediately: C-3 2FF2 is same as --- 0000 C-3 2000 with double tempo FF3 works like FF1 except the note is played three times (very fast). FF8 turns off the low-pass filter (power-LED will dim). FF9 turns the low-pass filter on (bright LED). FFA sends MIDI "hold pedal on"-command (works only with MIDI-instruments). FFB sends MIDI "hold pedal off"-command (works only with MIDI-instruments). FFD works only with Amiga-samples. It causes the pitch of the channel to be set to the pitch of the new note, but the new note is not replayed. C-1 2000 <- play note --- 0000 C-2 2FFD <- don't replay the note, just set the pitch to C-2 FFE stops playing immediately. If you want to make a song which plays only once, put this command to the end of the song. This command can be easily entered: Click "Stop playing" while holding the Shift-key. FFF Stops the note on the current track. Works with both Amiga- and MIDI- instruments. Nearly identical to "C00" on Amiga-samples, but because "C00" doesn't work with MIDI, I made this command. Tempo (playing speed) To understand this completely, you need to know some technical aspects. MED uses the CIAB timers for timing. They give " timing pulses " that trigger the MED's player interrupt. On each timing pulse effects are handled (e.g. commands 1,2,3,4,5,D, hold/decay, synthsounds). But, the new note is usually not played on each pulse. The time between timing pulses can be changed (primary tempo). The new note is usually played on every 6th pulse. But this can be changed also (secondary tempo). For example, if new note was played on every 3rd pulse, the playing speed would be twice as fast. This doesn't affect the speed of effects. Graphically: pulse \ PLAY NOTE the time between pulses can be changed (primary tempo) pulse / DO EFFECTS \ \ pulse DO EFFECTS \ The number of pulses between / notes can be changed (4 in this example). pulse DO EFFECTS / This is the secondary tempo. / pulse PLAY NOTE MED V3.2 player commands/effects: This section gives information about commands/effects. They are events which affect the playing and they are handled by the MED player routine. C - 2 1 2 3 4 | \ | command number \| data byte You insert the commands usually by hand (turn editing on, move cursor on the command numbers and type the numbers). It may be a bit easier if you turn off automatic-advance with Ctrl-A. Here are the descriptions of each of the currently recognized commands: Command 0: ARPEGGIO MIDI: controller value This command changes the pitch of the note quickly (6 times during 1 note). It can be used to create "chords" or special effects. If you've listened to music made with the C-64, you MUST have heard arpeggios. The pitch is changed between 3 different pitches during one note: the 1st pitch is the pitch of the original note the 2nd pitch is the pitch of the original note + the 1st number of databyte halfsteps up the 3rd pitch is the pitch of the original note + the 2nd number of databyte halfsteps up Note: 3rd pitch | 2nd pitch | 1st pitch | 3rd pitch | 2nd pitch | 1st pitch changed 6 times during note It may be a bit difficult to understand, so here's an example: You want to make an arpeggio which sounds like C-major chord. The lowest pitch is C (C-2 in this example). The second is E-2 (4 halfsteps higher than C-2). The third is G-2 (7 halfsteps higher than C-2). 4 halfsteps from C-2 -+ 7 halfsteps from C-2 |/ That produces: C-2 1047 --- 0047 --- 0047 and so on... Data byte for a minor chord would be 37. The arpeggios sound better with some instruments than others. MIDI: See command 5 for a description. Command 1: SLIDE UP MIDI: pitchbender up This command slides up the pitch of the current track. With Amiga samples: Decreases the period of the note the amount of databyte on each timing pulse. Sounds rather technical ?? Yes. The instructions for previous (before 2.10) versions of MED contained detailed instructions for making good-sounding slides with this command. Because this version now contains the easy automatic slide making (Amiga-T), I felt that these instructions are not necessary any more. If you use this function for special effects (not real slides) then you can experiment with the values for the databyte. Example: A-1 1000 --- 0000 --- 010F <- slide up a bit With MIDI: This commands works very differently with MIDI. It actually "turns" the pitchbender 8 * databyte steps up on each timing pulse. Because the actual range of the pitchbender may be different with different MIDI-devices, you must find the right value by experimenting. There's also one thing you should know: when a new note is played, the pitchbender isn't reset automatically. To reset the pitchbender, you use this command with databyte zero. Example: G-2 L1FF <-turn it up very quick --- 0000 --- 0100 <- then reset the pitchbender Command 2: SLIDE DOWN MIDI: pitchbender down It's just like command 1 except it slides down. Command 3: PORTAMENTO MIDI: set pitchbender This is another slide command (on some old MED versions (2.00) this was a vibrato command, see command 5 now). It can be used to make perfect slides more easily. First an example: C-2 5000 <- played note C --- 0000 E-2 5305 <- this note is not played!! Instead, slide target is set --- 0300 to G-2 and slide speed is 5 --- 0300 <- when speed is zero, use the previous speed --- 0306 <- the speed can be changed, of course This example would slide from C-2 to E-2, but the slide stops EXACTLY when E-2 is reached. The remaining 3's have no effect. This command is easier to handle with automatic slide making (see Edit/S1 above). MIDI: By using this command, you can set the pitchbender to an absolute value, instead of sliding as commands 1 and 2 do. The data byte is the pitchbender value, expressed as a signed hexadecimal digit (a nightmare to non-programmers!). 00 = center position 80 (-7F) = smallest value 7F = largest value Example: C-2 3000 --- 037F <- pitchbender to max. value --- 0300 <- reset Command 4: VIBRATO MIDI: modulation wheel The first number of the data byte is vibrato speed, the second is vibrato depth. If the numbers are zeros, the previous speed and depth is used. Example: F-215000 --- 0000 --- 0433 <- slow, not much depth --- 0437 <- more depth --- 043F <- full depth --- 0482 <- fast, not very deep MIDI: This command affects the modulation wheel of the current channel. The data byte can be 00 - 7F. 00 = no modulation, 7F = maximum. Values 80 - FF are reserved for future expansion (and won't work). Command 5: OLD VIBRATO MIDI: controller number This is the old vibrato command (previously it was 3). The command 3 is automatically converted to 5 when loading old MED songs. The pitch of the note is changed between two values, databyte is the depth. Example: A#1 J502 --- 0507 increasing depth --- 0517 v --- 0527 --- 0537 MIDI: Command 5 in conjunction with command 0 allows you to change any controller of MIDI (command $Bx cc vv, where cc = controller number, vv = value). First you set the number of controller you want to change with command 5. Then you can select the value with command 0. Subsequent uses of command 0 will affect the controller previously set with command 5. Each channel has its own controller number. If the controller value is $00, you can't use '00', because the command '000' means 'do nothing'. Instead, you type '80'. Acceptable controller numbers and values are $00 - $7F. For example: (assuming instrument 3 is set to MIDI channel 1) C-2 3000 --- 0507 <- controller $07, volume, according to MIDI standard D-2 307F <- set max. volume ($7F), command $B0 $07 $7F is sent --- 0000 F-3 3001 <- small volume ($01) --- 055C <- select controller $5C (tremolo depth) G-4 3080 <- set to 0 (note: $80 = $00) Command 8: SET HOLD/DECAY MIDI: set hold only This command must be located on the same line with a note. The command assigns the hold and decay values for the note (see above for description about hold/decay). hold value decay----------+| || Example: C-3 3824 -|- 3000 -|- 3000 --- 0000 Command 9: SEC. TEMPO MIDI: no action This command sets the secondary tempo (the number of timing pulses/note). The argument must be 01 - 20. Example: --- 0903 <= double tempo --- 0000 Command A: VOLUME SLIDE MIDI: polyph aftertouch This is the same as command D (for Noisetracker/Protracker compatibility). However, please use D instead of this. MIDI: Command A changes the polyphonic aftertouch of the most recent note. The value should be $00 - $7F. Example: C-3 4000 --- 0A30 <- aftertouch $30 --- 0000 --- 0A00 <- aftertouch $00 Command B: POSITION JUMP MIDI: position jump This command lets you make songs that have a beginning which is played only once and then some part which is looped forever. Position jump causes the jump to play sequence number pointed by the data byte. If the data byte is 0, then the playseq jumps to the first entry. Example: --- 0B02 <- start playing from play sequence number 3 Command C: SET VOLUME MIDI: set volume You can override the default volume of the instrument with this command. Example: A-3 4C20 <- played with volume 20 There are 65 volume levels (0 - 64), 0 = no sound, 64 = maximum. The data byte of command C can be 00 - 64 or 00 - 40 (decimal or hex). Non-programmers will probably want to use the decimal numbers. See (Play/[Dec/Hex]). If you want the playroutine to have maximum performance, then use hex values. It's also possible to change the volume of already played note. Note that it doesn't work with MIDI-instruments. Example: A-3 4000 --- 0000 --- 0C10 <- volume to 10 It's possible to change the default volume of an instrument (MED V2 and later). The value must be between 80 and C0 (always hex!). Value $80 = volume 0, and $C0 = 64. Note: This can cause trouble in multi-modules, because the set of instruments (and their default volumes) are common. I recommend that you change the default volume only on non-multi-modules. Command D: VOLUME SLIDE MIDI: channel pressure You can increase/decrease volume smoothly with this command. The data byte is divided in two parts: C-3 3D01 || |+- Amount of decresdendo +-- Amount of crescendo If crescendo is zero, then the decrescendo is performed. Otherwise only crescendo is performed. Example: C-2 3C40 --- 0D01 <- a bit more quiet --- 0D01 <- even more --- 0D20 <- and crescendo back to original One unit in these commands means six actual volume units, so this example would look like this, when using the C-command (except that it doesn't sound so smooth): C-2 3C40 (volumes are decimal in this example) --- 0C34 <- -6 --- 0C28 <- -6 --- 0C40 <- +12 MIDI: This command sends a channel pressure (channel aftertouch) message using the channel in which the most recent note was sent. The databyte should be $00 - $7F. D#5 J000 --- 0D40 <- channel aftertouch $40 --- 0D00 <- to $00 Command E: SYNTH/JMP MIDI: pan control When used with synth/hybrid instruments, this command triggers a jump in the waveform command sequence. The databyte is the jump destination (line number). Example: C-4 4000 <- this should be synth/hybrid instrument --- 0000 --- 0E05 <- cause a jump to line # 5 With MIDI-instruments, this command controls the stereo location of the sound. The data byte can be 00 - 7F. left mid right | | | 00 3F 7F If you've used MED V2.00/V2.01 or NoiseTracker/SoundTracker, you may remember that this command controls the low-pass filter. I think that it was unnecessary to spend the command E only for controlling only a single switch. See command F. Command F: TEMPO/MISC. MIDI: tempo/misc. Command F has many different actions depending on the data byte. If the data byte is zero (00), this command causes the immediate jumping to the next block on the playing sequence (or to the beginning of this block if you're only playing the block). This function is better to implement by making the block shorter (takes less memory). Example: C-2 4F00 <- this is the last note of this block When the data byte if 01 - F0, the command changes the tempo. This is the primary tempo (length of the pause between timing pulses). If the new tempo is 01 - 0A, it is compatible with Trackers, but now you should use the command 9 instead of this command, as it's directly Tracker-compatible (set the primary tempo to 33). Example: E-3 6FF0 <- highest tempo --- 0000 --- 0F0B <- slowest Data bytes FF1 - FFF are reserved for special actions, some of them are currently used: FF1 causes the same note played actually twice. This way it's possible to create fast rhythms. C-3 2FF1 is same as C-3 2000 C-3 2000 with double tempo FF2 plays the note only once, but it is not started immediately: C-3 2FF2 is same as --- 0000 C-3 2000 with double tempo FF3 works like FF1 except the note is played three times (very fast). FF8 turns off the low-pass filter (power-LED will dim). FF9 turns the low-pass filter on (bright LED). FFA sends MIDI "hold pedal on"-command (works only with MIDI-instruments). FFB sends MIDI "hold pedal off"-command (works only with MIDI-instruments). FFD works only with Amiga-samples. It causes the pitch of the channel to be set to the pitch of the new note, but the new note is not replayed. C-1 2000 <- play note --- 0000 C-2 2FFD <- don't replay the note, just set the pitch to C-2 FFE stops playing immediately. If you want to make a song which plays only once, put this command to the end of the song. This command can be easily entered: Click "Stop playing" while holding the Shift-key. FFF Stops the note on the current track. Works with both Amiga- and MIDI- instruments. Nearly identical to "C00" on Amiga-samples, but because "C00" doesn't work with MIDI, I made this command. EFFECT COMMANDS --------------- Effect commands on Protracker should be compatible with all other trackers. 0 - None/Arpeggio 8 - * NOT USED * 1 - Portamento Up 9 - SampleOffset 2 - Portamento Down A - VolumeSlide 3 - TonePortamento B - PositionJump 4 - Vibrato C - Set Volume 5 - ToneP + VolSlide D - PatternBreak 6 - Vibra + VolSlide E - Misc. Cmds 7 - Tremolo F - Set Speed E - COMMANDS ------------ The E command has been altered to contain more commands than one. E0- Filter On/Off E8- * NOT USED * E1- Fineslide Up E9- Retrig Note E2- Fineslide Down EA- FineVol Up E3- Glissando Control EB- FineVol Down E4- Vibrato Control EC- NoteCut E5- Set Finetune ED- NoteDelay E6- Patternloop EE- PatternDelay E7- Tremolo Control EF- Invert Loop Cmd 0. Arpeggio [Range:$0-$F/$0-$F] ----------------------------------- Usage: $0 + 1st halfnote add + 2nd halfnote add Arpeggio is used to simulate chords. This is done by rapidly changing the pitch between 3(or 2) different notes. It sounds very noisy and grainy on most samples, but ok on monotone ones. Example: C-300047 C-major chord: (C+E+G or C+4+7 halfnotes) C-300037 C-minor chord: (C+D#+G or C+3+7 halfnotes) Cmd 1. Portamento up [Speed:$00-$FF] ------------------------------------ Usage: $1 + portamento speed Portamento up will simply slide the sample pitch up. You can NOT slide higher than B-3! (Period 113) Example: C-300103 1 is the command, 3 is the portamentospeed. NOTE: The portamento will be called as many times as the speed of the song. This means that you'll sometimes have trouble sliding accurately. If you change the speed without changing the sliderates, it will sound bad... Cmd 2. Portamento down [Speed:$00-FF] ------------------------------------- Usage: $2 + portamento speed Just like command 1, except that this one slides the pitch down instead. (Adds to the period). You can NOT slide lower than C-1! (Period 856) Example: C-300203 2 is the command, 3 is the portamentospeed. Cmd 3. Tone-portamento [Speed:$00-$FF] -------------------------------------- Usage: Dest-note + $3 + slidespeed This command will automatically slide from the old note to the new. You don't have to worry about which direction to slide, you need only set the slide speed. To keep on sliding, just select the command $3 + 00. Example: A-200000 First play a note. C-300305 C-3 is the note to slide to, 3 the command, and 5 the speed. Cmd 4. Vibrato [Rate:$0-$F,Dpth:$0-$F] -------------------------------------- Usage: $4 + vibratorate + vibratodepth Example: C-300481 4 is the command, 8 is the speed of the vibrato, and 1 is the depth of the vibrato. To keep on vibrating, just select the command $4 + 00. To change the vibrato, you can alter the rate, depth or both. Use command E4- to change the vibrato-waveform. Cmd 5. ToneP + Volsl [Spd:$0-$F/$0-$F] -------------------------------------- Usage: $5 + upspeed + downspeed This command will continue the current tone portamento and slide the volume at the same time. Compatible with Noisetracker 2.0. Example: C-300503 3 is the speed to turn the volume down. C-300540 4 is the speed to slide it up. Cmd 6. Vibra + Volsl [Spd:$0-$F/$0-$F] -------------------------------------- Usage: $6 + upspeed + downspeed This command will continue the current vibrato and slide the volume at the same time. Compatible with Noisetracker 2.0. Example: C-300605 5 is the speed to turn the volume down. C-300640 4 is the speed to slide it up. Cmd 7. Tremolo [Rate:$0-$F,Dpth:$0-$F] -------------------------------------- Usage: $7 + tremolorate + tremolodepth Tremolo vibrates the volume. Example: C-300794 7 is the command, 9 is the speed of the tremolo, and 4 is the depth of the tremolo. To keep on tremoling, just select the command $7 + 00. To change the tremolo, you can alter the rate, depth or both. Use command E7- to change the tremolo-waveform. Cmd 9. Set SampleOffset [Offs:$00-$FF] -------------------------------------- Usage: $9 + Sampleoffset This command will play from a chosen position in the sample, and not from the beginning. The two numbers equal the two first numbers in the length of the sample. Handy for speech samples. Example: C-300923 Play sample from offset $2300. Cmd A. Volumeslide [Speed:$0-$F/$0-$F] -------------------------------------- Usage: $A + upspeed + downspeed Example: C-300A05 5 is the speed to turn the volume down. C-300A40 4 is the speed to slide it up. NOTE: The slide will be called as many times as the speed of the song. The slower the song, the more the volume will be changed on each note. Cmd B. Position-jump [Pos:$00-$7F] ---------------------------------- Usage: $B + position to continue at Example: C-300B01 B is the command, 1 is the position to restart the song at. This command will also perform a pattern-break (see 2 pages below). You can use this command instead of restart as on Noisetracker, but you must enter the position in hex! Cmd C. Set volume [Volume:$00-$40] ---------------------------------- Usage: $C + new volume Well, this old familiar command will set the current volume to your own selected. The highest volume is $40. All volumes are represented in hex. (Programmers do it in hex, you know!) Example: C-300C10 C is the command, 10 is the volume (16 decimal). Cmd D. Pattern-break [Pattern-pos:00-63, decimal] ------------------------------------------------- Usage: $D + pattern-position This command just jumps to the next song-position, and continues play from the patternposition you specify. Example: C-300D00 Jump to the next song-position and continue play from patternposition 00. Or: C-300D32 Jump to the next song-position and continue play from patternposition 32 instead. Cmd E0. Set filter [Range:$0-$1] -------------------------------- Usage: $E0 + filter-status This command jerks around with the sound-filter on some A500 + A2000. All other Amiga-users should keep out of playing around with it. Example: C-300E01 disconnects filter (turns power LED off) C-300E00 connects filter (turns power LED on) Cmd E1. Fineslide up [Range:$0-$F] ---------------------------------- Usage: $E1 + value This command works just like the normal portamento up, except that it only slides up once. It does not continue sliding during the length of the note. Example: C-300E11 Slide up 1 at the beginning of the note. (Great for creating chorus effects) Cmd E2. Fineslide down [Range:$0-$F] ------------------------------------ Usage: $E2 + value This command works just like the normal portamento down, except that it only slides down once. It does not continue sliding during the length of the note. Example: C-300E26 Slide up 6 at the beginning of the note. Cmd E3. Glissando Ctrl [Range:$0-$1] ------------------------------------ Usage: $E3 + Glissando-Status Glissando must be used with the tone-portamento command. When glissando is activated, tone portamento will slide a half note at a time, instead of a straight slide. Example: C-300E31 Turn Glissando on. C-300E30 Turn Glissando off. Cmd E4. Set vibrato waveform [Range:$0-$3] ------------------------------------------ Usage: $E4 + vibrato-waveform Example: C-300E40 Set sine(default) E44 Don't retrig WF C-300E41 Set Ramp Down E45 Don't retrig WF C-300E42 Set Squarewave E46 Don't retrig WF C-300E43 Set Random E47 Don't retrig WF Cmd E5. Set finetune [Range:$0-$F] ---------------------------------- Usage: $E5 + finetune-value Example: C-300E51 Set finetune to 1. Use these tables to figure out the finetune-value. Finetune: +7 +6 +5 +4 +3 +2 +1 0 Value: 7 6 5 4 3 2 1 0 Finetune: -1 -2 -3 -4 -5 -6 -7 -8 Value: F E D C B A 9 8 Cmd E6. PatternLoop [Loops:$0-$F] ---------------------------------- Usage: $E6 + number of loops This command will loop a part of a pattern. Example: C-300E60 Set loopstart. C-300E63 Jump to loop 3 times before playing on. Cmd E7. Set tremolo waveform [Range:$0-$3] ------------------------------------------ Usage: $E7 + tremolo-waveform Example: C-300E70 Set sine (default) E74 Don't retrig WF C-300E71 Set Ramp Down E75 Don't retrig WF C-300E72 Set Squarewave E76 Don't retrig WF C-300E73 Set Random E77 Don't retrig WF Cmd E9. Retrig note [Value:$0-$F] ------------------------------- Usage: $E9 + Tick to Retrig note at. This command will retrig the same note before playing the next. Where to retrig depends on the speed of the song. If you retrig with 1 in speed 6 that note will be trigged 6 times in one note slot. Retrig on hi-hats! Example: C-300F06 Set speed to 6. C-300E93 Retrig at tick 3 out of 6. Cmd EA. FineVolsl up [Range:$0-$F] ---------------------------------- Usage: $EA + value This command works just like the normal volumeslide up, except that it only slides up once. It does not continue sliding during the length of the note. Example: C-300EA3 Slide volume up 1 at the beginning of the note. Cmd EB. FineVolsl down [Range:$0-$F] ------------------------------------ Usage: $EB + value This command works just like the normal volumeslide down, except that it only slides down once. It does not continue sliding during the length of the note. Example: C-300EB6 Slide volume down 6 at the beginning of the note. Cmd EC. Cut note [Value:$0-$F] ------------------------------ Usage: $EC + Tick to cut note at. This command will cut the note at the selected tick, creating extremely short notes. Example: C-300F06 Set speed to 6. C-300EC3 Cut at tick 3 out of 6. Note that the note is not really cut, the volume is just turned down. Cmd ED. NoteDelay [Value:$0-$F] ------------------------------- Usage: $ED + ticks to delay note. This command will delay the note to the selected tick. Example: C-300F06 Set speed to 6. C-300ED3 Play note at tick 3 out of 6. If you use ED0, the note will be delayed a little anyway. You can play the same note on two channels, delay one, and get a nice flanging effect. Cmd EE. PatternDelay [Notes:$0-$F] ---------------------------------- Usage: $EE + notes to delay pattern. This command will delay the pattern the selected numbers of notes. Example: C-300EE8 Delay pattern 8 notes before playing on. All other effects are still active when the pattern is being delayed. Cmd EF. Invert Loop [Speed:$0-$F] --------------------------------- Usage: $EF + Invertspeed This command will need a short loop ($10,20,40,80 etc. bytes) to work. It will invert the loop byte by byte. Sounds better than funkrepeat... Example: C-300EF8 Set invspeed to 8. To turn off the inverting, set invspeed to 0, or press ctrl + Z. This effect will trash the sample, and will probably be removed in the next version. Cmd F. Set speed [Speed:$00-$FF] -------------------------------- Usage: $F + speed This command will set the speed of the song. Vblank: Range 01-FF - Normal timing CIA: Range 01-1F - Set vblank speeds with CIA timing. CIA: Range 20-FF - Set BPM speeds, range 32-255. Both: Range 00 - STOP song. ABOUT: THE SYNTHETIC SOUND EDITOR (USED WITH THE AMIGA MODULES) This is the editor, which is used to design simple pieces of waveforms and to " program " the volume and pitch altering sequences. Synthetic sounds don't take much memory (that's the main advantage of them). They can use the whole 5-octave range. Although they are quite simple, they usually sound quite "cool" (and remind me of the good old C-64). Getting started: First load MED, select the Instr-panel, click the Synth-gadget to initialize a new synthsound. Then click the Synth-display selection gadget to display the synthsound editor. Please turn editing off. You can play the current sound with keyboard, like ordinary samples. Waveform editing: There are two waveform displays, the left one is the "master waveform display" and the right one is for intermediate editing (it also serves as a copy buffer). Between the waveform displays are some gadgets, that are used for transferring waveforms between displays. First, there are two copy gadgets. If you press the left copy gadget, the right waveform will be copied to the left one (and vice versa). Gadget "<- EXCHANGE ->" exchanges the waveforms on the left and right. "<- MIX" mixes the left waveform to the right waveform. It is a powerful tool that can be needed quite often. "<-ADD" is similar to the mix, but it doesn't produce any average between the waveforms (= waveforms, from now on). The waveforms are simply added together. It's possible, that the waveforms exceed the upper and lower limits (in that case, they are truncated). Two "<- EDIT" "EDIT->" gadgets allow you to select either of the displayed waveforms as a current waveform, which is then used in some editing functions. Sometimes they're automatically set (when you draw the waveform with mouse, for example). "UNDO" undoes your last editing operation. It can be quite useful. "RANGE ALL" selects the current waveform, so that any editing operations affect the whole waveform. Freehand drawing: A very simple way to create waveforms is to draw them from scratch. This is easily done. Just press the left mouse button and draw. There are two drawing modes. The default is "pixel". The other is "line". This can be used for drawing straight lines. There's also a mix-mode, that works in both "line" and "pixel" -mode. It mixes the drawed pixels or lines with the already existing data. Mode-selection gadgets are located below "RANGE ALL". Waveform length: Each waveform in synthsound can be 2 - 128 bytes long (it must be even, though). The shorter the waveform, the higher the pitch (it also depends on the waveform itself). Usually, to make the pitches compatible with other instruments, you should use length 2, 4, 8, 16, 32, 64 or 128. The length can be changed with "LEN:" gadgets below the left waveform, by typing in a new value or by clicking the single-step gadgets. Multiple waveforms: Each synthsound can consist of more than one waveform (the maximum is actually 64). On the left, below the left waveform, there's a set of gadgets: curr. waveform # | 0 < > / 00 |/ \| next/prev number of the last waveform The arrow gadgets select the next/previous waveform. As this is an operation that is needed often, there are keyboard shortcuts: Alt-cursor left = previous Alt-cursor right = next There are two Add gadgets that allow you to increase the number of waveforms. "Last" adds a new waveform after the last waveform. "Here" inserts a new waveform here, and shifts the others. Del gadgets: "Last" deletes the last waveform. "Here" deletes the current waveform. Preset waveforms: There are some simple, often needed preset waveforms available at a single click. First, make sure, that the destination waveform is the current waveform (selected with the EDIT <-/-> gadgets). Then, just click the preset waveform icon. The icons are located at the bottom of the editor. The available waveforms are: sine, saw up/down, pulse, random and triangle. The CLR-gadget clears the current waveform. The ALL-gadget clears the whole synthsound (so be careful..) Range operations: These are some basic operations, that are applied to the selected range (highlighted white). You can select the range by dragging the mouse over the waveform with the right mouse button down. You can select the whole waveform by clicking "RANGE ALL". The Range start/Range end gadgets at the lower right corner of the synthsound editor can be used to make small corrections to the area. When there's no range selected, there's a single horizontal white line. This is the cursor. Some editing operations need it. The cursor position can be set by clicking the right mouse button on the waveform area. There are also three narrow gadgets (on the left of the preset waveform gadgets) for positioning the cursor: cursor to cursor to end start | | < + > | cursor to the middle (of the waveform) On the middle of the screen, there's a word "RNG", followed by a strip of gadgets: RNG Cut Copy Paste Clr Dbl Rev < > Cut- (works only on left waveform). It "cuts" the selected area, which is then moved to the right waveform display. Copy- copies the selected range to the right waveform, but doesn't cut it away. Paste- copies the contents of the right waveform to the position pointed by the cursor. Clr- clears the range. Dbl- "doubles" the range, making it play one octave higher. Rev- reverses the range. < or > shift the ranged data to left or right. There are two other editing operations: stretch and volume change. Stretch allows you to stretch a point of the waveform towards some other point (understand?? no?? then try this:) For example, select a sine wave. Then position the cursor on the middle of the waveform (there's a gadget for this purpose, see above). Now activate the "STRETCH:"-gadget (on the left lower corner of the synthsound ed). Type in the amount of moving, e.g. 32. This should demonstrate it... If the number you type in is negative, the point is stretched to left. Volume change allows you to increase/decrease the volume of selected range: First, select a range. Then activate the "VOL.CHG:"-gadget. Now you must enter the amount of volume change (in %'s). For example, to halve the volume, you should type 50. If you want to double the volume, type 200. The volume will be changed when you press Return. Transformation: This is quite a powerful feature. It allows you to change a waveform to another smoothly (by creating the waveforms between them). Demonstration: Allocate 9 new waveforms (click Add/Last 9 times). Now you have 10 waveforms. Move to waveform 00, and select a pulse waveform, for example. Then click Transform: Start to mark the beginning of transformation range. Move to waveform 09 (the last one). Put here a sine waveform. Click Transform: Do, and the magic is done. If you view the waveforms 01 - 08, you'll notice that there's now a smooth transition from the pulse wave to the sine wave. PLEASE NOTE: AGAIN ALL OF THIS DATA AND INFORMATION (WHICH FOLLOWS) CONCERNING 'THE PROGRAMMING LANGUAGE' DEALS WITH THE AMIGA AND NOT WITH THE IIGS SPECIFICALLY. --------------------------------------------------------------------------- THE PROGRAMMING LANGUAGE ======================== Note: please read this section carefully before experimenting, because you can lock up your machine with the synthsound programming language (as with any other language) The programming language is used for controlling the volume/pitch/vibrato/ waveforms/arpeggio/etc... of the synthsound. It consist of simple keywords, of which some have an argument. The programming is done using two lists of commands/numbers. These lists are displayed through a small window below the right waveform display. First there are line numbers in decimal and hex (two leftmost columns). The middle column contains the volume sequence, while the rightmost is the waveform/pitch sequence. volume ctrl seq | line | waveform ctrl seq | | | 00 00 40 00 01 01 END END These lists are both max. 127 ($7F) entries long. The list is always terminated with "END" instruction (it's automatically there so you don't have to do that). You can scroll the list with cursor up/down -keys. The cursor can be moved horizontally using the cursor left/right -keys. There are six possible cursor locations (3 for both lists). When entering commands, the cursor should be on the leftmost position of that list. Values are entered by pointing the cursor over the value to be changed and entering a new value. Commands and numbers are entered with keyboard. You can insert entries to the list with the Return-key (or clicking Ins-gadget), and delete using Del (or clicking Del-gadget). JMP commands are renumbered when entries are inserted or deleted. ALL NUMBERS IN THE SEQUENCE LISTS ARE HEXADECIMAL. Just remember this, and you have no problems (fingers crossed :^) Also, the editing (Esc) must be on before the lists can be changed. First, let's examine some example sequences: This is a volume sequence: 00 40 <= set initial volume to 64 (hex $40, did you already forget?) 01 CHD <= command, that means "Set volume change down speed" 02 03 <= argument (speed = 3) 03 END Here's another: 00 00 <= initial volume = 0 01 CHU <= Command: Set volume change up 02 07 <= speed = 7 03 WAI <= Command: Wait 04 10 <= wait 10 pulses 05 CHU <= Set volume change up 06 00 <= speed = 0 -> stop changing volume 07 WAI <= Wait 08 70 <= 70 pulses 09 CHD <= Cmd: Set volume change down 0A 01 <= speed = 1 (slow) 0B END Third: 00 40 <= vol = $40 01 30 <= vol = $30 (without command, the values are volume changes) 02 20 <= vol = $20 03 END And fourth, finally: 00 40 <= vol = $40 01 CHD <+ <= change down speed.. 02 01 | <= ..= 1 03 WAI | <= Wait.. 04 20 | <= ..20 05 CHU | <= change up 06 01 | <= ..1 07 WAI | <= Wait.. 08 20 | <= ..20 again 09 JMP | <= Jump (= goto) 0A 01 -+ <= to line number 01 0B END Now some waveform/pitch sequences. waveform/pitch sequence is the "mastersequence" while the volume sequence is a kind of "slave sequence". First: (the simplest case) 00 00 <= set waveform #00 01 END A bit more complex: 00 VBS <= set vibrato speed 01 40 <= speed = $40 02 VBD <= set vibrato depth 03 02 <= depth = 2 04 00 <= waveform #00 05 END And very complex: 00 ARP <= start arpeggio sequence 01 00 \ 02 03 arpeggio values 0, 3, 7 (minor chord) 03 07 / 04 ARE <= end arpeggio sequence 05 VBD <= vibrato depth 06 06 <= 6 07 VBS <= vibrato speed 08 40 <= $40 09 00 <= set waveform #0 0A 01 <= set waveforms 01 - 0A (one timing pulse/waveform) 0B 02 | | 0C 03 \ / 0D 04 \_/ 0E 05 0F 06 10 07 11 08 12 09 13 0A and back to #01... 14 08 15 07 16 06 17 05 18 04 19 03 1A 02 1B 01 1C JMP <= jump 1D 09 <= to position 09 (restart waveform changing) 1E END --------------------------------------------------------------------------- You can learn a lot by examining the example synthsounds and by experimenting. Now, some reference... About timing: For both sequence lists, most of the commands are fetched, executed, and the next command is immediately fetched. There are also some commands that wait for the next timing pulse, this is important because the computer would otherwise send all its time executing the sequence lists (and would hang up). You should take care that all loops contain a command, that waits for the next timing pulse. These commands are WAI (Wait), vol chg (plain number in the volume list) and set waveform (plain number in pitch/waveform list). For example, the following loops will hang up your computer: 00 JMP 00 CHU <-+ command CHU doesn't wait 01 00 01 02 | 02 JMP | 03 00 --+ While the following would not: 00 20 00 WAI 01 JMP 01 02 02 00 02 JMP 03 00 Execution speed: The synthsound handling routine is called once every interrupt. This means that the handling is usually done 6 times/note (can be changed with secondary tempo, see main docs). Both lists have an execution speed, that is the speed of the operation. When the speed is 1, the next command is fetched/pitch changed etc. on every interrupt. If the speed was 2, it would happen every second interrupt (runs two times slower). The initial execution speed can be set with the two speed gadgets. During executing, the speed can be changed with command SPD. VOLUME SEQUENCE LIST COMMANDS ============================= 1. Set volume Command: --- Keyboard: --- (key needed to enter the command) This is the default command (no command identifier). It sets the absolute volume of the synthsound. It should be 00 - 40. Note that the relative track volumes are not used in synthsounds (mostly because of performance reasons). Example: 00 30 ;volume = $30 01 10 ;volume = $10 ... 2. End sequence Command: END Keyboard: --- This command terminates the volume sequence list. It's always there and automatically inserted. You can't insert commands past this one. 3. Set volume change down speed Command: CHD Keyboard: D This command sets the speed, in which volume is decreased each timing pulse. The volume starts changing automatically after this command. To stop automatic volume sliding, issue this command with speed 00. Example: 00 CHD 01 05 ;speed = 5 ... 10 CHD 11 00 ;speed = 0 -> stop sliding 4. Set volume change up speed Command: CHU Keyboard: U This command is like CHD, except it sets the volume change up. 5. Wait Command: WAI Keyboard: W This command waits for specified amount of timing pulses (pause). Example: 03 WAI 04 10 ;wait for 16 ($10) pulses to occur 6. Jump Command: JMP Keyboard: J Causes an immediate jump to another position of the volume list. Example: 05 JMP 06 0A ;jump forward to line 0A 7. Jump waveform sequence Command: JWS Keyboard: Shift-J This command causes a jump in the waveform sequence. This can be used for example, to trigger a pitch change at the end of the vol seq list. Note that this DOESN'T cause a jump TO waveform sequence. Example: 04 JWS 05 0F ;Cause jump in waveform sequence list 8. Halt Command: HLT Keyboard: H This has the same effect with command END (halt execution), but it can be inserted in the middle of the sequence list. Example: 03 HLT 04 04 ;some other code (can be accessed with JMP instruction, for ... example) 9. Set speed Command: SPD Keyboard: S Sets the execution speed. Example: 0A SPD 0B 01 ;speed = 1 (fastest) ... (The following commands require OctaMED V2.00 / MED V3.20 or later.) 10. One-shot envelope Command: EN1 Keyboard: E This command allows you to draw the shape of the envelope with the mouse. When the end of the envelope is reached, nothing occurs. 02 40 03 EN1 04 05 Waveform 05 is used as an envelope. Note that the envelope execution starts on next interrupt, so the volume is initialized to $40. The envelope waveform must always be 128 bytes long!! 11. Looping envelope Command: EN2 Keyboard: Shift-E This works like command EN1, except that when the end is reached, execution will start again from the beginning. WAVEFORM/PITCH SEQUENCE LIST COMMANDS ===================================== 1. Set waveform Command: --- Keyboard: --- This command is used to indicate the waveform number (starting from 00). After this instruction, the execution stops until next timing pulse occurs. Don't use waveform numbers that are higher than the actual number of the last waveform. Example: 00 00 ;waveform 00 01 01 ;waveform 01 ... 2. End sequence Command: END Keyboard: --- This command terminates the waveform/pitch sequence list. It's always there and automatically inserted. You can't insert commands past this one. 3. Set pitch change down speed Command: CHD Keyboard: D This command sets the sliding speed for sliding pitch down. The sliding automatically starts after this command and stops, when speed is set to zero. Example: 00 CHD 01 03 ;set speed to 3 ... 4. Set pitch change up speed Command: CHU Keyboard: U Just like previous, but slides pitch up. 5. Wait Command: WAI Keyboard: W This command waits for specified amount of timing pulses (pause). Example: 03 WAI 04 02 ;wait for 2 pulses to occur 6. Jump Command: JMP Keyboard: J Causes an immediate jump to another position of the waveform/pitch list. Example: 05 JMP 06 0A ;jump forward to line 0A 7. Jump volume sequence Command: JVS Keyboard: Shift-J This command causes a jump to happen in the volume sequence. Can be used e.g. for triggering volume changes after some waveform event. Example: 09 JVS 0A 00 ;start volume sequence from the beginning 8. Halt Command: HLT Keyboard: H This has the same effect with command END (halt execution), but it can be inserted in the middle of the sequence list. Example: 03 HLT 04 04 ;some other code (can be accessed with JMP instruction, for ... example) 9. Set speed Command: SPD Keyboard: S Sets the execution speed. Example: 0A SPD 0B 01 ;speed = 1 (fastest) ... 10. Begin arpeggio definition Command: ARP Keyboard: A This command starts the arpeggio sequence. The following values are the arpeggio offsets from the base note. The arpeggio sequence is terminated with ARE-command. The arpeggio starts automatically after the sequence is defined. Example: 03 ARP ;start arpeggio 04 00 ;offset values 05 04 06 07 07 0A 08 ARE ;end arpeggio definition 11. End arpeggio definition Command: ARE Keyboard: E Ends an arpeggio definition. See above. 12. Set vibrato depth Command: VBD Keyboard: V This command is used to set the vibrato depth (00 - 7F). Example: 02 VBD 03 04 ;set depth to 4 13. Set vibrato speed Command: VBS Keyboard: Shift-V This command sets the vibrato speed (00 - 7F). Both speed and depth must be nonzero for vibrato to occur. Example: 02 VBD 03 04 ;depth = 4 04 VBS 05 30 ;speed = 30 14. Reset pitch Command: RES Keyboard: R This command resets the pitch of the note to its initial pitch. (The following command requires OctaMED V2.00 / MED V3.20 or later.) 15. Set vibrato waveform Command: VWF Keyboard: Shift-W Sets the vibrato waveform. The argument is the number of waveform. The waveform should always be 32 bytes long!! Note that it's actually played reversed (use the Rev gadget to reverse it). By default, sine wave is used. Example: 00 VBD 01 06 02 VBS 03 40 04 VWF 05 04 ;use waveform number 04 as vibrato waveform =========================================================================== Synthsound handling commands in the songs: Command E in the songs controls the MIDI pan, if used with MIDI, but with synthsounds, it is used to trigger a jump in the waveform/pitch sequence list. For example, if you wanted to decrease the pitch of the sound after a certain point, your waveform/pitch sequence could look like this: 00 VBS 01 40 02 VBD 03 06 04 00 ;play waveform 00 05 HLT 06 CHD ;pitch changing entry point 07 02 08 END Now you could compose a track like this: C-2 3000 ;this is the previous synthsound --- 0000 --- 0000 --- 0E06 ;cause a jump to position 06 (pitch starts to slide down) --- 0000 With command JVS, you could make the command affect volume sequence too. Hold/Decay: =========== Hold/Decay work well with synthsounds too. The decay value in synthsounds is, however, a jump address in the volume sequence list. When the decay should start, the execution will jump to this entry in the vol seq list. This means that you can handle the decay on any way you want. You can also make it affect the pitch/waveforms using the command JWS. Example volume sequence list: 00 40 ;volume 01 HLT ;end 02 CHD ;decay handling (entry point) -> cause decay 03 03 04 END The decay value for this synthsound should be 2. When you save/load synthsounds, the decay values are saved/loaded with the instrument. Saving/loading synthsounds: Synthsounds are saved using the file requester panel, "save instr". They usually take very little disk space. Synthsounds can be loaded just like normal samples (file requester, sample list, typing sample name). HYBRID SOUNDS: Hybrid sounds are much like synthsounds, except that there are no waveform pieces. Instead, there's a normal sample. All commands of the synthsound handling programming language can be used with hybrid sounds. There's only one thing you should know: Don't use "Set waveform". Because there's only a single waveform, there's no need for that (and it wouldn't work anyway). Final note - CODA ! Don't be afraid if you didn't understand everything described in this file (I hardly understand it myself ;-) All this information is not necessary for using the synthsounds (only for designing them). --------------------------------------------------------------------------- This is a last minute addition, that may well have a lot of redundant information and tech. data. But, it also has some additional technical data, undates and inclusions that could be useful for reference, to the readers of this collective report, review and article. Therefore, I've decided to include it in its entire informational and text chat content, for your review. I had no time to correct the offset text, remove the useless on-line chat comments, or do any sentence, paragraph or other alignments and editing. I hope it will be useful and not to confusing. Again, I have to point it out and please keep in mind that this all deals with the Amiga and MODfiles from them. It's content, computer language reference and the like, should not be confused with that for the IIgs. It was written for technical support and applications with the Amiga computer and their native MODfiles. So, please keep this formost in mind, when you read, reference and review it. - Dr. Tom --------------------------------------------------------------------------- From: Lars Hamre There are _NO_ standard sample rate for the samples used in modules. But most often the samples are done on the rate called C-3 (which is about 16574 Hz if you have a PAL machine). Sometimes drums are sampled at A-3 (around 28 kHz), and some sounds are at ~8 kHz or anything else to save space. The sample rate on each of the channels can be selected by a period value, which tells the hardware how many ~3.5 MHz clocks to count down before playing the next sample. If you have a 16 kHz sample you simply play it at a note that gives you 16 kHz sample rate. If you play it one octave lower, you get a 8 kHz sample rate (and a double period value). Here are the magic formulas: 7093789.2 SampleRate = -------------- (For a PAL machine) Period * 2 7159090.5 SampleRate = -------------- (For a NTSC machine) Period * 2 So, the most normal rate is (C-3, period 214): 7093789.2 ----------- = 16574.27 Hz 214 * 2 (16726.8 Hz if you use the NTSC formula, but i have a PAL machine) The Amiga has four channels with independent sample rates, so there are no such thing as a common rate for all channels, and there are no mixing going on. For a list of period values and what notes they are supposed to correspond to, see the list of period values in the MOD format below. Also note that finetuning are actually done by switching between 16 different period tables (not included here, but get the Amiga Protracker Playroutine). Lars Hamre larsha@lise.unit.no [ A description of the mod format follows: -Lars] Newsgroups: comp.sys.amiga.audio From: steinarm@ifi.uio.no (Steinar Midtskogen) Subject: Old MOD. format + PowerPacking Summary: Description of the MOD format and powerpacking Keywords: MOD, Powerpacker Organization: University of Oslo, Norway Date: Sun, 14 Mar 1993 23:49:00 GMT Since everybody seem to ask about the module format, here it comes. I will post this information every forthnight, at least for a period (pun intended). I have put together most of the documentation about the module format from PT2.3, edited it heavily (all credit to the original authors, but I take responsibility for all errors) and added information about powerpacking and how the Amiga volume work. The reason for not using documentation following PT3.0, which is written by my group, is that there is no docmentation on the MOD format following that. Our reason for not distributing the documentation of the MOD. format with the tracker is that we try to discourage the usage of the MOD. format; a new format is coming up soon. So don't write a revolutionary piece of code based on the information presented herein; it will hopefully be outdated in only another month. [ Outdated? I don't think so... -Lars] (The "I" in this file refer to Vishnu of Cryptoburners, the "we" refer to respectively Amiga Freelancers and Cryptoburners; it should be obvious from the context which of them) Credits for original doc files: Lars "ZAP" Hamre /Amiga Freelancers The documentation to the song/module format. The information about how to calculate BMPs from the Amiga CIA timings. Peter "CRAYON" Hanning /Mushroom Studios/Noxious Updates to the song/module format information. (I thought that it looked pretty similar to the one from PT1.3, but he had put his name under, so...) The table of effect commands. [ Hrm. Both files are mine. I can see no big changes. -Lars] I have updated the information in the song/module format text, and added information on how the finetuning work. *********************************************************************** Protracker 2.3A Song/Module Format: ----------------------------------- Offset Bytes Description ------ ----- ----------- 0 20 Songname. Remember to put trailing null bytes at the end... When written by ProTracker this will be only uppercase; there are only historical reasons for this. (And the historical reason is that Karsten Obarski, who made the first SoundTracker, was stupid.) Information for sample 1-31: Offset Bytes Description ------ ----- ----------- 20 22 Samplename for sample 1. Pad with null bytes. Will only be uppercase. The samplenames are often used for storing messages from the author; in particular, samplenames starting with a '#' sign will generally be a message. This convention is a result of a player called IntuiTracker displaying all samples starting with # as a message to the person playing the module. 42 2 A WORD with samplelength for sample 1. Stored as number of words. Multiply by two to get real sample length in bytes. This is a big-endian number; for all PC programmers out there, this means that to get your 8-bit-orginated format, you have to swap the two 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. They should also be masked out reading; you can never be sure what some stupid program could have stored here... 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 This byte is set to 127, so that old trackers will search through all patterns when loading. Noisetracker uses this byte for restart, ProTracker doesn't. 952 128 Song positions 0-127. Each hold a number from 0-63 (or 0-127) 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. If there are more than 64 patterns, PT2.3 will insert M!K! here. (Hey - Noxious - why didn't you document the part here relating to YOUR OWN PROGRAM? -Vishnu) 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. To separate out the different parts of the note, something like this would be used (C to have it a bit portable; I like assembler and Pascal better myself): int samplenum,effectcommand,effectdata,extendedcommand; char notename[]; ... void ProcessNote(byte notedata[]) { extendedcommand=-1; samplenum=(*notedata&0xF0)|(*(notedata+2)>>4); switch(((*notedata<<8)|(*notedata))&0xfff) { case 856: notename="C-1"; break; case 808: notename="C#1"; break; case 762: notename="D-1"; break; case 856: notename="D#1"; break; /* etc */ default: notename="???"; /* This should NOT occur; if it do, it is */ /* not a ProTracker module! */ } effectcommand=*(notedata+2)&0xF; effectdata=*(notedata+3); if effectcommand==0xE then /* Extended command */ { extendedcommand=effectdata>>4; effectdata&=0xf; /* Only one nibble data for extended command */ } } Probably this isn't 100% valid C code, but I think you catch my drift... 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. If you have a bit of memory, it is probably smarter to use an 744 byte block to store the indexes relating to the different periods (ie: at position 808 in the block you store 1, as 1 is the index of period 808. Then you use the block as a look up table) This is the data stored in a normal song. A packed song starts with the four letters "PACK", and then comes the packed data. It is somewhat unclear to me what kind of packing that is referred to here. One thing is clear though - it is NOT powerpacked or LHAed modules! I belive somebody (Probably Amiga Freelancers) was planning to install some form of direct packing into ProTracker, reserved this ID, and then it never came... -Vishnu [No. We never intended to install any packing here. This is an older invention :) Songs (modules WITHOUT the samples) can be packed by this method, and it will put the "PACK" tag at the beginning of the file. But since everyone saves modules with samples instead of songs, I wouldn't care about it. The packer/depacker for PACK'ed files are in the PT source code, available on aminet sites. -Lars Hamre] 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. The data for a sample must _ALWAYS_ start with two zeros, as it is used for repeating is the sample is to be terminated. [ Well, the playroutine will clear these two bytes anyway... -Lars] *********************************************************************** Finetuning Value: 0 1 2 3 4 5 6 7 8 9 A B C D E F Finetune: 0 +1 +2 +3 +4 +5 +6 +7 -8 -7 -6 -5 -4 -3 -2 -1 Finetuning are done by multiplying the frequency of the playback by X^(finetune), where X ~= 1.0072382087 This means that Amiga PERIODS, which represent delay times before fetching the next sample, should be multiplied by X^(-finetune) Vishnu of Cryptoburners [ This should be 2^(finetune/12/8). And 2^(1/12/8) is 1.007246412 on my calculator... (12 notes per octave and 1/8 of this) -Lars Hamre ] *********************************************************************** Decibel Values and Volume Ranges Volume Decibel Value Volume Decibel Value 64 0.0 32 -6.0 63 -0.1 31 -6.3 62 -0.3 30 -6.6 61 -0.4 29 -6.9 60 -0.6 28 -7.2 59 -0.7 27 -7.5 58 -0.9 26 -7.8 57 -1.0 25 -8.2 56 -1.2 24 -8.5 55 -1.3 23 -8.9 54 -1.5 22 -9.3 53 -1.6 21 -9.7 52 -1.8 20 -10.1 51 -2.0 19 -10.5 50 -2.1 18 -11.0 49 -2.3 17 -11.5 48 -2.5 16 -12.0 47 -2.7 15 -12.6 46 -2.9 14 -13.2 45 -3.1 13 -13.8 44 -3.3 12 -14.5 43 -3.5 11 -15.3 42 -3.7 10 -16.1 41 -3.9 9 -17.0 40 -4.1 8 -18.1 39 -4.3 7 -19.2 38 -4.5 6 -20.6 37 -4.8 5 -22.1 36 -5.0 4 -24.1 35 -5.2 3 -26.6 34 -5.5 2 -30.1 33 -5.8 1 -36.1 0 Minus infinity The reason for the table starting at 0 dB as the convention from taperecorders of having 0 dB as the optimal recording condition, and displaying anything worse as a negative number. Decibel is a logrithmical unit, just like we feel sound intensity. It represent the ratio between two intensities. On the other hand, the Amiga volumes represent the linear difference between sound intensities; this mean that you have less accuracy between the low volumes than between the high ones. If you need to, you can safely remove volume 64 and replace it with volume 63; but you can NOT remove volume 0 and replace it with volume 1. If you are implementing a MOD player for another sound-device, then remember to check whether it has linear or logarithmic volume control. The above table can be calculated from the formula dB=20*log10(Volume/64) To go the other way, from dB to Amiga volumes, do Volume=64*10^(dB/20) The dB here have to do with ratios of sound, not absolute sound power. This is the way it is used in recording equipment etc, and not the for measuring absolute ear-destroying capability. If you need to implement volume artificially, just multiply by the volume and shift right 6 times. If you need to mix samples on-the-fly to lower the amount of voices used, your best bet is probably doing a DCT (Convert the samples to sums of cosines) on small blocks of the sample (64 bytes?) before playing, and mixing with the exact position in which you generate a sample. This is the only way I can think of to give adequate quality, at least. -Vishnu of Cryptoburners *********************************************************************** Protracker V2.3A/3.01 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 --------------------------------------------------------------------------- Peter "CRAYON" Hanning /Mushroom Studios/Noxious For a more complete description see my previous post about the new format. This format also allow you to have more effects, and several effects on the same note. Hopefully, it will soon replace the module format. - Vishnu *********************************************************************** 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 *********************************************************************** The "PowerPacker" crunching algorithm: Powerpacker use a variant of Lemel-Ziv compression. This mean that it in some cases store strings of bytes as only an offset from the current position and a counter. (How LZ could get a patent on this is beyond me!) A PowerPacked file has the following format: dc.b 'PP20' ; Identifier dc.l Efficiency ... crunched data ... dc.l (Length*256)+NumOfBitsToDiscard The Efficiency is 4 bytes representing the length of offset from the current position for different runs of equal bytes. The first three are used for runs of from 2 to 4 bytes; the last is used for all runs of 5 bytes and over. The length is the length of the original, UNcrunched file. The bits to be discarded are discarded off the END of the crunched data. All bits in the crunched data are stored in reverse order, to permit decrunching in a buffer where the crunched data are loaded at the start (An 8 byte margin between the start of the file and the decrunching position is needed, though). This mean you have to get bits in the reverse order when decrunching, and when I refer to "Get A Bit" or Get Eight Bits" or something, that is the LAST bit or bits from the source. Kinda obvious isn't it? ;-) This means that also when a full set of 8 bits are read from the file, their bit order are reversed. The varying efficiencies used by PowerPacker are as follows: Fast: 9, 9, 9, 9 Medicore: 9,10,10,10 Good: 9,10,11,11 Very Good: 9,10,12,12 Best: 9,10,12,13 The Decrunching Algorithm WritePointer is a pointer to the position in memory where decrunched bytes are currently written. Decrunch: REPEAT Get A Bit (X); IF X=0 THEN Copy bytes from source; Copy string from already decrunched part of file; (* Done no matter what the state of X *) UNTIL WritePointer<=Start Of Decrunchbuffer; END. Copy bytes from source: BEGIN n:=0; REPEAT Get Two Bits (X); n:=n+X; UNTIL X<>3; Copy n+1 bytes as bits from Crunched Data to WritePointer; (* At this stage, the bytes get their order of bits reversed; and WritePointer DECREASES *) END; Copy string from already decrunched part of file: BEGIN Get Two Bits(n); OffsetLen:=Efficiency[n]; IF n<>3 THEN Get OffsetLen Bits (X) ELSE BEGIN Get One Bit (X); IF X=0 THEN Get Seven Bits (X) ELSE Get OffsetLen Bits (X); REPEAT Get Three Bits (Y); n:=n+Y; UNTIL Y<>7; END; Copy n+2 bytes from WritePointer+X; (* Here it is copied reversely through memory; X is constant, while WritePointer decreases. *) END; If you can't read this, the original decrunchroutine follows here, in 68000 assembler. It was NOT commented before I cleared it up with macros... So complaints about the comments must go to me, too! Registers used are (in the main decrunch routine): d0 - Counter for number of bits to fetch with the READD1 macro. d1 - Return register for the READBIT macros. d2 - Used as counter register for the copy routines. d3 - Used as offset for the oldstring copy routine. d5 - Used to store the longword currently read bits from. d7 - Used for storing the number of bits left in d5. 0 means one bit left, read new longword to d5 when d7 wraps to negative. a0 - Pointer to current longword of source (the one in d5). a1 - Current position in the buffer to decrunch to. a2 - Start of buffer to decrunch to. Used only for checking whether the decrunching is through. a5 - Pointer to efficiency array. Things to consider: Bits are shifted from d5 to d1 with code like this lsr.l #1,d5 addx.l d1,d1 shifting bits from the BOTTOM of d5 into the BOTTOM of d1, reversing the order of the bits as they go from d5 to d1. The predecrement mode, as in move.b d1,-(a1) decrement a1 BEFORE writing d1. *********************************************************************** ; ; PowerPacker Decrunch assembler subroutine V1.1 ; ; call as: ; DecrunchBuffer (endcrun, buffer, efficiency); ; a0 a1 d0 ; with: ; endcrun : UBYTE * just after last byte of crunched file ; buffer : UBYTE * to memory block to decrunch in ; efficiency: Longword defining efficiency with wich file was crunched ; ; NOTE: ; Decrunch a few bytes higher (safety margin) than the crunched file ; to decrunch in the same memory space. (64 bytes suffice) ; Decrunch: lea myBitsTable(pc),a5 ; Efficiency array move.l d0,(a5) ; Store efficiency for this file. move.l a1,a2 ; Store start of decrunch memory. move.l -(a0),d5 ; Get length & number of bits to moveq #0,d1 ; trash... move.b d5,d1 ; Copy number of bits to trash... lsr.l #8,d5 ; Find length of decrunched file... add.l d5,a1 ; And end of decrunch buffer. move.l -(a0),d5 ; First longword of crunched data. lsr.l d1,d5 ; Skip unused bits... moveq #32-1,d7 ; Number of bits in longword... sub.b d1,d7 ; And be sure to read another when ; d5 is spent! LoopCheckCrunch: ; The decrunch loop. READBIT ; State of bit is returned in d1 bne.s CrunchedBytes ; and Z flag NormalBytes: moveq #0,d2 Read2BitsRow: READBITS #2,d1 ; Get length of run-1 add.w d1,d2 ; Loop until not %11, increasing cmp.w #3,d1 ; all the time... (Sort of Huffman beq.s Read2BitsRow ; on the run lengths...) .ReadNormalByte: ; REPEAT READBITS #8,d1 ; Get from crunched data... move.b d1,-(a1) ; Store... dbf d2,.ReadNormalByte ; UNTIL d2<0 cmp.l a1,a2 ; End of crunch? bcs.s CrunchedBytes ; Nope, now do crunched bytes... rts ; Chicken out - FINITO! CrunchedBytes: READBITS #2,d1 ; Get 2 bits of runlength-2 moveq #0,d0 move.b (a5,d1.w),d0 ; Get number of bits offset for move.w d1,d2 ; this runlength addq.w #1,d2 ; Runlength always 2+ cmp.w #3+1,d2 ; Did data indicate longer run? bne.s ReadOffset ; Nope.... READBIT ; Is the longer run with offsetlen bne.s .LongBlockOffset ; from Efficiency? moveq #7,d0 ; Nope, hard code length 7 .LongBlockOffset: READD1 ; Get offset... move.w d1,d3 Read3BitsRow: READBITS #3,d1 ; Get more string length... add.w d1,d2 ; Increase until stop indicated... cmp.w #7,d1 ; By not having the max value. beq.s Read3BitsRow bra.s DecrunchBlock ; And start the copying. ReadOffset: READD1 ; Get offset for short run... move.w d1,d3 ; and use it! DecrunchBlock: move.b (a1,d3.w),-(a1) ; Loop the copy... dbf d2,DecrunchBlock ; One time more than the initial d2 EndOfLoop: _pp_DecrunchColor: move.w a1,$dff1a2 ; Set colour cmp.l a1,a2 ; Check if we have reached/passed bcs LoopCheckCrunch ; lower limit... rts ; Yeah - chicken out! myBitsTable: dc.b $09,$0a,$0b,$0b ; Efficiency table *********************************************************************** That's all for now - hope you don't mind... If you want to use the PowerPacker decrunching routine, I suggest instead using powerpacker.library if you are on the Amiga; if it is for a demo, I suggest using another cruncher, for instance CrunchMaster. It has better compression ratios than PowerPacker. Vishnu CRB Feel free to e-mail me. steinarm@ifi.uio.no "...all the modern inconveniences..." (Mark Twain) --------------------------------------------------------------------------- That concludes my compiled collection of technical information dealing with Imported Module files from the Amiga. Write Away!, ShadowWrite, PATCH, TRACTOR are available from me, (IF YOU CAN'T LOCATE THEM, to give you a customized (experimental) kit to use for the above mentioned efforts. These word processors are the only ones I've found, that will allow Imported MOD text files to retain their proper characters, text coding and file structure in the original form, when editing them and saving them again as text files. Important Notes to remember: Never use FIX YUCKY TEXT option, with Write Away! and never use any modify options with the NDA, ShadowWrite). If you do, you will screw up the proper text original characters and most like, the MODfile will not even load or play, when you save it. Always be sure to retain the original Imported Module file as a text file, for use again, if you should mess up with your first and/or subsequent attempts. The worst that can happen is that the Imported Module you load and edit, alter, modify, enhance or attempt to reconstruct won't load or play properly. You never know what strange and disastrous or amazing and enlightening effects might result from such efforts. I've done it myself with some astounding results on many Imported Module text files. I've also messed a lot of them up real good ! Even with lots of practice, the placement, deletion or any combination of cut & paste can have unpredictable results. The standard trial and error techniques can achieve some very interesting results. Give it a try. What have you got to loose, besides a little of your time ! If any of you do obtain some degree of success with your efforts, using this ' IIGS IMPORTED MODULE (Experimental) 'MODIFIER INSTRUCTION KIT', I'd love to review your final work. Send me a copy of your best results and I'll pass them on to as many IIgs music users that have an interest in them, as I possibly can ! Please note: If you can't locate or obtain any of the IIgs programs mentioned in this article, simply send me a few disks with your name, address and a stamped return mailer, with a list of the ones you want. I'll be glad to furnish you with any of them. For the finale, I present my reviews, updated personal comments and updated compare chart of support/effects, etc. for the three IIgs Imported Module Players; ShellPlay, SoniqTracker and ModZAP. About ShellPlay STATUS: (Freeware) ShellPlay v0.71 is Copyright (c) 1993 by Brian C Bening Released - (June 1993) (REPORTED TO HAVE BEEN PLACED IN PUBLIC DOMAIN - FOR UPDATES) ShellPlay is an (EXE) shell program, which can be executed via any shell command (launch-option) program, such as Command COM, etc. It can be activated via Merlin 16+, by placing it in the Shell applications folder, with Merlin. ShellPlay can also be activated and used directly, to play Imported Modules from Instant Access v2.30, by double clicking on the MOD.xxx file. This method makes it very easy to play MODfiles with, if you can't figure out how to use a shell program. (SHELLPLAY MUST BE IN THE SAME FOLDER WITH INSTANT ACCESS) ORCA, GNO, and ECP-16, also support ShellPlay (SP). Once launched, SP will install itself in the background and return control to the shell; thereafter, any program that does not use the Ensoniq or the Sound Toolset can be used in the foreground. ShellPlay is the best 'Imported Music Module Player' currently available for the IIgs. It has superior effects support, a wide range of MOD format support. I've never encountered any (4 track) type of MODfile format, that it couldn't play properly. ShellPlay has never crashed on me and its ease of use and access from Instant Access, makes it the most proficient, user friendly and memory economical of all IIgs MODfile Players. It's timing and sync. for playing any MODfile is nearly always flawless for audio sound scape rendering and great sound quality, with its very fast RAM to Ensoniq 16k sample swap abilities. It gives an accurate rendering of play, audio MODfile special effects, a wide range of (easy-to-use) commands/options, with; full stereo precent options, full tempo support, full volume percent support, PAL 50Hz or NTSC 60Hz tempo set, follow position jumps, modem/hardware support, full support options for MODfile song play; random, goto and change. ShellPlay also has the options for; kill and remove ShellPlay and print playlist/print current MODfile. All commands/options are active and available via keyboard input, at any point during the program or play functions. The documentation for ShellPlay is very professional, through and easy to understand. I give ShellPlay the top rating of: 10 ShellPlay Command/options and Examples, excerpted from the ShellPlay documentation and edited by me, are included below for your use. COMMANDS LISTING: usage: sp [option(s)] [MODfile(s)] [ [option(s)] [MODfile(s)] [...] ] options: -ts smart PT/constant tempo + -s change current song -tp force protracker tempo -r don't use random play -tc force constant tempo +r random play / re-randomize -t5 constant tempo is PAL 50Hz -C clear playlist -t6 constant tempo is NTSC 60Hz -K kill and remove shellplay -VX set volume percent (0..100) -gX goto song X -SX set percent stereo (-200..200) -l print playlist +|-b follow position jumps -c print current MODfile +|-H modem port hardware handshaking default options: sp -H -r -b -ts -t5 -S70 -V60 Usage Examples: o multiple MODfiles can be specified on the commandline. ex: sp after.the.rain bass.o.drums mod.hiv o ORCA wildcards can be used if shellplay was launched from ORCA. ex: sp mod.= o Filenames containing spaces must be enclosed in quotes. ex: sp "mod.Bass O Matic" o Single quotes will force SP not to use ORCA wildcard parsing. This will load one MOD: sp 'mod.===Blue===' o If only one song is loaded, it will continuously repeat. o The options passed to Shellplay are case sensitive. This will clear the playlist: sp -C This will print the current song: sp -c o Options can be separated or grouped together. These are equivalent: sp -C -S100 -V50 sp -CS100V50 Option List Examples: -?: print a brief option summary. -K: stop shellplay and remove it from memory. -ts: guess the tempo method (Protracker or constant) to use by examining each song before playing it. -tp: force SP to use Protracker tempo. -tc: force SP to use constant speed tempo (otherwise known as VBL timing). -t5: use 50hz timing for constant speed tempo -t6: use 60hz timing for constant speed tempo -b: don't follow position jumps. Position jumps are commands used within MODs to create infinite loops or to hide songs. +b: follow position jumps. -VX: set the volume to X% of the maximum. Where X is between 0 and 100. -SX: use X% stereo. X can be any value between -200 and 200. -S100 uses no channel mixing. This is how MODs are played on the Amiga. -S0 is Monophonic. -S200 uses channel doubling. Sounds similar to -S100; but, it has slightly better quality. +s: skip to the next song. -s: skip to the previous song. -gX: goto to song number X. +r: play MODs in random order. The playlist will be randomized each time +r is encountered and when songs are added to the playlist. -r: play MODS in the order they were added to the playlist. -C: clear all songs from the playlist. -l: print out the playlist. -c: print the name of the MOD currently being played. +H: use hardware handshaking on the modem port. This will confuse your terminal program unless it is set to 8N1. Also, your terminal program will not be able to control hardware handshaking while this option is enabled. -H: do not use hardware handshaking on the modem port. Bugs: o Random crashes... Blah. Editors notes: (I'VE NEVER HAVE FOUND ANY INSTANCE WHERE RANDOM CRASHES OCCURRED) o While SP is running, Apple DMA SCSI cards may choke when transfering data from disk. This can be worked around by turning off DMA on your SCSI card. o When running on extremely fast accelerator cards, the sound may be grainy. Other stuff that may appear in the future: o a desktop version of Shellplay, for those people that do not have or want shells. o the Xplayer (tm) toolset, featuring all of the great features of Shellplay. o Xplayer. A sixteen channel MOD editor (and player). I've been advised that ShellPlay future upgrades have been abondoned by the programs author. It's rumored to have been placed in the public domain. I've been furnished with the SRC. CODES and I'm hoping to find the time to assist others with updates as FREEWARE, to a GS/OS desktop application program, as a player/editor, NDA or CDA, etc. Authors (last known) Internet E-MAIL address was: vacc0001@student.tc.umn.edu (Does not reply) A final note to the programs author Brian: Thank you very much for making such a great MODfile player for this computer. Your efforts will be continued. You can count on that ! About soniqTracker STATUS: (Freeware) soniqTracker v0.63 Written by Tim Meekins Released at: AppleExpo West - 4/93 Copyright (c) 1992,1993 by Tim Meekins - All Rights Reserved. I give soniqTracker the top rating of: 9 SoniqTracker is a GS/OS application program, with a very user friendly, tasteful, artistically designed program structure. The documentation furnished with the program is through, very professional in content and easy to understand. SoniqTracker, is the second best MODfile Player for the IIgs and the best, with respect to GS/OS application programs. When and if finished, soniqTracker will be a complete music and instrument editing system using custom music formats. The music editor is reportedly under construction and is not included with this version. This version of soniqTracker will import Amiga-style MODfile songs into soniqTracker's internal format. Also included is a jukebox player and an alarm clock. Future versions, (if and when released - pending the authors time to do any updates) will include a music and instrument editor with the ability to import numerous other music formats. The soniqTracker sequencing engine may also become available for use in other programs. In a recent conversation with Tim, (7/9/94) he told me he was unable to do anything with update and release efforts, due to a lack of time. He has been gracious enough to agree to furnish the src.codes to the sequencing engine and hopefully, it can be implemented into FUTURE UPGRADES of the Noise Tracker GS v2.00 GS/OS application program, currently under development from 1WSW and OSRL. A splash screen with the soniqTracker logo appears, after it starts. Press any key or click the mouse button to continue. If you have a weak audio card or a SonicBlaster that can't handle the Ensoniq 5503 being pushed to its limits, then lower the volume setting in the Preferences menu. SoniqTracker supports all know IIgs stereo cards. None of them need any adjustments settings with the exception of the SonicBlaster card. There's a potentiometer on the SonicBlaster. When turned to a low setting, it will remove distortion. For the ultimate in stereo output, get the SoundMeister card, which can certainly handle the Ensoniq 5503 being pushed to its limits. SoniqTracker will definitely support this hardware. The author: Tim Meekins, a past team member of 1WSW, related in his documentation for soniqTracker: Very rarely, soniqTracker will come across a MODfile it can't load and it may get confused. In fact, if you do encounter such a file, please let me know! I've played 100's of MODfiles with soniqTracker and found only one, that presented any unknown effects when played or load ($BADD) problems. Songs that are not music modules are also hard to recognize, since the basic NoiseTracker-style module contains no special identification bytes in the file. soniqTracker will do bounds checking and will abort if the file does not appear to be a music module. If you get error $BADD when loading a MODfile, it isn't MODfile of the types supported by soniqTracker, or, it isn't even a MODfile. Keep in mind, you can (CURRENTLY) only load and play 4 track MODfiles with the IIgs and its MODfile players, due to the IIgs' Ensoniq DOC 32 osc. limit, which prohibits it from accepting or playing any MODfile with more than 4 tracks. For your use and referrals, the soniqTracker commands follow: When a song is being played, the following key commands are available: option, escape, q stop the song and quit the player 1-4 toggle tracks 1 through 4 on or off space pause the song, press any key to resume. But, it will be interpreted. So, pressing q will stop. (I recommend pressing return). <,> decrease or increase the volume s tab through each of the stereo modes (see preferences section) h toggle between 50Hz and 60Hz n skip to next song (see Jukebox Player below) (CAP LOCK/SHIFT: or any option/command will work in upper or lower case) With some of the music, a grain/static effect might be observed. In general, soniqTracker gives an excellent rendering of; stereo, sound scape, audio spacial dimensionality and clarity. It supports most all of the special play effects with near perfection. The animation and graphic screen during play is very ethereal, graphically pleasing and of a professional and friendly nature, as arethe About graphics and its display. The program is very user friendly and easy for even a first-time user. The music module format originated on the Amiga in the program SoundTracker. Additional music players followed such as NoiseTracker, ProTracker, StarTrekker, and numerous others. Along with these additional players came differences in the file format, yet despite the differences, they use identical signature bytes (except StarTrekker) and provide no method for differentiating between them. Luckily, the ProTracker format has gained momentum and the number of modules using features of other players is diminishing. soniqTracker primarily supports ProTracker modules, but does have advanced code for recognizing other formats. Special Notes, Tips and Tricks, concerning the use of soniqTracker follow: For some astounding special effects with stereo/audio dimensional, spacial phase sound shifting and audio doopler illusions, try holding down the S key during MODfile play mode. For even more astounding tempo phase shift effects and timing illusions, try holding down the H key during MODfile play mode, with the S key being held down also. Tim Meekins can be contacted via: internet: meekins@cis.ohio-state.edu America Online: GNO Tim2 (gnotim2@aol.com) About MODZap MODZap v00.90b3 By Ian Schmidt - Copyright (c) 1992-93 Two Meg Software - All Rights Reserved. STATUS: FREEWARE I give MODZap an overall rating of 6.9. I'm sure Ian would be pleased, with the numbers of my overall rating ! Ian Schmidt is to be commended for his continued support and upgrade efforts of this program. His efforts and contributions to the IIgs user, show promise and his commitment to their needs with sound and music. Review of the final MODfile Player, with select edited excerpts from the MODZap documentation/manual file, pertinent to understanding the operations and use of the program with my personal notes and comments included, used with Ian's premission follow: MODZap is an Amiga music module player for the IIgs personal computer. It combines high playback quality with speed and a range of features to insure that MODs sound good. MODZap's primary mission is to reproduce modules conforming to the standard set by the ProTracker program on the Amiga. Support is also provided in a lesser form for StarTrekker and NoiseTracker modules. Review Notes: This MODfile Player is my least favored, mainly because of the unprofessional and immature nature of the documentation/manual file, with its crude language and rude, needless content. The documentation is scattered with hyper-critical and totally unrelated program content. The program is not very 'AUTO' user friendly, comparing it to soniqTracker. The complex nature of its alternate modes, players and such, leave the novice user of a IIgs confused and unable to cope with the random system crashes that they are presented with in certain players; QuadraScope mode, etc. This release of MODZap is designed and oriented towards the seasoned power user, skilled with multiple-tasking needs and using other advanced operating extension programs such as GNO, etc. I don't recommend it for the novice IIgs user. It is however a very good program, for those that want to view a MODfile in action, as it plays, to see all of its effects visually and gain an understanding of what it's all about. MODZap documentation pertinent program and user explanation excerpts continued: Important note: NoiseTracker in this document usually refers to the Amiga versions of the program. NoiseTracker IIgs modules are not Amiga-compatible and you should not attempt to load or play them with MODZap. Special Notice and update notes for future user applications: Please Note: The (soon-to-be-released) Noise Tracker GS v2.00 GS/OS application program, currently under development and beta testing, will be able to convert edit, modify, enhance and save its own music formats, SoundSmith and original imported MODfiles, to -> IMPORTED MODFILES (Protracker file format), that can be loaded and played by all of the IIgs' Imported MOD players, including MODZap. They can also be 'EXPORTED' to other computers for their users to listen to and enjoy. System Requirements An Apple IIgs personal computer with at least 1.125 megs of memory. GS/OS System Software version 6.0 or later is required. MODZap automatically supports all stereo cards and ROM revisions. This version of MODZap has several known bugs, and tends to crash in QuadraScope mode. Use another play mode until things are solidified. Review Notes: I wonder why the QuadraScope mode was even included, other than as a dazzle additive, if it had so many bugs and tends to crash so much, as above noted. The nature and vocal message content of the intro music clip, the intro artwork and some of the program animation (in my opinion), are rather depressing, having a negative and dark nature to them. (Intro Art by WARLOCK) The intro music clip can be bypassed and thanks for adding that option as it becomes rather agrivating, with each repeated use of the program. MODZap documentation pertinent program and user explanation excerpts continued: New stuff since v00.81a (MODs which certain things fix are in brackets, with the actual titles in parens since people translate Amiga* filenames differently) % MODZap now supports a full 5 octave range, which is important when playing MODs composed on IBM PCs and Atari STs. % Unlike that other player, you can now access your Classic Desk Accessories from inside MODZap. % Finally wrote a custom list drawProc so now the instrument list is more informative. The instrument number as seen in the scrolly player, the instrument type (looping, cached looping, or one-shot), and its residency (a ram card for swapped, a chip for cached, and a blue X for non-existant insts). % Wrote and tested brand-new swapper using loop-mode operation just like the popular ShellPlay. As a result, stereo mixing now works great. Also, the phasing effect heard in soniqTracker and NTGS where the same sample played twice in a row sounds slightly different is not in evidence here. % Notice: MODZap's prefs file is supposed to be sparse, so launching MZ from a non-ProDOS disk will cause about 4k of disk space to be wasted. There are no other problems associated with this (everything will work normally). % There are tons of new Options, including a 'startup path' so you can select a path for MODZap to automagically go to on startup (much like Kangaroo* or SuperDataPath, only free =) % A fun memory-trashing bug which has been around a while got squished; this means the end of random wackiness/hangs/crashes. % There are lotsa new player modes: Oscilloscope, a 160x128 scope display of MZ's current output, Oscilloscope (ZipGS) which is a 320x128 scope display for people with ZipGS accelerators (in beta testing, TWGS machines fared no better than unaccelerated ones), and QuadraScope*, which individually shows the output of each track like ProTracker* on the Amiga*. % Instruments may now be cached in DOCRAM for faster performance and cleaner sound. Since the cache manager is new, there is an option to disable it in preferences. There also is a new cache indicater light in the Pumpy Player which glows brighter the more tracks are playing from cache. This is actually the opposite behavior from the cache LED on the ZipGS accelerator card. % The FXLasers have been rescaled so they come up to full brightness quickly and fade away more slowly. This allows you to better see what's going on; formerly the lasers would take so long to trip that if there was a fast series of effects, you'd just barely see the laser start to appear before it was reset by the next effect. Additionally, there is a new Aqua laser for the position jump F/X. % There are several new key-equivalents: OA-J for Jukebox, OA-I to save an instrument, and OA-S for the new Save Module item. Review Notes: Concerning the OA-S for the new Save Module item, I had no success when I tried to save a Module item. This is rather vague and unclear regarding just what Module item it is supposed to save. The function of OA-I is a needed and very useful inclusion, that I wish to commend Ian for including with this updated release of MODZap. MODZap documentation pertinent program and user explanation excerpts continued: % When saving instruments, the instrument's name as shown in the list is now the default filename, instead of the MOD's filename. % Fixed looping so it doesn't loop 65535 times (MOD.TechMaru [TechMaru]) % Fixed tone portamentos so they stop correctly at the target. (MOD.Nebulos [Nebulos]) % Fixed arpeggios so they work without an accompanying note (MOD.Taking [taking on the world]) % Added Ultra-Turbo mode for GNO users. This mode runs with no animations at all, which dramatically increases avalible processor time. % Prefs can now be saved...once you set things up how you like, click the Save Prefs button in the Options dialog and they'll be saved to disk, in your user folder for AppleShare users. % You now may optionally turn off the safety net of filename prefix/suffix checking and select filenames yourself. Using MODZap When you run the program, the splash screen will appear and a short digitized sound clip will play. Click the mouse button to continue the program. To skip this intro, simply hold down the Open Apple key once the program begins running. There are lots of ways to open modules with MODZap*.... 1) Use Open MODule... and select one. 2) Use Force 31 Instrument or Force 15 Instrument if you have one that the auto type checker botches for some reason. 3) Use Jukebox... to grab a whole bunch to hear in a row. 4) Install the MODZap.Icons file and double click a module from the Finder*. Once you have one open by whatever means, the Module Control Panel will appear. It will show you the title, type, and creator program (if possible...only StarTrekker has a distinctive signature of all the popular Amiga Trackers). The control panel includes a list of instruments containing information as follows: Instrument number | | Instrument residency: a ramcard for swapped, a chip for cached, and an X for N/A. | | 3 > O BigTubeGuitar | Instrument type: an arrow for one-shot, a loop for looping, and a loop with a ramcard for cached looping. Additionally there is a keyboard you can click on to play whatever instruments name is highlighted in the list. Playing the module once it is loaded is very simple. Just select Play MOD from the Sound menu. The Graphic Player will pop up and the module will begin. (this happens automatically in Jukebox mode). To stop playback for any reason, press the Option key on your keyboard or click the mouse button. Otherwise playback will end when the module is done. Note that some modules have a Position Jump command so that they loop forever; this is especially true of modules from games or demos. If that is the case the module will loop forever and the only way to stop it is using the Option key or mouse button. There is a scrolly subdisplay at the bottom of the screen arranged as follows: The left most column of the display shows 4 information items relating to the current song. The top most one is the number of positions in the song, the next one down is the current position number, the third one is the current block number, and the bottom most one is the number of the bottom most position in the block shown on the scrolling part of the subdisplay. Several keys can be used while a module is playing. 1-4 toggle the disable/enabled status of tracks 1-4. The spacebar pauses and unpauses playback. The Esc key exits the player if you are in single mode, and aborts the jukebox if you are in jukebox mode. More About the Jukebox: There are some standard behaviors supported by the Jukebox; here goes. Open Apple-clicking adds files to a selection. Shift-clicking selects everything between the current selection and the nearest other selection. Open Apple-clicking an already selected file deselects that file. MODZap imposes no limit on the number of MODs selectable in Jukebox mode other than that the filenames must all fit in avalible free memory (this is very hard to do even with the largest MOD collections!). Menu Options There are several options avalible in the Options item of the Options menu. They are as follows: % PAL/NTSC (soniqTRACKER calls these 50 and 60 Hz respectively). 99% of MODules are PAL (50 Hz) but due to the way early Amiga trackers worked some older modules created on United States Amigas may be NTSC. If a song sounds too slow, try NTSC. There is no other way to distinguish, although some modules may come with documentation which tells you what setting to use (eg MOD.Sandman.PAL or MOD.Everybody.NTSC). %Ignore Tuning allows you to ignore the fine-tune bytes in MODules in case a module sounds weird with them. % Ignore Arpeggios allows you to ignore arpeggios in case you get a MODule which sounds weird with them. v00.75 added range checking so that some modules which formerly needed this option shouldn't now. There are key equivalents for some of the items in the dialog box: A toggles the Ignore Arpeggios check box, T toggles the Ignore Tuning check box, Return is the same as the Okay button, and Open Apple-period (.) is the same as the Cancel button. Additionally, one item is in the Options menu so that you may conviently access it without disk swapping: %Loop Music allows you to determine if MODules play once or repeat until you press the Option key or click. Note that this has effect in Jukebox mode also so you must press Option or click to allow the Jukebox to switch to the next one in the series. Selectable MODs MODs must meet certain criteria to appear in the Open and Jukebox dialogs. o Their type must be TXT or BIN, or $F4 with an aux $6900. o Their name must start with MOD. or end with .MOD (case is now insensitive) unless Ignore MOD./.MOD is checked in the Options dialog. Effect Commands Supported and their Laser colors *NOTE: the ProTracker definitions are used by MODZap. E-effects will still show up on the lasers for StarTrekker modules, but will have no effect on playback* *NOTE2: If no color is stated, that effect doesn't trip the lasers 0 - Arpeggio if nonzero effect data, no effect otherwise (Purple if Arp.) 1 - Pitchslide up (Red) 2 - Pitchslide down (Blue) 3 - Tone Portamento (Green) 4 - Vibrato (Purple) 5 - Tone Portamento with Volume Slide (Yellow) 6 - Vibrato with Volume Slide (Yellow) 9 - Sample position jump (Green) A - Volume slide (Red) B - Song position jump (Aqua) C - Set volume (Blue) D - Break to next position (Aqua) E - Multiple effects (all of these are White) E1 - Fine pitchslide up E2 - Fine pitchslide down E6 - Set Loop/Jump to Loop (includes undocumented mode used by MOD.BassBins) E9 - Retrigger note EA - Fine Volume Slide Up EB - Fine Volume Slide Down EC - Note Cut F - Set tempo (Red) Note that some effects are ignored deliberately; this includes the following: 8 and E8 are not defined on any Amiga* tracker. E0 controls the Amiga hardware filter; the IIgs has no such beast. EF is a 'useless' effect which was removed as of ProTracker* 1.3 on the Amiga; Lars Hamre told me that since its not supported on the Amiga any more I shouldn't support it on the IIgs. Comparison Chart - Updated with notes and revised 7/18/94, to accommodate the new compatibility features for the GS/OS application program: Noise Tracker GS v2.00. Feature MODZap Noise Tracker GS soniqTRACKER ShellPlay -------------------------------------------------------------------- Compatibility: NoiseTracker* Yes Yes Yes Yes ProTracker* Yes Yes Yes Yes StarTrekker* Yes Yes Yes Yes Others No SoundSmith* No No Sonic Blaster* Yes Yes Yes*** Yes*** # of Effects: 21 22 (More pending) 19 29 Other: Swap method: Loop-mode Both Swap-mode Loop-mode Filtering: N/A Yes Yes N/A Sound quality: Fair Very Good Very Good Excellent DOCRAM Caching Yes Yes Yes No Smart volume Yes Yes No Yes Smart looping Yes Yes Yes Yes Editor No Yes No No OS GS/OS 6.0 P8 & GS/OS GS/OS 5.0.2 & up GS/OS 6.0 Keyboard Yes Yes No No Multi-Players Yes Yes No Yes Jukebox Yes Yes~ Yes Yes (Random-play) Tuning Yes Yes Yes Yes Scrolly Player Yes Yes Yes (Goofy) No Bouncing Notes No Yes No No Freq. meters Yes No Yes No Lasers Yes No No No Loading speed Fast Fast Medium Medium Rating 6.9 N/A 9 10 ~ Noise Tracker GS has two Jukebox related programs (so to speak); NT MOD Player, a GS/OS application program to play its music module files individually and VAMPS/NTV Jukebox, a basic program, that AUTO-loads and plays in sequence all data specified music modules, within the basic programs data statement line. These Jukebox programs are for the P8 versions of Noise Tracker GS. They currently do not support the complexity of the GS/OS Noise Tracker GS, (under development). They will have to be updated to handle the new special effects presented with the NT MODULE format, with the release of Noise Tracker GS v2.00. ^ Noise Tracker GS (P8 v1.40), attempts to preform Smart looping with proper per-set PARM. Noise Tracker GS v2.00 GS/OS application program preforms Smart looping. * Noise Tracker GS (P8 v1.40) has 2 save formats, neither of which are Amiga MODules. Noise Tracker GS v2.00 GS/OS application program has 3 save formats; both of the original NTGS file formats (Modules and Music score/wavebank file set) and Amiga MODules (MODfiles - Protracker file format). ** I.E., number and severity of known bugs. There has been at least one documented case of Noise Tracker GS (P8 version) destroying a hard disk partition. Noise Tracker GS (P8 version) also crashes frequently during song entry and editing. Review Notes: I've never been given any documentation or proof to show that Noise Tracker GS destroyed a hard disk partition. I'd love to see such documentation, if it does exist ! I don't agree that Noise Tracker GS (P8 v1.40) also crashes frequently during song entry and editing. It does occur on occasions, when improper (per-set- PARM) isn't exercised. Additionally, with extensive beta testing I've had no instance of any crashes with the GS/OS application program: Noise Tracker GS v2.00. *** The AE Sonic Blaster card has problems with very high output levels. MODZap*, SoundSmith*, Noise Tracker GS*, and many others lower the levels slightly to compensate; soniqTRACKER and ShellPlay allow you to manually compensate for this. A final update note of interest: I've been doing a lot of modification and enhancement with editing 'Imported MODfile' via the most current b8 of NTGS v2.00, adding as many MODfile special effects, as possible, then saving them all to compare their compatibility with play, for accuracy with the added special effects, audio rendering, etc., via all three of the IIgs MODfile player programs. The only one of the three IIgs MODfile players, that can deal with these MODfiles complex of special effects enhancements, that I've added to them with the NTGS v2.00b8 program, without locking up or crashing is, MODZap. This was done to test out just how many MODfile special effects could be added to them and the fact that the other MODfile players would crash or lockup, had nothing to do with the way the MODfile was designed, enhanced and saved with NTGS v2.00b8. The complexity of the enhanced effects were designed to test out how much the IIgs MODfile players could handle, without failure. In all honesty, I'd have to conclude that the NEW Noise Tracker GS v2.00, can create, design and/or enhance MODfile special effects, to such a complex degree, that they just might have to update the MODfile players to accomidate such efforts. Congradulations go to Ian. Your MODZap program withstood all of my beta enhancement efforts and played all of the NTGS v2.00b8 MODfiles very well, presenting all of the special effect enhancements with accurate audio and video rendering, in the normal (Classic) player mode ! Known Imported module with problems: (Example MOD: Number1,(an Amiga Noisetracker MODfile) can and often does crash MODZap. Using all modes, settings options and players with MODZap gave very poor audio rendering of this Imported Module file. It plays perfectly with every special effect presented to perfection with ShellPlay. SoniqTracker plays it very well, with near perfection for its special effects. Noise Tracker GS, (P8 and GS/OS) loads it perfectly and give a very good audio rendering interpretation when playing it. When I loaded this 'Number1' Amiga Noisetracker Imported MODfile, via the NEW NTGS v2.00b8 and saved it back, as a Protracker MODfile, then loaded it into MODZap, it played perfectly, with all of its special effects, presented with crystal clarity. If you wish to contact Ian, you might be able reach him by voice phone at: (515) -296-8812. (I've tried to contact him dozens of times in the past month, by phone with no answer) I've test loaded and played dozens of Imported Module files of every kind, with all three of these MODfile Players, using all of their modes, players and options, from GS/OS v6.0.1, both with and with out INIT/DA's, using standard/stock and accelerated IIgs'; ROM 01 and ROM 03, with 4Megs of RAM, from both; 3.5 disks, internal IDE hard drives, floptical drives RAMFAST cards, TransWarp and Zipcards. I used the following audio equipment; SoundMeister stereo card, KOSS electrostatic Model ESP-950 headphones, including an E/90 energizer amp., to audit and obtain an accurate audio rendering and for diligent, comparative review of their overall ease of operability, audio play quality, special effects support and performance abilities, with my overall rating for each. Please keep in mind, that I've compiled this collective review, article and report from many imported word processor files of various types/origins and also from several program documentation files. I've reviewed and edited the content, attempted to do a visual and automatic check for spelling errors. I'm sure that some spelling errors, grammar errors, punctuation and spacing problems, original character translation errors are present. I hope you will be understanding and forgive me for any oversights or errors present. But, nothing is perfect. I've done the best I could, with the limited time I had available to work with and present all of this, within one standard text file. I want to express my sincere gratitude to all of those, who gave me permission to include extracts and edited excerpts from their documentation and to all of people who contributed the original materials used in this file. Your contributions, information and assistance have been a valued effort, that I'm sure all readers of this file will appreciate and should certainly find useful, as a collective of information, now available from one file for their review needs. You may use all or any portion of this article for any publication or transmission you wish. Charles T. Turley, Ph.D. 115 Santa Clara St. Brisbane, CA. 94005 USA Tel. (415) 468-1609 Parting final comments follow; Always keep in mind, that MUSIC is the only real universal language. Everything must at some point, reach back upon itself, as with a full circle. What goes around, comes around. We are all the same person, trying to shake hands with ourself. Even with all of the diversity, isolation, unique cultures and life styles, it's still one world. 'Unus Mundus Mollismerx Magus' Apple IIgs FOREVER ! -END OF FILE-