----------------------------------------------------------------- TPLAY v1.x released for comments, feedback etc ----------------------------------------------------- * all versions to be completely free/public domain. * PC 80286 or better, with SB or compatible sound card. or Serial MIDI card - currently com3. * modified versions, or comments etc should be emailed to the author.. and good tabs please.. * for non-commercial use -this code must not be re-sold. apart from copying/distrubtion costs it *must* be free, and *must* be distributed in it's original, (whole) form. * use at your own risk, I take no liability for this code. * no user support etc etc.. * Lindsay Offer, 29th October, 1995. * email: loffer@nodecg.ncc.telecomwa.oz.au TPLAY v1.53� things must have a version number mus'nt they? -------------------------------------------------------------- NOTES * compact .tab player, nowhere near perfect.. * I got sick of very cruddy printouts.. - and files full of hard to find and use tabs. * tplay displays on the screen, or plays in real time..so you can keep all your tabs on the PC - (zipped and backed up on floppies of course!). * ideal for teachers and students.. - of guitar, bass guitar, and banjo.. * originally designed for classical guitar, the additions for banjo and bass show the potential to use this technique for *almost* any stringed instrument, or even harmonica tab. (ie Fiddle, mandolin, balalaika, ukulele etc etc..) --------------------------------------------------------- LIMITATIONS * if tabs have weird characters, weird things happen, you have been warned, (just search and replace unwanted bits). * doesn't go above 9th fret, unless coaxed.. * some unusual tabs sound bad, i.e if they are not rhythmically assymmetrical..(no more big words for a while!! (laid out proper)). * timings a bit rough, depending on the tab, and when the system takes a breath :-) * this is not a *real* application yet. * it needs more testing and rehashing. * the code still contains garbage.. * it does show that the idea is feasible --------------------------------------------------------- TODO LIST and MODIFICATIONS * support more instruments * support footswitch in show mode. * support for MPU and SB MIDI * support for note length needed * support automated accompaniment * needs direct writes to video * proper data handling, use track approach for each string * smart bar/beat counting * proper interrupt driven timing (windows 95 only allows you to grab a pretend interrupt. I haven't figured out how to get truly stable timing on all O/Ss yet.. * midifile support possible * port ot msc, gcc and Linux --------------------------------------------------------- THE ANATOMY OF A TAB FILE - using one of the supplied (with tplay) tabs, IMAGINE.TAB, as a sample. This was downloaded from OLGA, and only had the % signs added for top lyric line added. In PLAY mode, tplay only has room for one top line. In SHOW mode, tplay displays *all* %'d lines.. /* mail header section */ tplay just ignores these lines, of course this is present only if you download or receive the tab via mail, it is customary to leave the headers intact to acknowledge the *tabber*. If you enter your own tabs from scratch, simply omit/ignore this section all together.. � Date: Sun, 20 Feb 94 09:49:50 GMT � Message-Id: <9402200949.AA01973@etlxd42k> � To: jamesb@nevada.edu � Subject: TAB: Imagine - John Lennon � � Posted by: marp@irix.bris.ac.uk (R. Porter) � Date: Tue, 18 Jan 1994 12:27:59 GMT � � Below is a guitar transcription of Imagine. I have tried to � make it sound as true to the piano style as possible. /* tablature section */ *MUST* be flush with the left margin �top lyric line. *MUST* have the % sign in the left margin. ����->%Twice: E------------------------------------|------ 1st (high E) string B----------------------------0-------|------ 2nd string G----0-------0-------0-------0-------|-2---- 3rd string D----2-------2-------2---------------|-3---- 4th string A--------3-------3-------3-------3---|-----3 5th string E----3-------3-------3-------3-------|-1---- 6th string ����-> C ^ Cmaj7 F bottom � lyric line �� each number indicates the fret to play, with 0 indicating an open string ��Ŀ ��ĴE-�----------------------------------|------ � ����--------------------------0-------|------ � G----0-------0-------0-------0-------|-2---- � D----2-------2-------2---------------|-3---- � A--------3-------3-------3-------3---|-----3 � E----3-------3-------3-------3-------|-1---- � �� tplay searches for these two characters in the left margin and then assumes if they are tab that next strings *will* be there, legal characters can be added by recompiling but should include: 123456 E- -- e- E| |- ==> guitar, assume 6 strings EADGBe D- d- ==> banjo, assumes 5 strings gDGBD G- g- ==> bass, assumes 4 strings EADG Timing marks can be placed in blank tab to aid in inserting the frets numbers etc symmetrically. They will be displayed *only* if the % lyric flag is entered �� at the beginning of the line, in the left margin.. ��-> 1 e + a 2 e + a 3 e + a 4 e + a 1 e + etc etc E---------------------------------|------ B---------------------------------|------ G---------------------------------|------ D---------------------------------|------ A-------------------------0---2---|-3---- E-z-------------------3-----------|------ ^ ��-this z or Z indicates a rest, this is needed where silence is needed at the start of a bar. zzzZZZZ. This will now play in correct time. /* refer to the source code, get_tab function */ /* for more detail, and the actual code... */ N.B: the ASCII codes can be checked by looking at asc.exe, (included with tplay, BUT don't overlook the difference between the line draw � and the ASCII dash/minus -. These *are* different, and some tabs might have a bad combination of these and other characters, and *will* print and play badly. The only two choices are: 1. fix it with search and replaces, or simply entering the proper codes and characters, checking the timing as well, or 2. don't play it.. --------------------------------------------------------- TABBING DOs and DONTs * tabs are quite devoid of timing information, so tplay assumes that the tab is laid out symmetrically - each dash (-) has the same time value. DO set out tabs like the examples. * DO copy the blnk*.* supplied empty tabs to a new empty file. DO use these templates, tabs can easily be put together in a standard text editor. * DONT expect all tabs to play first up. Most will need some cleaning up. If you play tabs with lots of illegal and unexpected ascii values, be warned that tplay will object. SIMPLY DO clean them up first..Notes above the ninth fret are special cases. (See HISTORY, section 5. below) * DONT put anything *immediately* after the first e or E in the first line of tab. tplay will ignore this line, it's part of the test for a new section of tab!! * DONT expect too much! tplay can *preview* a tab, but it's not supposed to (yet, anyway) play like a recording or a MIDI file. * learn and listen using PLAY MODE, then use SHOW MODE for screen display for proper solo playing. * DO use an old keyboard, and turn the pages using the space bar with the keyboard on the ground, in SHOW mode - or install a small jack in the end of the keyboard across any key, and use a standard footswitch. Classical players can install a footswitch in their foot stool. (only joking! - I'll try to add a footswitch using the joystick port as soon as I can). * DO use batch files. They make things a lot easier. * DO copy the example batch files, edit them and put in new tab file name and an appropriate timing value. * DO check out the tablature newsgroups. This is a good source of info, and tabs, and help on the curly ones. * DO, DO, DO post all your *good* tabs * DO NOT post transcription straight out of a book or magazine as your own work, (you can end up in trouble for copyright breaches). Make sure it's your *own* version of the song. * DO include the recording, artist etc, so that other people can try to get the *same* version as the tab. --------------------------------------------------------- SERIAL MIDI CARD, MIDI OUT ONLY. A MIDI interface card can be made using an old dual Serial Card:- NB. - this assumes that the card will let you configure as COM3, at address 3e8(hex). 1. Change crystal from 18.432 MHz to 10Mhz. Resoldering needed. 2. Connect midi socket to UART SOUT, (8250 pin 11), via a 74LS05 open circuit collector gate. It may be neccessary to cut the track that normally goes to the 1489 line driver. Pin 40 is simply a convenient point for +5v. FUNCTION 8250 MIDI 5 PIN PIN DIN SOCKET 220R o +5V 40 ---------------/\/\/\-------o pin 4 1 \ 2 220R o SOUT 11 -+--| \o-------/\/\/\-------o pin 5 | |/ o | 74LS05 o/c collector buffer cut old x (pin 14 and pin 7 Vcc and gnd). track | use the other gates for more outputs.. 3. Test and play MIDI output with a MIDI Synth/Sound Module. You will need to select a sustaining, guitar-like voice. --------------------------------------------------------- SERIAL MIDI CARD SOFTWARE � tplay, and mplay both support this card. mplay is an excellent command line MIDI file player written by Henry So. It also plays karaoke files and can be found on the web. Do a www search on karaoke. This card needs the serial card driver, sermplay.exe. � I think the address for mplay, for MPU401 style interfaces is http://www/teleport/~labrat/karaoke.htm and there is a heap of relavant info there.. ----------------------------------------------------- tplay usage: ============ >tplay filename.ext [dashtime] [show] [eraseall] [number of strings] [dest h/w] where: [dashtime] [show] [eraseall] default=100 default=1 default=1 60 = fast 1 = show 1 = erase fingerings 100 = moderate 0 = play 0 = leave(puts + on fingerings) [number of strings] [dest h/w] default=6(gtr) default=0 Sound Blaster/compat FM 4 = bass 1 = Serial Midi Card at COM3, 3e8 5 = banjo 2 = both, but check the *tuning* egs. tplay x.tab 100 0 1 6 1 = play and erase, on Serial MIDI card, gtr. tplay x.tab = show x.tab (no further switches needed). tplay x.tab 80 0 0 = play, but leave +'s to show fingerings -see demo*.bats and readme.txt for more information and examples.. displays .tab files one row at a time. � IN SHOW MODE, (not in PLAY MODE): use % in the .tab to indicate additional line to show for lyrics, layout directions etc. see example .tab's � use @xxxx to set dash time, default is 300 msecs per dash notated in the tab. � zillions, (+/- a couple) of .tabs at OLGA, but need slight modification to the non-standard ones.. I use ftp.uu.net /docs/music/guitar mostly..... see also the alt.tab.guitar newsgroup � new Australian site - ftp.ucc.gu.uwa.edu.au /pub/mirror/guitar --------------------------------------------------------- DIRECTORIES =========== If you unzipped tplay with the -d (directories) option the files will be organised into directories. This is because of the huge number of files you end up with.. If you didn't, tplay won't be able to find the tab files from the batch files.. \tplay executeables and batch files \tplay\tabfiles tabs files, .tab .ban .bta \tplay\source tplay source and obj files --------------------------------------------------------- DEMOS and BATCH FILES: ====================== Because I'm lazy, (and wanted as small an executable as practical), there are a lot of command line parameters, and I've used human-user unfriendly switches. The use of batch files simplifies common usage. 1. DEMOSHOW.BAT this demonstrates the SHOW mode, for playing the displayed .tab. This works just fine *without* any sound card. Simply run the batch file (full screen mode if in WINDOWS) and let the files play.. 2. DEMOPLAY.BAT this (and the other batch files) demonstrate the PLAY mode. Here, the tab is displayed and played in real time. 3. DEMOPLA?.BAT == plays selected guitar tablature files, .tab. 4. DEMOBAS?.BAT == plays selected bass gtr tablature files, .bta. 5. DEMOBAN?.BAT == plays selected banjo tablature files, .ban. PLAY.BAT and SHOW.BAT can be modified to set up how you'd like tplay to behave normally. ADDITIONAL and UNFINISHED tab files are also included.. - mail me the good ones you wind up with... --------------------------------------------------------- SOURCE FILES: ====================== 1. The object files required to recompile tplay.c are included. Edit m.bat in the sources directory to point to tcc.exe, and you can modify tplay to your hearts content. 2. Changing the voices in tplay.h will allow you to get more realistic sounds, if you want.. 3. Changing the note offsets and values will let you use different tunings and instruments. 4. Let me know of any good changes you make. I still have some ideas to implement, and the next versions will have the same format for re-compiling etc.. --------------------------------------------------------- NOTES ON HISTORY & CHANGES. =========================== 1. version a1.1 5/10/95 i. removed pesky (&& live) from line 304 in tplay.c which was causing first notes of bars to be dropped.. ii. some tabs really screw up when you consider their layout wrt time. These show up as un-equal length tab in the PLAY bottom display. iii. removed printf that was causing lines to be printed as file read in. iv. potential *non-bug* in batch files. Extra lines in the batch file, (empty, hidden lines at the bottom), cause tplay to exit with carriage returns at the bottom of display. Looks bad, does no harm though? 2. version a1.2 14/10/95 i. changed adlib library, to suit more cards. ii. added more .tabs and batch files.. iii. WINDMARY.TAB is *playable* but contains all of the quirks encountered with *undisciplined* tabbing.. iv. blank tab text file templates provided, other timings can be simply created along similar lines... 3. version 1.3 i. added escape, on the fly tempo adjust, and PAUSE ii. added real time. dashtime is now *close* to msecs/dash. modified batch files to make dashtimes realistic. 4. version 1.4 i. added 4,5,6 string capability, banjo, bass etc check out the banjo sound blaster patch!! yee-ha! - demoban1.bat -- mountain dew - demoban2.bat -- wabash cannonball the bass demos are demobas*.bat ii. added detune value. to allow the whole frequency base to be set to allow for tuning. My synth has a tune knob, but not my SB card! ..and my guitar strings break, and the neck might bend, if the notes are too high.. 5. version 1.5 i. added support for *serial* midi interface. Still working on the MPU-401 and SB-MIDI code. ii. utilities now include a) blank tabs = .tab 6 str gtr = .ban 5 str banjo = .bta 4 str bass gtr b) asc.exe, you'll need this to figure out how to code up anything above the 9th fret. See ROMANZA.TAB and WINDMARY.TAB for examples.. Do a search and replace on "10", "11" etc to keep all values in use to a single character width in the tab. Maybe one day I'll think of a another way to do this... but it works for now.. "asc.exe" simply displays all that screen ascii characters. Because ascii codes for 1 to 9 are used, to get notes to play above 9, you must use the characters after 9 in the ascii table. ie : = 10, ; = 11 etc etc.. +--------------------------------------------+ | the order is : ; < = > ? @ A B C | | 10 11 12 13 14 15 16 17 18 19 | +--------------------------------------------+ the correct numbers are displayed in PLAY mode, but not in SHOW mode.., all correct positions of notes are displayed in both modes.. c) panic.exe - command line program that sets all notes off with the serial MIDI card, to get rid of any inadvertant hung note-ons.. This would be a button in a #WIMPS# GUI.. /;^) but we dinosaurs enter "panic" and press return.. #:) This command can be placed in batch files as a safety precaution against exiting with and leaving notes on. The code does check for this, but occasionally a note can be _hung_ on _any_ MIDI system. iii. added on the fly fine tune. use keypad UP and DOWN arrows.. This will give a value for your PC and card, but need to re-compile at this stage to take advantage of this.. My values put tplay1_5 executeable on concert pitch A = 438Hz. This feature can allow people who like to tune _slack_ to adjust tplay to suit their tuning, *do* need to recompile though.. iv. added repeat "current page", (thanks Wolfgang for the suggestions). Left arrow now repeats the current page of tab. The bar number is reset, and a little arrow follows the current note.. Right arrow is "single step forward" key.. v. rearranged the screen layout to include a top line "menu". vi. added lyrics for PLAY mode. The line below tab displays *automatically*, every time.. to display the line above tab, you must use the % sign in the extreme left margin, then it is displayed. and whatever else I did.. and called it v1.53�.. #:> now I need some sleep.. ====================================================================== GLOSSARY: --------- MIDI means Musical Instrument Digital Interface. This is a control protocol, (language) for controlling musical instruments or devices over a cable by a Master controller, (computer or sequencer). FM means Frequency Modulation, this is a waveform synthesizing technique. HACKER. A dying breed of people who don't mind using :;<> etc to play above the tenth fret.. #:> ## WIMPS means Windows Interface Mouse Pulldown-menuS ## GUI means Graphical User Interface. This is a WIMPS GUI user /;^) (note the permanent sly wink). ======================================================================