home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0900 / CCE_0940.ZIP / CCE_0940.PD / WAXPLAY / WAX_D2D.DOC < prev    next >
Text File  |  1994-10-25  |  18KB  |  692 lines

  1.         Wax Direct To Disk Player
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8. This software was started in June/July 1993 just when I bought
  9. my Falcon 030.
  10.  
  11. I started it with Gen at the time, and continued it alone.
  12.  
  13. It was working perfectly all right as TOS, so when Gen & I did
  14. our Fabulous Macros Release 3
  15.  
  16.  
  17.  
  18. ...
  19.  
  20. (just like an object-oriented language but in assembler, we only
  21. code in assembler on the Falcon 030 because some other people
  22. force us to code in C/Shell/Fortran on other shitty machines
  23. (hey ! ya know the one starting with P and ending with C))
  24.  
  25. ...
  26.  
  27.  
  28.  
  29. I decided to convert it into GEM environment (with multi-tos
  30. possibilities) and finally I added lots a features (concerning
  31. compression/decompression) so it has become what it is !
  32.  
  33.  
  34.  
  35. This program is written in what I call "Good assembler" it means
  36. no supervisor rout, only Trap calls. The only possible
  37. incompatibility with the future Falcon 040 is the Timer-A
  38. interrupt routine which uses the hard addresses of the DMA sound
  39. port. (Start/End replay Address)
  40.  
  41. I did it because using the xbios trap in interruption did bring
  42. me some bombs sometimes, very strange by the way ...
  43.  
  44.  
  45.  
  46.     With this fabulous software, you can play any sample which is
  47. 16 bits (mono or stereo) at any conventional frequency. Even
  48. with external sync if you can connect one on your DSP port !
  49.  
  50.  
  51.  
  52.     You can improve your comfort of  listening in three ways :
  53.  
  54.         - first : getting the fabulous selectrix which permits you to
  55. play several samples or Play-List continuously.
  56.  
  57.         - second : making some .WAX files (an example is provided
  58. below) which should be put in the same directory as the track
  59. and which permit to define the frequency, header length, and
  60. format of your track (they will be loaded if they exist).
  61.  
  62.         - third : making some .LT files (an example is provided below)
  63. which permits you to prepare a list of the tracks that you want
  64. to hear (just like a disk-jockey) even if they are on different
  65. partitions.
  66.  
  67.  
  68.  
  69.  
  70.                     Enjoy the quality.
  71.  
  72.                     WAX, Jully 18th 1994.
  73.  
  74.  
  75.  
  76.     Explanations about the .WAX files :
  77.  
  78.         You can store some small files with your tracks (same
  79. directory) which give the infos about the file type. Useful if
  80. they were recorded with D2D Edit (header included) or Falc D2D
  81. (no frequency info).
  82.  
  83.         Those files will allow you to play multiple files (if you have
  84. selectrix) provided you put the good infos in them and that you
  85. turn off the 'Loop' option.
  86.  
  87.         Warning : they must not exceed 256 bytes : only the first 256
  88. bytes will be loaded. (they will not, unless you put some very
  89. big comments (like me))
  90.  
  91.  
  92.  
  93. Here is an implementation example :
  94.  
  95.     dir f:\tracks\
  96.  
  97.         SUSSUDIO.TRK    16458400 bytes.    (16 bit track)
  98.         SUSSUDIO.WAX    213 bytes.        (text file)
  99.  
  100.  
  101.  
  102.         The .Wax files have this kind of format (edit them with any text editor) :
  103.  
  104.  
  105.         ; put a dot : '.' after the end of each parameter.
  106. head=16.    ; can be anything if form=dvsw.
  107.         ; Put 16 for a 16-bit winrec DVSM unpacked file.
  108.         ; Put the good value for a D2D Edit file (I Don't know which one, I don't use it)
  109.  
  110.  
  111. freq=49.    ; can be 8,10,12,16,20,25,33,49.
  112.  
  113.  
  114.  
  115. form=16bs.    ; can be 16bs (16 bit stereo) or 16bm (16 bit mono)
  116.         ; or dvsw (dvswax)
  117.         ; or in future : dvsm (winrec table, not yet implemented)
  118.         ; automatic mono/stereo detect for dvsw.
  119.  
  120.  
  121.  
  122.  
  123.     Explanations about the .LT files :
  124.  
  125.         You can create some small files (List of Tracks) which, once
  126. loaded, allow you to play tracks which are on different
  127. partitions, in the order that you want. (not a type classified
  128. one like selectrix)
  129.  
  130.  
  131.  
  132. Here is an implementation example (don't put any tab or comment):
  133.  
  134.     cat f:\tracks\list.lt
  135.  
  136.         e:\wonder.trk
  137.         f:\samples\maximum.dvw
  138.  
  139.  
  140.  
  141.  
  142.  
  143.     About using the Wax Player as a program :
  144.     You shall declare it as an application for all .TRK, .DVW and
  145. .LT files.
  146.  
  147.  
  148.  
  149.     About using the Wax Player in accessory :
  150.  
  151.     You can rename the program WAX2PLAY.PRG to WAX2PLAY.ACC and
  152. listen to tracks while working under mono-task environment.
  153. Every ACC-CLOSE event will stop the music (so no bug when
  154. changing resolution). If  you want to stop the currently playing
  155. track, then call the accessory again and press 'Cancel' on
  156. file-selector.
  157.  
  158.     You can also send him orders using the GEM messages (message
  159. number is 224) and tell him : play=g:\samples\track.trk to play
  160. a file or stop to stop playing. How easy ...
  161.  
  162.     Some bombs appear when assembling under Devpac while playing a
  163. track, I still wonder why (I mean : is it my fault ?)
  164.  
  165.  
  166.  
  167.  
  168.     Explanations about the menus :
  169.  
  170.  
  171.     Files :
  172.  
  173.  
  174.         Load :
  175.  
  176.         choose your track(s) to be played. If you have selectrix then
  177. you can play several tracks continuously. Don't forget to
  178. disable the Loop option in this case.
  179.  
  180.         If your track does not play then it means that another program
  181. uses the Sound Semaphore, so stop it before !
  182.  
  183.         If you had selected several tracks and you had stopped one,
  184. you will not have the file selector(except if it was the last
  185. one) and the next file will be played.
  186.  
  187.  
  188.  
  189.         Get info on file :
  190.  
  191.         Allows you to have information (pack method, frequency, time
  192. of replay) on a .DVW file or, if a .LT file is selected, the
  193. time of replay for all files (*.DVW) will be displayed.
  194.  
  195.  
  196.  
  197.         Loop :
  198.  
  199.         replays when you reach the end of the track. If a list of
  200. tracks is selected : uncheck it !
  201.  
  202.  
  203.  
  204.         Stop :
  205.  
  206.         lets you stop the replay without exiting and liberates the
  207. sound Semaphore.
  208.  
  209.  
  210.  
  211.  
  212.  
  213.     Frequency :
  214.  
  215.  
  216.  
  217.         You can choose your frequency 8 ... 49.
  218.  
  219.         It will be set immediately if a sample is playing, or only at
  220. loading initialization if none is played.
  221.  
  222.         External or Internal will allow you to choose the
  223. synchronization mode.
  224.  
  225.  
  226.  
  227.  
  228.  
  229.     Method :
  230.  
  231.  
  232.  
  233.         Method 1 : natural 16 bit stereo sound (natural for a Falcon
  234. of course)
  235.  
  236.  
  237.  
  238.         Methods 2 to 5 : strange methods to double (*2) (understand
  239. guess values that does not exist) or even (*4) with linear,
  240. second degree or Newton methods, not interesting for the result
  241. itself (especially if you forget to double the frequency replay)
  242. but for mathematical and sound studies (frequency and spectral
  243. studies.)
  244.  
  245.  
  246.  
  247.         Method 6 : allows you to play a mono sample (left=right) very
  248. interesting compared to stereo 16 bit : 50 % of room for no
  249. difference on tracks which do not use fabulous stereo effects.
  250.  
  251.  
  252.  
  253.         Method 7 to 8 : same principle as methods 2 to 5 but in mono.
  254.  
  255.  
  256.  
  257.         Method 9 : the most interesting, allows you to replay a track
  258. which has been compressed with the DVSW (understand dvs wax)
  259. packer (50 % for same quality in 16 bits)
  260.  
  261.  
  262.  
  263.  
  264.     Conversion :
  265.  
  266.  
  267.         Left/Right => Left + Right :
  268.  
  269.         You take a stereo file and you create two mono files
  270. containing the left and right sounds (useful to convert in mono
  271. a file which has a much better channel than the other)
  272.  
  273.  
  274.  
  275.  
  276.  
  277.         Left/Right => Mono :
  278.  
  279.         Converts your track in mono (50% room) just doing (Channel L+ Channel R)/2.
  280.  
  281.  
  282.  
  283.  
  284.         Mono => Left/Right :
  285.  
  286.         Just the opposite : puts the a mono channel on left & right
  287. (you lose 100 % of room). This can be useful if your favorite
  288. sample editor processes only stereo sounds. (Winrec for instance)
  289.  
  290.  
  291.  
  292.  
  293.  
  294.         DVSM => Track :
  295.  
  296.         Just to be compatible and let you depack your samples made
  297. under Winrec and possibly re-pack them with the Wax player which
  298. is more practical for multiple sample & multiple format replay.
  299. You will not gain any quality if you repack it under Wax-D2D
  300. because your sounds values, once unpacked, will be discreet (use
  301. DVSM.TAB or better : DVSW1.TAB to pack again)
  302.  
  303.  
  304.  
  305.  
  306.  
  307.         Choose compression table :
  308.  
  309.         You will load the table that will be used for compression (see
  310. next menus) your table must have $8000 as first value(0) , $0000
  311. for value 128 and $7FFF for value 255. Its length must be of
  312. 256*2 bytes.
  313.  
  314.  
  315.  
  316.         Some pre-calculated tables are given :
  317.  
  318.         - DVSM.TAB : the table used by Winrec.
  319.  
  320.         - DVSW1.TAB : same as DVSM but with never twice the same value
  321. (it's no use having the same value twice, unless it's quicker to
  322. pack/unpack (it's the case for Winrec))
  323.  
  324.         - DVSW2.TAB : a table calculated to keep a theoretical
  325. constant distortion rate (see menu below called Calculate
  326. distortion) of 4.5%
  327.  
  328.         - DVSW3.TAB : a table calculated for a 3.6 % but strangely
  329. depending on the tracks does sometimes better, and sometimes
  330. worse than the previous one.
  331.  
  332.         - in fact DVSW2 = DVSW3 please, do analyze sample before.
  333.  
  334.  
  335.  
  336.  
  337.  
  338.         Stereo track => Dvsw :
  339.         Mono track => Dvsw :
  340.         Dvsw => original Track :
  341.         You can now pack/depack your favorite tracks using the Wax
  342. packer.
  343.  
  344.         The table is saved in the compressed file and used for replay,
  345. assuming full compatibility if you were to create your custom
  346. compression table (optimizing your own criteria).
  347.  
  348.  
  349.  
  350.         For your information :
  351.  
  352.         It will take you an average 4.5 secs to get 128*1024 bytes
  353. compressed.
  354.  
  355.  
  356.  
  357.  
  358.  
  359.         The file format is the following :
  360.  
  361.  
  362.  
  363.             1*1.L='DVSW' : header
  364.  
  365.  
  366.             1*1.B=1 : packed.
  367.             (always =1 : packed, otherwise I leaves the track with no header)
  368.             1*1.B=8 : packed in 8-bit table format (future 7, 6 ? bit pack).
  369.             1*1.B : 0=stereo, 1=mono.
  370.             1*1.B : frequency, 0=don't know, 1=49 KHz ... 11=8 KHz.
  371.             (the values are the same as Hardware Inits, look at your Compendium)
  372.             16-8=8*1.B=0 : for future extensions.
  373.             Total : 16*1.B : file infos.
  374.  
  375.             256*1.W : the table used for packing.
  376.  
  377.             2*1.W if stereo, 1*1.W otherwise. (starting channel(s) value(s))
  378.  
  379.             This was for inits, then follows :
  380.  
  381.             x*2.B : if stereo, or x*1.B : if mono.
  382.             the 8 bits values corresponding to the reference in the table.
  383.             .... until the end of the file.
  384.  
  385.  
  386.  
  387.  
  388.  
  389.         Some example of a stereo replay routine :
  390.  
  391.  
  392.  
  393.             ; d6=left channel.    (you must initialize them)
  394.             ; d7=right channel.    (by loading the first values)
  395.  
  396.  
  397.             lea start_of_8bits_values,a0
  398.             lea unpack,a1    ; buffer for DMA replay
  399.             lea table+128*2,a6
  400.  
  401.         cool:    move.b (a0)+,d1    ; depack is easy and in cache !!
  402.             ext.w d1
  403.             add.w (a6,d1*2),d6    ; d6 is ready
  404.             move.w d6,(a1)+
  405.             move.b (a0)+,d1    ; remove these 4 lines for mono replay.
  406.             ext.w d1
  407.             add.w (a6,d1*2),d7    ; d7 too , they can be stored or else ...
  408.             move.w d7,(a1)+
  409.             dbf d0,cool
  410.  
  411.  
  412.  
  413.  
  414.  
  415.     Special : (available only for 6888x owners)
  416.  
  417.  
  418.  
  419.         Analyze stereo track :
  420.  
  421.         Lets you have an idea about the deltas (average, variance max
  422. and min) which is very useful when you want to create your own
  423. compression table which will be optimum for your own specific
  424. sample.
  425.  
  426.  
  427.  
  428.         Calculate distortion :
  429.  
  430.         Just imagine that you have an original track (.TRK) (recorded
  431. with Falc_D2D) that you compress it with different methods DVSM,
  432. DVSW1(table 1) & DVSW2(table 2) and that you decompress them to
  433. compare them with the original to calculate the difference
  434. (because of course your ears can't hear anything). It is what
  435. this program will do. You must create some .WAX files if you've
  436. got some original DVSM files to set the header to 16 (otherwise
  437. you'll get some amazing results)
  438.  
  439.         The calculation is very simple :
  440.  
  441.     you read a 16 bits value in the first sample : V1, you read
  442. another in the second file : V2, you calculate (V1-V2)/V1 you do
  443. it many times (128*1024/2) and you print the average result
  444. multiplied by 1000.
  445.  
  446.  
  447.  
  448.     You'll get what I call a "Distortion Rate".
  449.  
  450.  
  451.  
  452.     Just for your general knowledge (and for my pride) :
  453.  
  454.         DVSM : 8-9 %
  455.         DVSW (optimum) : 3-4 %
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463. That is all for the use of the Wax Direct to Disk Player.
  464.                                 Have Fun.
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.     Additional information :
  473.  
  474.  
  475.  
  476. How to create a constant distortion rate compression table :
  477.  
  478.  
  479.     Just imagine you have a value V (a delta of course) to
  480. compress, you search in your compression table and you find that
  481. the inferior value for your delta is Vi and that the superior
  482. value is Vs. The biggest error in percentage would be if you had
  483. to encode (Vi+Vs)/2. Let's assume that it's the case. Then you
  484. set your relative-error (distortion rate) to T.
  485.  
  486.  
  487.  
  488.     You'll get the following two equations :
  489.  
  490.             T=(Vs-V)/V
  491.             T=(V-Vi)/V
  492.  
  493.     Eliminating V, you get the following :
  494. Vs=Vi*(1+T)/(1-T)=Vi*alpha
  495.  
  496.  
  497.  
  498.     If you start at the 1 value then the second is given by the
  499. formula: 1*alpha then 1*alpha^2...
  500.  
  501.  
  502.  
  503.     If you assume that the maximum delta that can appear is 32767
  504. (which is very close to reality), then you have a relation
  505. between the number of bits for your table (8 bits <=> 256
  506. values) and the distortion rate. You can even think about a 7
  507. bit pack/unpack. (68030 or DSP only, if you have real time willings)
  508.  
  509.  
  510.         32767=1*((1+T)/(1-T))^(2^(n-1)-1)=alpha^127 for n=8.
  511.  
  512.  
  513.  
  514. 8 bit table gives 4.12 % distortion
  515. 7bit : 8.36 %
  516. 6 bit : 17.15 %
  517. 5 bit : 35 %
  518. 4 bit : 70 %.
  519.  
  520.  
  521.  
  522.  
  523.     Creating your table this way (floating calculus), you will see
  524. that some consecutive values are the same (at the beginning in
  525. fact), you can do a test and so optimize again your table this
  526. way :
  527.  
  528.         value=1
  529.         repeat 2^(n-1)-1 times
  530.         store value;
  531.         next=int(value*alpha)
  532.         if next=value then next=value+1
  533.         value=next
  534.         loop
  535.  
  536.  
  537.  
  538.     There are two ways :
  539.  
  540.     - First : you calculate your tables making T smaller and
  541. smaller each time, until you reach 32767 for last value. Then
  542. you calculate your final table with the T that you found.
  543.  
  544.     - Second : you don't touch T and then you'll get a greater
  545. dynamic (your maximum delta will not be 32767 but bigger) but
  546. it's less interesting and the Wax Player won't accept your table
  547. because the last value is not 32767.
  548.  
  549.  
  550.  
  551.     Your final table must be symmetrical in the way that 0 is in
  552. the middle of the table (128th value), $7FFF is the last one
  553. (255th) and -32768 the first value(offset 0), all your values
  554. must be classified in the growing order and though two
  555. consecutive values should not be equal, you can do it anyway.
  556.  
  557.     You can do like me : you calculate the positive values
  558. (algorithm is given) you then inverse (-) them for the negative
  559. range, the final result should look like this :
  560.  
  561.  
  562.     -32768 -32767 ........... -4 -3 -2 -1 0 1 2 3 4 ...... 32767   : values
  563.        0      1                          128                255    : index
  564.  
  565.  
  566.  
  567.  
  568.         Another approach : statistical compression table :
  569.  
  570.  
  571.  
  572.     You can build your compression table in a second way. You scan
  573. your sample and store the deltas, then you calculate the average
  574. delta, and the variance. (this corresponds to the menu : Analyze
  575. stereo track)
  576.  
  577.  
  578.  
  579.     And then, assuming it's a Gaussian repartition you make your
  580. values so that they are centered exponentially around the
  581. average delta. Taking average +/- variance should bring you 66 %
  582. of values, +/- 2*variance : 95 % , etc ...
  583.  
  584.      I have tried, and it seems that the repartition is not quite
  585. Gaussian.
  586.  
  587.     You must not forget the values -1, 0 and 1 in your table,
  588. otherwise it may happen that a follow-trajectory and a static
  589. error appears.
  590.  
  591.  
  592.  
  593.  
  594.  
  595.     Another way, that would lead to another format (why not?) would
  596. be to analyze, let's say 128K of sample and to build a specific
  597. table well adapted to it, and then to analyze another 128K and
  598. to build a second table ... and so on (very little room lost
  599. because 512 << 128*1024).
  600.  
  601.     Even better, you could think about having deferent
  602. bit-pack-codes in the same file (8 bit pack ... then 7 bit then
  603. 9 bit ... etc ... with headers giving you the pack size.
  604.  
  605.  
  606.  
  607.         Always remember those basic rules to record a sound
  608. (whichever) :
  609.  
  610.  
  611.     When you are talking about recording sounds, there are four
  612. parameters that must be taken into account :
  613.  
  614.     - the sampling frequency.
  615.     - the time of recording.
  616.     - the signal/noise rate.
  617.     - the maximum signal amplitude.
  618.  
  619.  
  620.  
  621.     Sampling frequency :
  622.  
  623.         you should theoretically take at least twice the maximum
  624. harmonic frequency of your signal. In fact an average 10 times
  625. is more realistic for your ears. For simple human voice on the
  626. contrary, 8 KHz is far enough (humans hardly go over 1 KHz).
  627. Please notice (and try it if you don't believe me) that your
  628. ears don't make the difference between 33 KHz and 49 KHz for
  629. 99,9 % of tracks, whereas it is nearly twice the room in terms
  630. of bytes.. Think about it ...
  631.  
  632.  
  633.  
  634.     Time of recording :
  635.  
  636.         depending only on you and on your hard disk ! Just know that
  637. the room taken will be : freq*2*2 bytes*seconds_of_record for 16
  638. bit stereo tracks.
  639.  
  640.  
  641.  
  642.     The signal/noise rate :
  643.  
  644.          Not depending on you, it comes directly from the source of
  645. the sound. If it is a DDD laser disk : 96 DB, if it is a ADD or
  646. AAD then 70 DB, finally if the source is a cassette then it goes
  647. from 48 DB (Dolby A) to 68 DB (Dolby C).
  648.  
  649.         Know for yourself that a sound recorded in 8 bit has a
  650. signal/noise rate of 20*log(2^8)=48 DB and in 16 bit mode : 96
  651. DB.
  652.  
  653.     Direct deduction : IT IS TOTALLY USELESS (ROOM WASTING) TO
  654. RECORD IN 16-BIT MODE A SOUND COMING FROM A DOLBY-A CASSETTE.
  655.  
  656.  
  657.  
  658.     The maximum signal amplitude :
  659.  
  660.         Depending on you totally, so you have to put you Falcon's
  661. input gain at its maximum and then to regulate your source
  662. output level so that your sound reaches just the limits of
  663. saturation. The principle is to use your falcon input
  664. attenuation at its minimum level so that your source amplifies
  665. the least, because additional source distortion is directly
  666. depending on the output level. (Whatever the analogic source)
  667.  
  668.         Beware of one single thing : it may sometimes be more
  669. intelligent to have some seconds of saturation in a 3 minute
  670. long track but an improved global signal/noise, than to have no
  671. saturation at all but a low average sound level. Don't forget
  672. that you sometimes don't hear any saturation at all even if
  673. there is one, and that anyway, the Wax D2D Player has no bug
  674. when packing those sorts of tracks.
  675.  
  676.  
  677.  
  678.  
  679.  
  680.     Global conclusion :
  681.  
  682.  
  683.     The Wax compression is better (no cheat) it has the advantage
  684. of having no problem with saturation (not like Winrec, hum) but
  685. it cannot be done in real time because lots a comparisons in .L
  686. are needed. On the other hand, once packed it is strictly the
  687. same principle and decompression algorithm (in assembler though)
  688. as Winrec (I copied his very clever idea). Real time compression
  689. could be done with 68040 or DSP but it does not interest me for
  690. the time being. Finally, as my files are not made of blocks, no
  691. easy copy/paste or seek can be done, but so easy to program !
  692. ə