home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / misc / tapefit_1 / !TapeFit / !Help next >
Text File  |  1996-02-25  |  14KB  |  253 lines

  1.   
  2.    ********                                ********                     
  3.       **                                   **                           
  4.       **                                   **           **       **     
  5.       **                                   **           **       **     
  6.       **                                   **                    **     
  7.       **       *****   ** ***      ****    **         ****     ******   
  8.       **      **   **  ***  **    **  **   ******       **       **     
  9.       **           **  **    **  **    **  **           **       **     
  10.       **      *******  **    **  ********  **           **       **     
  11.       **     **    **  **    **  **        **           **       **     
  12.       **     **    **  **    **  **        **           **       **     
  13.       **     **    **  ***  **    **   **  **           **       **  ** 
  14.       **      ***** *  ** ***      *****   **        ********     ****  
  15.                        **            +---------------------------------+
  16.                        **            | Version 0.03/1.21 (24 Feb 1996) |
  17.                        **            | © Musus Umbra, 1996.            |
  18.                        **            +---------------------------------+
  19.                                                                       
  20.  
  21. What is it ?
  22. ~~~~~~~~~~~~
  23.     Tapefit is a simple(ish) utility that attempts to find the best possible
  24. arrangement of a given set of tracks on a cassette of a given length.  It
  25. will try to make both sides as full as possible, but leave the end of side 2
  26. blank if there are insufficient tracks to fill the whole tape.  If there are
  27. more tracks than will fit, the best fitting ones will be chosen.
  28.  
  29.  
  30. How to Use it
  31. ~~~~~~~~~~~~~
  32.     First of all, choose the tracks you want to put a tape together from.
  33. Create a text file (using !Edit, !StrongEd, !Zap, or whatever) that lists
  34. the tracks in the following fashion:
  35.     mm:ss <trackname>
  36.     ...
  37. Where mm:ss is the length of the track (minutes:seconds).  You can put any
  38. whitespace between the time and the track name except a newline.  So, for
  39. instance, tabs are fine, as are spaces.  Blank lines and lines that start
  40. with the character '#' are ignored.  See the supplied track file 'x' for
  41. an example. Now, double click on !TapeFit in a filer window to run TapeFit.
  42.  
  43.     When tapefit is loaded, clicking on its icon with Select will open a
  44. window.  This window allows you to control the input/output and the more
  45. advanced options of tapefit.  If you drag a textfile to this window, it
  46. will be selected as the 'input' for tapefit.  Drag your file of the tracks
  47. you want into this window - you'll see the icons change and the filename
  48. of your file appear in the 'Input' section of the window.
  49.  
  50.     You're ready to set the advanced options now, these are controlled by
  51. the section labelled 'Options'.  A detailed discussion of the options can
  52. be found below.  For the moment, just leave them as they are.
  53.  
  54.     TapeFit can either print its output on the screen (in a taskwindow), or
  55. save it to a file (so you can print it, etc).  If you want the output in a
  56. taskwindow, make sure than 'Screen' is selected in the 'Output' section.  If
  57. you want the output in a file, select 'File' and either enter a filename, or
  58. click on the 'pop up menu' button and drag the textfile icon to a filer
  59. window after altering the name in the 'Save As' box that appears.  If you
  60. select the 'Auto Run' option button, the file will be loaded into your text
  61. editor when it is complete.
  62.  
  63.     All that's left to do now is to tell TapeFit what size of tape you want
  64. the tracks fitting to.  Do this with the 'Tape' section.
  65.  
  66.     Okay, you've set the input and output, so now you can run TapeFit.  Click
  67. on the 'Go' button and TapeFit will spring into life.  If you set the output
  68. to be 'Screen', a taskwindow will appear and TapeFit will print the results
  69. in it (along with messages saying how far it's got with the fitting).  If you
  70. chose 'File', the hourglass will come on, and TapeFit will write its results
  71. to the file you specified.  When the hourglass turns off, your file is ready.
  72. If you chose 'Auto Run', the file will be loaded into your text editor).
  73.  
  74.  
  75. Advanced Options
  76. ~~~~~~~~~~~~~~~~
  77.  
  78. Tolerance
  79. ---------
  80.     When fitting tracks to a tape, TapeFit can allow some 'leeway' at the
  81. end of a side.  This allows tapefit to accept an 'acceptable' solution,
  82. rather than plodding on and on looking for a better one.  The 'leeway'
  83. is controlled by the 'Tolerance' option.  Tolerance is specified in seconds
  84. and is the largest gap you're prepared to accept at the end of a side.
  85. The default value is 30 seconds, but any (reasonable) value can be used.
  86. Even low values (5-10) are sufficient to allow TapeFit to find a solution
  87. faster than with no tolerance.
  88.  
  89. Intertrack Gaps
  90. ---------------
  91.     When you put together a tape, you'll probably want to leave a gap of,
  92. say, 3 or 4 seconds between the tracks.  TapeFit can take this extra gap
  93. into account when fitting the tracks to the tape.  The gap time is added
  94. to the playing time of all but the last track on a side for the purposes
  95. of finding a solution.  For all this option is theoretically very useful,
  96. often the playing time for a track on a CD (or whatever) includes a couple
  97. of seconds silence either at the start or the end (or both).  In effect,
  98. this is the intertrack gap.  TapeFit includes this option for completenes,
  99. and in case anybody wishes to have largish (>5secs) gaps.  The gaps are
  100. set up using the 'Leave nn s between' section of the 'Options' section.
  101. (See also the note on tape lengths).
  102.  
  103. Shuffling
  104. ---------
  105.     Often, when you list the tracks for a compilation, you'll end up with
  106. a lot of tracks by the same artist side by side in the track list.  Due to
  107. the way it works, TapeFit will tend to keep these tracks clustered together
  108. in the solution.  This probably isn't what you want.  Therefore, TapeFit
  109. can be made to shuffle the track list before finding a solution.  This has
  110. another distinct advantage - it allows tapefit to produce different results
  111. for the same input on different runs (this happens because the shuffling
  112. method is non-deterministic).  This means that you can re-run TapeFit if,
  113. for instance, you don't like the solution generated.  Conversely, if you're
  114. fitting a long album onto a tape, you'll probably want to turn shuffling
  115. off - this will make tapefit try to keep the tracks in order.
  116. A good value for the number of shuffles is > 10 * the number of tracks.
  117. Shuffling is quite fast, so it's okay to use a big (>1000) value.
  118.  
  119.  
  120. Performance Issues
  121. ~~~~~~~~~~~~~~~~~~
  122.     Performance will be poor if there are lots of short tracks.  The example
  123. file 'x2' is a case in point.  This is because TapeFit exhaustively tests
  124. every possible arrangement of tracks until it finds one that satisfies the
  125. tolerance specified (or runs out of variations).  With lots of short tracks,
  126. this means a *lot* of work before a good solution can be found.
  127.  
  128.     On machines with ARM250 or better processors, performance should be
  129. adequate.  Performance is acceptable on my ARM3 A3000, and should be good
  130. on a RiscPC.  "Cheap / Fast / Good.  Pick any two."
  131. I've done a few speed trials, and here are the results:
  132.  
  133.             Output to File           Output to Taskwindow
  134.           No Cache     Cache          No Cache     Cache
  135.     1:        2         <1                 8         3
  136.     2:        7         <2                15         4
  137.     3:       52         12                54        15
  138.     3:       75         17               117        20
  139.     5:       78         18               123        22
  140.  
  141. All times are in seconds. No shuffling or intertrack gaps were used.
  142. Test 1 was input 'x', tolerance 15
  143. Test 2 was input 'x', tolerance 0
  144. Test 3 was input 'x2', tolerance 60
  145. Test 4 was input 'x2', tolerance 15
  146. Test 5 was input 'x2', tolerance 5
  147.  
  148.     Note that shuffling can affect these times either way, for instance,
  149. Test 2 with shuffling (cache on) was about 3 times as fast, whereas Test 4
  150. with shuffling (cache on) was anywhere up to 8 times slower.
  151.  
  152.     In general, a high tolerance will speed up fitting of even the most
  153. awkward tracks.
  154.  
  155.  
  156. Notes
  157. ~~~~~
  158.     When typing input from the keyboard (I don't expect anyoen will ever use
  159. this, it's included for completeness and so I could test TapeFit easily), a
  160. '.' on a line by itself will terminate input.  The same is true of a file,
  161. so if you put a line with just the '.' at the start somewhere in your file,
  162. then TapeFit will ignore everything from there on.  This can be useful - you
  163. can make a file with many tracks in, your favourites at the top, and then
  164. move a '.' down the file until TapeFit gets a solution you like.
  165.  
  166.     Performance is best with many tracks of reasonable length.  Conversely,
  167. with lots of short tracks (see example file 'x2'), performance is poor.
  168. TapeFit is still usable for such sets of tracks, but be prepared to wait a
  169. minute or so.  In these cases, a tolerance of >10 seconds can really help
  170. the fitting process.
  171.  
  172.     Nothing says that you have to record the tracks in the order that TapeFit
  173. has generated them.  Since it's the total time of the tracks on a side that
  174. matters, feel free to jiggle them around within a side.
  175.  
  176.     Tape sizes can vary considerably between manufacturers.  For instance,
  177. some BASF C90s I was using recently weighed in at well over 48 minutes a
  178. side.  However, the Maxell C90s that I used next were only about 46 minutes
  179. a side.  In general, most tapes will be at least about a minute longer than
  180. the stated length.  You can set TapeFit to use these longer times by entering
  181. the 'true' tape size in the 'Tape' section (or click on one of the presets
  182. and then use the arrow icons).  It's a good idea to keep track of how long
  183. different makes & models of cassette are, so that you can use TapeFit to the
  184. best advantage.
  185.  
  186.     If you've taken a look at the example track file you'll have noticed that
  187. there's far more there than will fit on a C90.  In fact, there's enough
  188. tracks there to fill 3 C90s and still have half an hour of music left.  This
  189. is because I wanted to do a multi-tape compilation.  I simply ran TapeFit on
  190. the large file, cut the 'Tracks not Fitted' section out of the output file
  191. and ran TapeFit on this, ...  In this way, you can use multiple tapes.
  192.  
  193.     If you can, it's best to give tapefit more tracks than will fit on a tape
  194. as this allows greater flexibility when fitting to a cassette, and means
  195. that you're more likely to get a good result.
  196.  
  197.     It's probably best to try a fitting with the output set to 'Screen' at
  198. first, just to see how long TapeFit will take.  Fitting is usually fast,
  199. but for some input, make take some time.
  200.  
  201.     TapeFit is actually a command line program that is presented here with
  202. a Desktop front end.  All the front end does is to put together the command
  203. line necessary to run tapefit, and then either simply runs the main program,
  204. or starts a taskwindow to run the program in.  If you look inside the
  205. !TapeFit application (shift double click on it), you'll see the main
  206. program (tapefit), and a file 'CLusage' (and the source code in the
  207. directory 'c').  The file 'CLusage' gives information on how to use TapeFit
  208. from the command line, and notes on porting the program to other
  209. environments.
  210.  
  211.  
  212. Background
  213. ~~~~~~~~~~
  214.     TapeFit was written becuase I wanted to put together a set of tapes with
  215. some of my favourite music on.  Having done this in the past by 'trial and
  216. error' (frequently having to hunt around for a track less than some length
  217. in order to completely fill a side, having just had the track I wanted cut
  218. off at the end of the tape), I decided that it was time to get sophisticated
  219. about the whole thing.  Therefore, I knocked up a file of all the tracks
  220. I'd consider for my collection, and sat down to ponder the question of how
  221. to go about finding an optimal solution.  After a little playing, I came
  222. up with an algorithm that was guaranteed to generate the best possible
  223. arrangement of the tracks on a tape.  Great, I thought. Then I tried it
  224. with my file.  Oh oh.  I never found out whether it gave the perfect
  225. answer since it took so long I aborted it.  Looking closer, I noticed
  226. that my beautiful algorithm was O(3^N) [it took a time proportional to
  227. 3 to the power of the number of tracks].  Clearly this was no good.  So,
  228. I set about adding heuristics in the most used sections of code, and the
  229. result is the stupendously faster TapeFit that we have today.
  230.  
  231.     Next I wrote the front end (please forgive the code, it's a drastically
  232. cut down version of my generic (and naff) BASIC Wimp task).  Over the
  233. next few days, the front end had more bells and whistles added, and unless
  234. TapeFit sprouts new options, will probably stay as it is in future.
  235.  
  236.  
  237. Disclaimer & Licence
  238. ~~~~~~~~~~~~~~~~~~~~
  239. Use of this software is completely at your own risk. The author can accept no
  240. responsibility for any damage/loss arising from the use, or inability to use
  241. this software. No warranty, express or implied, applies to this software.
  242. This is not PD: the Copyright in this software belongs at all times to the
  243. author. However, permission is granted for unrestricted distribution
  244. prodividing that *no* charge is made for the distribution [a charge may be made
  245. for handling/media] and that the whole of the software is supplied intact and
  246. unaltered. Permission is also granted for unrestricted use and alteration of
  247. the software [but if you fix a bug / add anything nice, let me know so I can
  248. patch the 'master' version].
  249.  
  250. Bug reports / comments / etc to:
  251. Andy Holdsworth c/o 23 Baronsway, Whitkirk, Leeds, LS15 7AW, England.
  252. (until Sept-ish '96: A.J.Holdsworth@ncl.ac.uk)
  253.