home *** CD-ROM | disk | FTP | other *** search
/ The AGA Experience 2 / agavol2.iso / software / utilities / disk_tools / playcdda1.1 / arexx / playcdda_yacdp.dopus5 next >
Text File  |  1995-08-10  |  12KB  |  401 lines

  1. /* Programm: PlayCDDA_YACDP.dopus5 [15-August-1995]
  2. ** $VER: PlayCDDA_YACDP.dopus5 V1.1 (15-Aug-1995)
  3. ** 
  4. ** Needed: Directory Opus V5.11 (© by Jonathan Potter & GPSoftware)
  5. **         YACDP V1.3 (© 1994 by Frank Würkner)
  6. **
  7. **           SCSI-CDROM required !
  8. **           only for AIFF :
  9. **           CDDA V1.12 (Author: mlelstvspecklec.mpifr-bonn.mpg.de)
  10. **           only for ADPCM3:
  11. **           CDRipper (Author: flowerpeikon.e-technik.tu-muenchen.de)
  12. **
  13. ** Copyright © 1995 Eckhard Ludwig (EMail: Eckhard@top.east.de)
  14. ** PlayCDDA_YACDP.dopus5 is freeware. It may be distributed freely.
  15. **
  16. ** Play Audio-CD from DOPUS5, Test Play Audio-CD, Save Tracks to
  17. ** CDR, IFF 8SVX, AIFF & ADPCM3. Locale German & english.
  18. **
  19. ** Create new button (Audio-CD), Call as:
  20. ** ----------------------------------------------------------------------
  21. ** ARexx    DOpus5:ARexx/PlayCDDA_YACDP.dopus5 {Qp}
  22. ** ----------------------------------------------------------------------
  23. ** Set all attribut off.
  24. */
  25.  
  26. /*--------S E T T I N G S : --------------------------------------------*/
  27.  
  28. /* Path to YACDP V1.3 (© 1995 by Frank Würkner)
  29.    (Run needed L:WBStart-Handler & C:WBStarter!) */
  30. CDPlay = "WORK:YACDP/YACDP" /* Please edit your path ! */
  31.  
  32. /* Path to CDDA V1.12 */
  33. CDSave = "C:CDDA" /* only for save AIFF */
  34. /* Path to CDRipper  */
  35. CDRip = "C:CDRipper" /* only for save ADPCM3 */
  36.  
  37. /*-Volume Settings------------------------------------------------------*/
  38.  
  39. CDROMVOLUME=255 /* 0 to 255 (For Play via CDROM)       */
  40. AMIGAVOLUME=65  /* 0 to 65  (For Play via Amigaaudio)  */
  41. PLAYVIASCSI=0   /* 0=off (Play via CDROM) 1=on (Play via SCSI/Amigaaudio)*/
  42.  
  43. /*--end of settings------------------------------------------------------*/
  44.  
  45.  
  46. if ~show('l','rexxsupport.library') then
  47.     call addlib('rexxsupport.library',0,-30,0)
  48. if ~openport('cdda-handler') then exit
  49.  
  50.  
  51. parse arg portname
  52. if portname='' then portname='DOPUS.1'
  53. address value portname
  54.  
  55. signal on syntax
  56. options results
  57. options failat 20
  58.  
  59. if ~show('P','YACDP') then do
  60.    if ~exists(CDPlay) then do
  61.       dopus front
  62.       dopus request '"Error !  YACDP not found: (Path: 'CDPlay' ?)  Run YACDP V1.3 first." Exit'
  63.       Exit
  64.       end
  65.    if ~exists("C:WBStarter") then do
  66.       dopus front
  67.       dopus request '"Error !  C:WBStarter not found.  Run YACDP V1.3 first." Exit'
  68.       Exit
  69.       end
  70.    address command "WBStarter "||CDPlay
  71.    address command 'waitforport YACDP'
  72. end
  73.     
  74. address value portname
  75. lister new
  76. handle=result
  77.  
  78. do forever   /* Schleife bei CD-Wechsel */
  79. address 'YACDP'   
  80. 'HIDE'
  81. 'GETVAR LANGUAGE'
  82. 'GETVAR STATUS'
  83. if (STATUS < 3) then call Meldung1
  84. 'STOP'
  85. 'GETVAR CDNAME'
  86. 'GETVAR BY'
  87. 'GETVAR MAXTRACK'
  88. if CDNAME="-" then do
  89. select
  90.   when LANGUAGE='German' then
  91.   CDNAME="Audio-CD nicht katalogisiert"
  92.   otherwise
  93.   CDNAME="CDDA title  no entry"
  94.   end
  95. end
  96.  
  97. address value portname
  98. lister set handle title CDNAME||"    "||BY
  99. lister set handle sort name
  100. lister set handle busy on
  101. lister set handle progress MAXTRACK 'Scan CDDA ...'
  102. lister refresh handle full  
  103.  
  104. do i=1 to MAXTRACK
  105.    lister query handle abort
  106.    if result then leave
  107.    lister set handle progress count i
  108.    lister set handle progress name "Track "||i
  109.    address 'YACDP'
  110.    'GETVAR SONGNAME NUM='i
  111.    'GETVAR TRACKLEN NUM='i' T2 MODE=1' 
  112.    'GETVAR TRACKLEN NUM='i
  113.    'GETVAR TRACKSTART NUM='i
  114.    SONGNAME=TRANSLATE(SONGNAME,"'",'22'x) /* STRIP "  */
  115.    j=right(i,2)
  116.    if SONGNAME="-" then SONGNAME="Track "||j||"  "
  117.    Startblock=right(TRACKSTART,6)
  118.    Endblock=right(TRACKSTART+TRACKLEN-1,6)
  119.    address value portname   
  120.    lister add handle '"'j''" "''SONGNAME'" "'TRACKLEN*2352'" -1 0 r 'T2||" Startblock="Startblock||" Endblock="Endblock''
  121.    lister set handle display name size comment
  122.    lister refresh handle full
  123. end
  124. lister set handle busy off
  125.  
  126. lister set handle handler 'cdda-handler' 'quotes'
  127. /* install traps */
  128. dopus addtrap copy 'cdda-handler'
  129. dopus addtrap move 'cdda-handler'
  130. dopus addtrap copyas 'cdda-handler'
  131. dopus addtrap moveas 'cdda-handler'
  132. dopus addtrap delete 'cdda-handler'
  133. dopus addtrap rename 'cdda-handler'
  134. dopus addtrap devicelist 'cdda-handler'
  135. dopus addtrap parent 'cdda-handler'
  136. dopus addtrap show 'cdda-handler'
  137. dopus addtrap play 'cdda-handler'
  138. dopus addtrap protect 'cdda-handler'
  139. dopus addtrap datestamp 'cdda-handler'
  140. dopus addtrap comment 'cdda-handler'
  141. dopus addtrap makedir 'cdda-handler'
  142.  
  143. do forever
  144.   if waitpkt('cdda-handler') then do
  145.    packet=getpkt('cdda-handler')
  146.    if packet='00000000'x then iterate
  147.    event=getarg(packet,0)
  148.    handle=getarg(packet,1)
  149.    titel=getarg(packet,2)
  150.    user=getarg(packet,3)
  151.    pathstr=getarg(packet,4)
  152.    if event="Parent" then leave
  153.    if event="parent" then leave
  154.    if event="inactive" then call Ende
  155.    address 'YACDP'
  156.    'GETVAR STATUS'
  157.    if (STATUS < 3) then leave
  158.     select
  159.       when event="doubleclick" then call Player
  160.       when event="Play" then call SelPlay
  161.       when event="path" then call SelPlay
  162.       when event="Show" then call CDTest
  163.       when event="Copy" then call SaveCD
  164.       when event="Move" then call SaveCD
  165.       when event="CopyAs" then call SaveCDAs
  166.       when event="MoveAs" then call SaveCDAs
  167.       when event="MakeDir" then iterate
  168.       when event="dropfrom" then call SaveCD
  169.       when event="drop" then iterate
  170.       otherwise call Productinfo
  171.     end
  172.    reply(packet,10)
  173.   end
  174. end
  175. address value portname
  176. lister clear handle
  177. lister refresh handle full
  178. end      /* Ende Schleife bei CD-Wechsel */
  179.  
  180. /*---------------------------------------------------------------------------------*/
  181. SelPlay:
  182. address value portname
  183. lister set handle busy on
  184. lister query handle selfiles stem files.
  185. lister set handle progress files.count 'Play Audio-CD ...'
  186. lister refresh handle full  
  187.  
  188. do i=0 to files.count-1
  189.    lister query handle abort
  190.    if result then leave
  191.    lister set handle progress count i+1
  192.    lister set handle progress name files.i
  193.    titel=files.i
  194.    call Player
  195.    address 'YACDP'
  196.    'WAIT ' TRACKSTART+TRACKLEN 'FLAGS='2+128+8192+16384
  197.    'STOP'
  198.    address value portname
  199.    lister select handle '"'files.i'"' 0
  200.    lister refresh handle full
  201. end
  202.  
  203. lister set handle busy off
  204. return
  205.  
  206. /*---------------------------------------------------------------------------------*/
  207. Player:
  208. address 'YACDP'
  209. 'STOP'
  210. 'PUTVAR CDROMVOL VALUE='CDROMVOLUME
  211. 'PUTVAR AMIVOL VALUE='AMIGAVOLUME
  212. 'PUTVAR CDROMBAL VALUE='0
  213. 'PUTVAR AMIBAL VALUE='0
  214. 'PUTVAR VIASCSI VALUE='PLAYVIASCSI
  215. 'PUTVAR LOWPASSFILTER VALUE='0
  216. 'GETVAR TRACKSTART NUM='left(titel,2)
  217. 'GETVAR TRACKLEN NUM='left(titel,2)
  218. 'PLAYBLOCK ' TRACKSTART
  219. return
  220.  
  221. /*---------------------------------------------------------------------------------*/
  222. CDTest:
  223. address 'YACDP'
  224. 'STOP'
  225. select
  226.   when LANGUAGE='German' then
  227.   'REQUESTER DUMMY "Test-Play Audio-CD" "Die Titel anspielen für wie lang ?" "15s|30s|15s ab 0:30|Abbruch"'
  228.   otherwise
  229.   'REQUESTER DUMMY "Test-Play Audio CD" "Play song for time ?" "15s|30s|15s from 0:30|Exit"'
  230. end
  231. if DUMMY=0 then return
  232. if DUMMY=2 then sec=30
  233.    else sec=15
  234. address value portname
  235. lister set handle busy on
  236. lister query handle selfiles stem files.
  237. lister set handle progress files.count 'Test-Play Audio-CD ...'
  238. lister refresh handle full  
  239.  
  240. do i=0 to files.count-1
  241.    lister query handle abort
  242.    if result then leave
  243.    lister set handle progress count i+1
  244.    lister set handle progress name files.i
  245.    titel=files.i
  246.    call Player
  247.    address 'YACDP'
  248.    if DUMMY=3 then do
  249.       'STOP'
  250.       'PLAYBLOCK ' TRACKSTART+75*30
  251.       'WAIT ' TRACKSTART+75*45 'FLAGS='2+128+8192+16384
  252.       end
  253.       else 'WAIT ' TRACKSTART+75*sec 'FLAGS='2+128+8192+16384
  254.    'STOP'
  255.    address value portname
  256.    lister select handle '"'files.i'"' 0
  257.    lister refresh handle full
  258. end
  259.  
  260. lister set handle busy off
  261. return
  262. /*---------------------------------------------------------------------------------*/
  263. SaveCDAs:
  264. SaveCD:
  265. address 'YACDP'
  266. 'STOP'
  267. 'GETVAR DEVICE'
  268. 'GETVAR UNIT'
  269. select
  270.   when LANGUAGE='German' then
  271.   'REQUESTER DUMMY "Speichere Audiodaten ..." "Bitte Format wählen ?" "CDR|8SVX|MONO|AIFF|ADPCM3|Abbruch"'
  272.   otherwise
  273.   'REQUESTER DUMMY "Save Audio Data ..." "Please select format ?" "CDR|8SVX|MONO|AIFF|ADPCM3|Exit"'
  274. end
  275. if DUMMY=0 then return
  276. if DUMMY=1 then FT=".cdr"
  277. if DUMMY=2 then FT=".8svx"
  278. if DUMMY=3 then FT=".mono"
  279. if DUMMY=5 then do
  280.     if ~exists(CDRip) then do
  281.        'REQUESTER DUMMY "Error" "'CDRip' not found !" "Exit"'
  282.        return
  283.            end
  284.     else FT=".adpcm3"
  285. end
  286. if DUMMY=4 then do
  287.     if ~exists(CDSave) then do
  288.        'REQUESTER DUMMY "Error" "'CDSave' not found !" "Exit"'
  289.        return
  290.            end
  291.     else do
  292.       FT=".aiff"
  293.       call open('file','ENV:CDDA_DEVICE',W)
  294.       call writech('file',DEVICE)
  295.       call close ('file')
  296.       call open('file','ENV:CDDA_UNIT',W)
  297.       call writech('file',UNIT)
  298.       call close ('file')
  299.     end
  300. end
  301. address value portname
  302. lister set handle busy on
  303. lister set user busy on
  304. if event='dropfrom' then do
  305.    files.count=1
  306.    LNG=POS('22'x,titel,2)-1
  307.    titel=left(titel,LNG)
  308.    files.0=right(titel,LNG-1)
  309.    end
  310.    else lister query handle selfiles stem files.
  311. lister set handle progress files.count 'Save Audio-CD ...'
  312. lister refresh handle full  
  313. lister query user path
  314. Zielpfad=result
  315. do i=0 to files.count-1
  316.    lister query handle abort
  317.    if result then leave
  318.    titel=strip(left(substr(files.i,4),24))
  319.    lister set handle progress count i+1
  320.    lister set handle progress name titel||FT
  321.    address 'YACDP'
  322.    'GETVAR TRACKSTART NUM='left(files.i,2)
  323.    'GETVAR TRACKLEN NUM='left(files.i,2)
  324.    if DUMMY=5 then address command CDRip||" "||left(files.i,2)||" to "||'"'Zielpfad||titel||FT'"'||" bits=3 Device="||DEVICE||" Unit="||Unit
  325.    if DUMMY=4 then address command CDSave||" START="||TRACKSTART||" LENGTH="||TRACKLEN||" FILE="'"'||Zielpfad||titel||FT'"'||" MUTE BUFS=64"
  326.       else "SAVEAUDIO FILENAME="'"'Zielpfad||titel||FT'"' "STARTBLOCK="TRACKSTART "ENDBLOCK="TRACKSTART+TRACKLEN "COMP="DUMMY "TYPE="DUMMY
  327.    address command "FILENOTE "||'"'Zielpfad||titel||FT'"'||" "||'"'CDNAME||"    "||BY'"'
  328.    address value portname
  329.    lister select handle '"'files.i'"' off
  330.    lister refresh handle full
  331. end
  332.  
  333. lister set handle busy off
  334. lister set user busy off
  335. lister read user Zielpfad force
  336. lister refresh user full
  337. return
  338.  
  339. /*---------------------------------------------------------------------------------*/
  340. Productinfo:
  341. address 'YACDP'
  342. select
  343.  when LANGUAGE='German' then
  344.  'REQUESTER DUMMY " Über" "PlayCDDA_YACDP.dopus5 V1.1*nCopyright ©1995 Eckhard Ludwig*nFrei verteilbare copyrighted Software" "Ende|Über CDROM|Hilfe|OK"'
  345.  otherwise
  346.  'REQUESTER DUMMY " About" "PlayCDDA_YACDP.dopus5 V1.1*nCopyright ©1995 Eckhard Ludwig*nfreely distributed copyrighted software." "Quit|About CDROM|Help|OK"'
  347. end
  348. if DUMMY=0 then return
  349. if DUMMY=1 then call Ende
  350. if DUMMY=2 then do
  351.   'GETVAR DEVICE'
  352.   'GETVAR UNIT'
  353.   'GETVAR BOARD'
  354.   'GETVAR PRODUCT'
  355.   'GETVAR REVISION'
  356.   'GETVAR VENDORID'
  357.   'REQUESTER DUMMY "Device='DEVICE' Board='BOARD' Unit='UNIT'" "'VENDORID' 'PRODUCT'  Rev.'REVISION'" "OK"'
  358.   return
  359.   end
  360. select
  361.  when LANGUAGE='German' then
  362.  'REQUESTER DUMMY " PlayCDDA_YACDP.dopus5 Hilfe" "Parent: CD neu scannen*nDoppelklick: Spielen ab geklickten Titel*nAbspielen: Spiele alle selektierten Titel*nAnzeigen: Spiele alle selektierten Titel kurz an*nKopieren: Selektierte Titel speichern" "OK"'
  363.  otherwise
  364.  'REQUESTER DUMMY " PlayCDDA_YACDP.dopus5 Help" "parent: CD new scan*ndoubleklick: Play song*nPlay: Play all select song*nShow: Test play all select song*nCopy: Save select song in any format" "OK"'
  365. end
  366. return
  367. /*---------------------------------------------------------------------------------*/
  368. Meldung1:
  369. do forever
  370.   if (STATUS = 0) then leave
  371.   select
  372.     when LANGUAGE='German' then
  373.     'REQUESTER DUMMY "PlayCDDA_YACDP  Fehler:" "Bitte eine Audio-CD einlegen !" "Ende|OK"'
  374.     otherwise
  375.     'REQUESTER DUMMY "PlayCDDA_YACDP  ERROR:" "Please insert an audio CD !" "Quit|OK"'
  376.   end
  377.   if DUMMY=1 then leave
  378.   'WAIT 0 321'
  379.   address value portname
  380.   lister query handle busy
  381.   if RC>0 then leave
  382.   address 'YACDP'
  383.   'GETVAR STATUS'
  384.   if STATUS>2 then return
  385. end
  386. /*---------------------------------------------------------------------------------*/
  387. Ende:
  388. address value portname
  389. lister close handle
  390. dopus remtrap '*' 'cdda-handler'
  391. call closeport('cdda-handler')
  392. address 'YACDP'
  393. 'GETVAR STATUS'
  394. if (STATUS>2) then EJECT
  395. QUIT
  396. exit
  397. /*---------------------------------------------------------------------------------*/
  398. syntax:
  399. SAY "error at line" SIGL ":" RC
  400. Return
  401.