The following musical thingie has got the Strobe and null1024's Choice Award 2013! ^,^ Tritone is a three-channel '[[zxbeep (format)] engine (courtesy of Shiru) which, despite it can generate sounds similar to Savage, is in fact A LOT more flexible than that. So far, there are two ways of making music on it - Tritone compiler pack+an .xm tracker or '[[Beepola]. The former is harder to get on with, but when you learn how to use it, you're free to abuse the song's speed at your will. The latter is, of course, easier and probably more familiar to you, but it's really tight on tempos. '[#[Specifications] You've got four chans to play around with, in a no particular order: three tones and one drum channel. Tones may have one of eight possible duties - from the nessy 50% tone to a more speccy 8% coil. Drums, on the other hand, are... Drums. Synthed ones. Which don't exceed 8 ms. If you've been using Phaser1 without sampled percussions, those might be familiar to you - except the total percussion count goes to 35! :o No arpeggios, slides, portamentos or heavy duty bending is supported by the engine, but that doesn't mean you can't use the F01 speed and add those in manually. Oh, and this way, you could pull off a SID without actually having one! :D Speaking of speed, you can only define it in the very beginning of the pattern (on the other hand, you're allowed to play with pattern length). Both global (aka tempo) and local speeds can be set - but it's always in the beginning. There are two ways of volume control here: either you have three tone channels with different volumes (from left to right, quietest - medium - loudest) or you keep them at the same volume. Since .xm files have no channel volume support, you either have to make a temporary change to .it, or put the volumes on each note manually or just pretend that "hey, this bassline is gonna be louder than the lead! D:" '[#[Step-by-step Guide On Abusing Tritone] '[t[b3]Sexmodit'[/t] There's no such thing as '[o]crash course'[/o] on Tritone, since this is an engine that actually needs some proper mastering. But, no matter whether you're a n00b or a stud, you will need to download '[l[http://shiru.untergrund.net/files/zx/tritone.zip[the Tritone toolchain itself] and '[l[http://sjasmplus.sourceforge.net/[SjASMplus compiler] to get going. Track it out, with these rules considered: 1) You're free to pick any speed/tempo you want, although a majority of really mindblowing Tritone tracks is usually composed on F01, with any global speed you need. 2) You're only allowed to put the Fxx effect in the beginning of the pattern. Any pattern you need. 3) You're allowed to have patterns of any length - although the longer the pattern, the bigger the compiled module! 4) You can't use any other in-tracker effects - those will be ignored by the compiler. 5) To define the loop point, use the "Restart" feature, not the "Pattern Jump" effect. 6) You have to put the instrument number by EVERY note, otherwise, the note will be considered to be glitchy. After you're done making the song, replace the original music.xm in the package with yours and hit the "compile.bat" batch. If everything's fine, you will get a .sna/.tap file to submit here on BotB. If it's not - re-save the .xm under MilkyTracker or expand the amount of memory used. It's advised that you test the successfully compiled song before submitting it, though. '[t[b2]Additional files'[/t] '[l[https://dl.dropboxusercontent.com/u/95941449/BotB%20Megacrap/tritone_base.rar[Module template] with correct pitches (but which definitely won't be correct on the Atari XL conversion ,_,). Oh, and there's another template from '[l[https://battleofthebits.com/barracks/Profile/raphaelgoulart/[raphaelgoulart], just in case if the above link doesn't work at all: '[l[https://www.dropbox.com/s/3ss44txv17tuq6w/tritone.xm[mirror's here.] '[l[http://web.archive.org/web/20160311010412/https://dl.dropboxusercontent.com/u/95941449/BotB%20Megacrap/tritone2tap_mod.rar[XM2TAP conversion tool] by introspec. '[t[b2]In case of emergency'[/t] - Since the songs are stored right at the end of ZX48K's memory, you're expected to use only 16KB for the song (which is 151KB for the .xm source) - else it won't compile at all. - If xm2tritone crashes, the most possible cause of this would be that you didn't save the thing in MilkyTracker (as far as I know, OpenMPT modules are not supported by the converter - but any other tracker *might* get along with it). '[t[b3]Beepola'[/t] As of Beepola 1.08, this tracker is not solely for creating two-channel music anymore, no - now it has QChan and Tritone support! On one hand, you're not left face-to-face with compilation and compatibility errors, as well as keeping all those little details in the source module - write the song, compile it to .tap and you're off. You don't even have to define the volume control method in tritone.asm anymore - there are two separate engines for that. On the other hand, your maximum tempo will still be 20 - which is the Beepola equivalent to 125BPM + F01 in an .xm module (i. e. all of Strobe's zxbeep tracks so far). Among other issues, you may come across a more strict pattern amount limit. There's an extra feature you can't yet use with an .xm module: Tritone was slightly modified for Beepola so it'd be possible to pull off detunes. '[#[Tools Of The Trade] '[t[b3]General'[/t] - Since Tritone's actual drum synths are basically insufficient for creating powerful percussion, try to dedicate on channel for tone drums - as in the tone quickly sliding down. It's gonna sound even better if you place basslines beneath the drums - even though that's quite a usual practice. - Suppose your .xm module is loopy - and that you've changed the speed mid-song so it would keep the same pace on the second loop. That's going to work for the .xm preview, but definitely not for the compiled module, just because Tritone resets the speed to the original during the loop. - The pitch goes apeshit crazy between platforms, mainly for because the cloned and original ZX Spectrums have different I/O port contentions. Also, note that Beepola doesn't emulate the port contention for the Russian clones well at all - so it would be one semitone below (or eleven semitones about - that's kinda hard to get figured out) than how it sounds on Pentagon machine. - Again, you've got two different ways of volume control - the first one is turned on by default. To switch between these two, (un)comment the line "define NO_VOLUME" in tritone.asm. '[t[b3]Sounding vs Size'[/t] Boy, that's where things are getting interesting. ZX Spectrum 48K's memory consists of 32KB of fast memory - that's where the song data is being stored and played from. Everything below that 32KB is basically slow memory - and that means you can't stretch your music beyond that point! However, by default, Tritone uses roughly 16KB of all that - and that's not gonna be enough if you're writing more than one-minute songsies. If you're using the xm2tritone TAP utility, then edit these files: - loader.bas, on which you should replace the address "49152" to "24575"; - test.asm, replacing "#c000" with "#8000". Going overboard with 32KB available is, however, only useful if you're planning to use the song exclusively for the art purposes, as it's extremely unpractical for games or music demos (making the song for 128K machines is rather pointless since it has AY anyway and it doesn't eat so much processor's power). To avoid that, you might consider going from the top F01 speed to F02 - and possibly F04, in case if you don't wanna use tones+drum for percussion at the moment/at all. That will let you to reduce the resulting song's size, obviously enough, twice - but that will also result in less fast arps, less deep filters and drums. So, it's pretty much all up to you to decide which bits of the song will get which speed - and, hence that, certain optimizations. '[t[b3]n00b wants teh instruments! :o'[/t] '[t[b2]Bass drum by Strobe'[/t] Left channel is tone, right channel is drums. '[o]C-6 00 | C-5 09 A-5 00 | --- -- D#5 00 | --- -- C-5 00 | --- -- A-4 00 | --- -- D-4 00 | --- -- C-4 00 | --- -- --- -- | --- -- C-4 06 | --- --'[/o] '[b]<--- bassline, change to every note you want'[/b] '[o]--- -- | --- -- --- -- | --- -- --- -- | --- -- C-4 03 | --- --'[/o] '[b]<--- ditto'[/b] '[t[b2]Bass drum by null1024'[/t] Left channel is tone, right channel is drums. '[o]E-5 01 | C-5 09 C-5 01 | --- -- G#4 01 | --- -- E-4 01 | --- -- C#4 01 | --- -- --- -- | --- -- --- -- | --- -- === -- | --- -- C-4 07 | --- --'[/o] '[b]<--- bassline, change to every note you want'[/b] '[t[b2]Tom drum by brightentayle'[/t] Left channel is tone, right channel is drums. '[o]C-7 01 | D-5 10 G-6 01 | --- -- C#6 01 | --- -- A#5 01 | --- -- --- -- | --- -- C-4 06 | --- --'[/o] '[b]<--- bassline, change to every note you want'[/b] '[o]--- -- | --- -- --- -- | --- -- --- -- | --- -- C-4 03 | --- --'[/o] '[b]<--- ditto'[/b] '[t[b2]C64 filter by Strobe'[/t] Can be done either with one-step transition to another instrument or two-step. The one you see below is the former. '[o]C-6 01 C-6 02 C-6 03 C-6 04 C-6 05 C-6 06 C-6 07 C-6 08 C-6 07 C-6 06 C-6 05 C-6 04 C-6 03 C-6 02 C-6 01'[/o] ...and here's the latter. '[o]C-6 01 --- -- C-6 02 --- -- C-6 03 --- -- C-6 04 --- -- C-6 05'[/o] You get the idea. Feel free to limit the duty range any way you want (for example, you can try to switch the instruments from 01 to just 04 and vice versa). '[t[b2]Fading note by brightentayle'[/t] Suppose you can make echoes with Tritone by sacrificing two channels of it - but what if we just try to pretend we're more NESsy than we really are? Well, you need two channels again, just to perform this trick. If the note's long enough - split it to three like it goes below. On this chart, ch1 is the quieter channel, ch2 is the louder one. '[o]C-6 01 | C-6 01 --- -- | --- -- --- -- | --- -- === -- | --- --'[/o] '[b]<--- first split'[/b] '[o]--- -- | --- -- --- -- | --- -- C-6 01 | === --'[/o] '[b]<--- second split'[/b] '[o]--- -- | --- -- --- -- | --- -- === -- | --- --'[/o] In other words, the first part of the note will play on both channels - that will make up for a louder sound. Next, the note continues playing only on ch2, which is the loudest of both chans. Then, the note halts on ch2 and begins playing on ch1, so basically, it produces the quietest sound possible. Loud - quieter - quietest, in other words. Simple as that. '[#[Possible Inspirations For You] Shiru's bundle song is a pretty humble demonstration of what Tritone can do, so you could pretty much get along with it for starters. Once you're done, you've gotta listen to some nullcore or strobecore for the beeper. The latter even has '[l[http://battleofthebits.com/arena/Entry/RT-8416Droid/6941/[.xm] '[l[http://battleofthebits.com/arena/Entry/Scylla/8491/[sources] in comments! Battle of the Bits now also has '[l[http://battleofthebits.com/academy/GroupThread/7325/THIS+IS+TRITONE%21+-+a+music+demo+with+some+BotB+musics/[its' very own Tritone music compilations.] '[#[BOUNS] Tritone is also supported by a pretty long line of '[l[http://atarionline.pl/forum/?PostBackAction=Download&AttachmentID=3998[xxl's beeper-songs-on-Atari-XL converters]. Thanks to Kakos_nonos/Kabardcomp, Tritone songs are also pretty much playable on the sound chip of an old Russian computer called Apogey BK (which has three channels with 50% square waves) - albeit without the drums and the different waveforms. '[#[See Also] '[[zxbeep (format)] '[[Huby] '[[Octode] '[[Phaser1] '[[Savage] '[[Special FX] '[[Stocker]