home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / opus / v5 / player2.1opus5 / arexx / playcdda_yacdp.dopus5 next >
Text File  |  1977-12-31  |  13KB  |  405 lines

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