+================================+ | | | mobileTunes 3.2 | | by Kerm Martian | | Sound by Ben Ryves | | http://www.cemetech.net | | November 10, 2010 | | | +================================+ I. Requirements and Installation . ..--================================--.. . To use mobileTunes 3.2, you need Doors CS 7.0 or higher on a TI-83+ or TI-84+ family graphing calculator. You can get Doors CS 6 from: http://dcs.cemetech.net To install mobileTunes 3.2, send MT3.8xp to your calculator using TI-Connect, TiLP, or compatible linking software. To create your own songs: http://www.cemetech.net/projects/mtunes/converter.php (see also the Making Songs section below). II. Using mobileTunes 3.2 . ..--=========================--.. . mobileTunes 3.2 can be run from Doors CS 7 by either running MT3 and opening songs from within the program, or clicking directly on songs in Doors CS 7 to make them open in mobileTunes 3.1. mobileTunes uses the standard Doors CS GUI and interface system: +----------+-------------------+ | Key | Function | +----------+-------------------+ | [Arrows] | Move mouse cursor | | [2nd] | Left-click | | [TRACe] | Left-click | | [GRAPH] | Open file | | [Y=] | Play / Pause | | [WINDOW] | Stop | +----------+-------------------+ III. Making Songs . ..--=================--.. . You can turn MIDIs into MT3 songs using the mobileTunes converter: http://www.cemetech.net/projects/mtunes/converter.php If you want to manually create programs from sheet music or your head, read on. [This section adapted from the QuadPlay 1.0 documentation by Ben Ryves] This'll need some explaining! Make sure you have an assembler that supports macros (TASM coupled with DevPac8X is perfect). I've tried to make things easier for you with the notes.inc file. However, the structure of the song files needs some explaining. Firstly, you need the song header: | .org $0000 | #include "notes.inc" | title: .db "Bellon - Stage 7",0 | artist: .db "Mars Jenkar",0 | album: .db "Zero Wing",0 Make sure that you get those sections in - they must be in that order. If you don't want to specify an artist or album, put a space or "Unknown" in. Do NOT erase the line! Also, ensure that you leave the zero at the end of each. Some pitfalls: * Make sure that the .org is set to $0000. This is not an assembly program, this is a data file, and it's not being loaded to a particular address. The software needs to calculate the location of the song sections, and if you don't align everything to 0 it will get them wrong! * "notes.inc" MUST be included as the FIRST piece of code. It contains a program header that the software needs to find the song files on the calculator. Now you have the song header in place, you need to break down your song you wish to write into sections. A simple song might be a section all on its own, but if you think of most songs they repeat bits (such as the chorus or verses) and it makes sense to not have to repeat the code for them. The way that you define sections is with a label (a piece of text followed by a colon). For example, here is the intro part to the "BELLON" file: | intro: | note(a0,a1, e3,c3, sixteenth) | note(a0,a1, rest,rest, sixteenth) | note(a0,a1, d3,a2, sixteenth) | note(a0,a1, rest,rest, sixteenth) | note(a0,a1, a2,c3, sixteenth) | note(a0,a1, a2,d3, sixteenth) | note(a0,a1, a2,c3, sixteenth) | note(a0,a1, a2,d3, sixteenth) | note(g0,g1, a2,c3, sixteenth) | note(g0,g1, rest,rest, sixteenth) | note(g0,g1, g2,b2, sixteenth) | note(g0,g1, rest, rest, sixteenth) | note(g0,g1, g2,d2, sixteenth) | note(a0,a1, rest,rest, sixteenth) | note(a0,a1, a2,e2, sixteenth) | note(g0,g1, rest,rest, sixteenth) | | ; just bass | | note(a1,a2, rest,rest, sixteenth) | note(a1,a2, rest,rest, sixteenth) | note(a1,a2, rest,rest, sixteenth) | note(a1,a2, rest,rest, sixteenth) | note(a1,a2, rest,rest, sixteenth) | note(a1,a2, rest,rest, sixteenth) | note(a1,a2, rest,rest, sixteenth) | note(a1,a2, rest,rest, sixteenth) | note(a1,a2, rest,rest, sixteenth) | note(a1,a2, rest,rest, sixteenth) | note(a1,a2, rest,rest, sixteenth) | note(a1,a2, rest,rest, sixteenth) | note(g1,g2, rest,rest, sixteenth) | note(a1,a2, rest,rest, sixteenth) | note(g1,g2, rest,rest, sixteenth) | note(g1,g2, rest,rest, sixteenth) | | endsection (If you put a semicolon, ";", anything after it on that line is ignored by the assembler as a comment). The "note" instruction defines a single note. Each note has 4 tones and a single duration. The syntax is: | note(left1,left2,right1,right2,duration) The actual note values are periods, and instead of you calculating them yourself they are all defined in notes.inc. They all take the form "notename-octave", so c0 is a C, c1 is also a C (but an octave higher), cs2 is an octave higher and sharp. There are 8 octaves (numbered 0-7), but please stick to the lower ones (you get increased distortion in higher ones), and the available note names are: * c - C * cs - C# (sharp) * d - D * eb - Eb (flat) * e - E * f - F * fs - F# (sharp) * g - G * ab - Ab (flat) * a - A * bb - Bb (flat) * b - B You can also specify "rest", which plays no sound. The durations are expressed as fractions of whole notes (easier to copy from music this way). You have: * whole * half * quarter * eighth * sixteenth * thirtysecond * sixtyfourth * half3 * quarter3 * eighth3 * sixteenth3 * thirtysecond3 * sixtyfourth3 Those that have the number 3 after them are the "triplet" versions. Those that have the letter 'd' after them are the "dotted" versions. After each section, you MUST put the instruction "endsection". Once you have structured your sections, you need to piece them together into a song. You do this with the instruction playsection(). You must also make sure that this part comes just after the song header. You put the label of the section you want to play inside the brackets. Finally, end the song section with the instruction "endsong". You must also make sure that you set "tempo" to something - 100 is a good start value (the smaller the number, the slower the song). The best way to show this is to look at one of the existing files, but here's a simplified "song": | .org $0000 | #include "mt3notes.inc" | .db $BB,$6D | .db $C9 | .db $31,$80 | .db 0,1,4 | title: .db "Sample Song",0 | artist: .db "BR & KM",0 | album: .db "The REadMeIX 2007",0 | | song: ;you must have this label! | tempo = 100 | | playsection(intro) | playsection(verse) | playsection(chorus) | playsection(verse) | playsection(chorus) | playsection(ending) | endsong | | | intro: | note(f0,f1, c3,f3, sixteenth) | note(f0,f1, c3,f3, sixteenth) | note(g0,g1, d3,g3, sixteenth) | note(g0,g1, d3,g3, quarter) | endsection | | verse: | note(f0,f1, c3,f3, sixteenth) | note(g0,g1, d3,g3, sixteenth) | note(g0,g1, d3,g3, quarter) | endsection | | chorus: | note(f0,f1, c3,f3, sixteenth) | note(g0,g1, d3,g3, sixteenth) | note(g0,g1, d3,g3, quarter) | note(g0,g1, d3,g3, sixteenth) | note(g0,g1, d3,g3, quarter) | note(g0,g1, d3,g3, sixteenth) | note(g0,g1, d3,g3, quarter) | endsection | | ending: | note(d0,d1, a2,d3, sixteenth) | note(d0,d1, rest,rest, sixteenth) | note(d1,d2, a2,d3, sixteenth) | note(d0,d1, rest,rest, sixteenth) | endsection | | .end You MUST have the .end bit at the end too. TASM gets a bit confused, otherwise... Please upload any good songs to ticalc.org - or, if not, at least send a copy to me so I can host it and include it in future releases of this software. If you need any help with the above process, do not hesitate to contact Ben Ryves or Kerm Martian.