home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Amiga / Workbench / DOpus / OpusMPEGA.lha / opusmpega / arexx / Play-MPAudio.dopus5 next >
Text File  |  1998-04-17  |  11KB  |  315 lines

  1. /* AREXX Script for MPEG-Soundplaying Layer 1,2&3 Opus5.6+ Filetypes
  2. ** Displays Song, MPEG-Layer, Playtime in a Dopus Progress Window
  3. ** (or Melody MPEGPlay Window).
  4. **
  5. ** Needed: Directory Opus V5.6+ (⌐ by Jonathan Potter & GPSoftware)
  6. **         mpega >= V3.3 (⌐ 1997 by Stephane Tavenard)
  7. **       PPCMpegPlayer by Stefan Burstroem for PowerUp-Boards
  8. ** Optional:
  9. **       Melody MPEG-Soundcard (⌐ 1997 KATO)
  10. **       MPEGPlay by Thorsten Hansen V1.0+
  11. **         PeggyPlus MPEG-Card (⌐ Ingenierbuero Helfrich)
  12. **        Toccata, Prelude, Delfina-Soundcard & other Soundcard with AHI-Driver
  13. **       AHI Retargetable Audio System (⌐ by Martin Blom)
  14. **
  15. ** 
  16. ** $VER: Play-MPAudio.dopus5 3.1 (29.4.98)
  17. ** Copyright ⌐ 1995-1998 Eckhard Ludwig (Eckhard@top.east.de)
  18. **
  19. ** EmailWare:
  20. ** This program is Email-Ware !
  21. **
  22. ** Call as:
  23. ** ----------------------------------------------------------------
  24. ** (Doubleklick)   ARexx DOpus5:ARexx/PlayMPAudio.dopus5 {f} {Qp}
  25. ** ----------------------------------------------------------------
  26. ** Flags : Run asynchronously (Asynchroner Start)
  27. **
  28. ** Deutsch:
  29. ** Programm: PlayMPAudio.dopus5, Universeller Opus5 MPEG Audioplayer (Layer 2&3),
  30. ** unterstⁿtzt MPEG-Karten, Soundkarten (AHI), PowerPC-Bords
  31. **
  32. ** Doppelklicke ein MPEG-Audio File, MPEG-Wiedergabe wird gestartet.
  33. ** Erneuter Aufruf startet sofort den nΣchsten Titel (beendet zuvor alten).
  34. **
  35. **--------S E T T I N G S : -------------------------------------------
  36. ** If the file ENV:OpusMPEGA.prefs exists, that one will override the    
  37. ** settings here !                                                     
  38. */
  39.  
  40. Player = "MPEGA"
  41. PlayMPEG = "C:MPEGA.040"           /* Path Softwareplayer */
  42. PlayMelody = "C:MPEGPlay"         /* Path Melody Hardwareplayer */
  43. MPEGA_OPTIONS="-p0 -T -f0 -d2 -q2"      /* MPEGA Optionen, Default: Amiga Paula */
  44. BREAKMPEG = "C:BreakName"         /* Path MPEGA Breaktool */
  45. HELPPATH="DOpus5:Help/OpusMPEGA.guide"
  46. SETUPPATH="SYS:Prefs/OpusMPEGA"
  47. COUNTER="FOR"                /* FOR or BACK */
  48. PPCPATH="SYS:PPCTOOLS/PPCMPEG"
  49. PPCPLAY=""                 /* mp3-Player: PPCMpegPlayer or empty for MPEGA */
  50. PPCUNIT=0
  51.  
  52. parse arg '"'Titel'"' portname handle
  53.  
  54. if portname='' then portname='DOPUS.1'
  55. If ~SHOW("P",portname) THEN DO
  56.         SAY portname' is not a valid port!'
  57.     exit
  58.     end
  59.  
  60. Signal on syntax
  61. options results
  62. options failat 21
  63. lf='0a'x
  64.  
  65. address value portname
  66. dopus version
  67. if ( result='RESULT' | TRANSLATE(result,'.',' ') < 5.6 ) THEN DO
  68.         dopus request '"This script requires DOpus Magellan V5.6 or greater." Exit'
  69.         exit
  70.     end
  71.  
  72. if open(1,'env:OpusMPEGA.prefs','R') then do
  73.    do i=1 to 17
  74.         prefs.i = readln(1)
  75.         end
  76.        if prefs.2 ~="" then PlayMelody=prefs.2
  77.        if prefs.3 ~="" then PlayMPEG=prefs.3
  78.        if prefs.4 ~="" then BREAKMPEG=prefs.4
  79.        if prefs.5 ~="" then MPEGA_OPTIONS=prefs.5
  80.        if prefs.6 ~="" then Player=prefs.6
  81.        if prefs.12 ~="" then HELPPATH=prefs.12
  82.        if prefs.13 ~="" then SETUPPATH=prefs.13
  83.        if prefs.14 ~="" then COUNTER=prefs.14
  84.        if prefs.15 ~="" then PPCPATH=prefs.15
  85.        if prefs.16 ~="" then PPCPLAY=prefs.16
  86.        if prefs.17 ~="" then PPCUNIT=prefs.17
  87.        call close(1)
  88.    end
  89.  
  90. if ~show('l','rexxsupport.library') then call addlib('rexxsupport.library',0,-30,0)
  91.  
  92. /* init locale */
  93. if ~show(l,'locale.library') then call addlib('locale.library',0,-30)
  94. if show(l,'locale.library') then catalog=opencatalog('OpusMPEGA.catalog','english',0)
  95.  
  96. dopus getfiletype '"'Titel'"' id
  97. DT=result
  98.  
  99. If show('P','mpegport') then do
  100.     dopus send 'mpegport' 'EXIT'
  101.     DUMMY=delay(30)
  102.     end
  103. if PPCPLAY="PPCMpegPlayer" then address command BREAKMPEG" "PPCPLAY" C"
  104.        else address command BREAKMPEG" "PlayMPEG" C"
  105. If Show("P","DELITRACKER") then  address 'DELITRACKER' 'QUIT'
  106. If Show("P","RXTRACKER") then  address 'RXTRACKER' 'QUIT'
  107. call delay(20)
  108.  
  109. /* Player starten & testen */
  110. if ~exists(PlayMPEG) then do
  111.               dopus request '"'getcatstr(9,'Fatal Error ...'LF''LF'MPEGA by StΘphane TAVENARD not found?!'LF'path to command: '"'%s'"'',PlayMPEG)'"' getcatstr(17,'OK|Preferences|Help')
  112.         if RC=0 then command run HELPPATH
  113.         else if RC=2 then command run SETUPPATH
  114.              exit
  115.         end
  116. if ~exists(BREAKMPEG) then do
  117.                dopus request '"'getcatstr(10,'Error ...'LF''LF'Breaktool by Kai Iske not found?!'LF'path to command: '"'%s'"'',BREAKMPEG)'"' getcatstr(17,'OK|Preferences|Help')
  118.         if RC=0 then command run HELPPATH
  119.         else if RC=2 then command run SETUPPATH
  120.             end
  121. if DT="MP3"&Player="PEGGYPLAYER" & show('P','Peggy') then address 'Peggy' QUIT
  122. If DT="MP3"&(Player="MELODY"|Player="PEGGYMELODY"|Player="CD32") & show('P','MPEGPLAY.1') then address 'MPEGPLAY.1' 'QUIT'
  123.  
  124. if DT="MP2"&Player="MELODY" & exists(PlayMelody) & ~show('P','MPEGPLAY.1') then do
  125.     call pragma('STACK',10000)
  126.        address command
  127.          'run >NIL: <NIL: 'PlayMelody' DEV=melodympeg.device BUFF=32000 NBUFF=10 PUBSCREEN='portname
  128.          'waitforport MPEGPLAY.1'
  129. end
  130. if DT="MP2"&Player="PEGGYMELODY" & exists(PlayMelody) & ~show('P','MPEGPLAY.1') then do
  131.     call pragma('STACK',10000)
  132.     address command
  133.     'run >NIL: <NIL: 'PlayMelody' DEV=peggympeg.device BUFF=5000 NBUFF=20 PUBSCREEN='portname
  134.     'waitforport MPEGPLAY.1'
  135. end
  136. if DT="MP2"&Player="CD32" & exists(PlayMelody) & ~show('P','MPEGPLAY.1') then do
  137.     call pragma('STACK',10000)
  138.     address command
  139.     'run >NIL: <NIL: 'PlayMelody' DEV=mpeg.device BUFF=32000 NBUFF=10 PUBSCREEN='portname
  140.     'waitforport MPEGPLAY.1'
  141. end
  142. if DT="MP2"&Player="PEGGYPLAYER" then do
  143.        if showlist("A","PEGGYPLUS")=1 & ~show('P','Peggy') then do
  144.         call pragma('STACK',8192)
  145.                address command
  146.              'run >NIL: <NIL: PEGGYPLUS:MPEGPlayer'
  147.                'waitforport Peggy'
  148.         DUMMY=Delay(10)
  149.     end
  150.     if ~show('P','Peggy') then do
  151.         address value portname
  152.                dopus front
  153.                dopus request '"'getcatstr(8,'Fatal Error ...'lf''lf'Peggy-Plus MPEG Player not found !'lf'Please run Peggy-Player first.')'"' getcatstr(1,'Quit')
  154.         exit
  155.     end    
  156. end
  157.  
  158. if (DT="MP2"&Player="PPC"|DT="MP3") & PPCPLAY="PPCMpegPlayer" then do
  159.        address command "RUN >NIL: "PlayMPEG" <nil: -s -h " '"'Titel'"' " >PIPE:MPEGAOUT"
  160.     Readinfo()
  161.        call close('MPEGAOUT')
  162.     call pragma("D",PPCPATH)
  163.        adress value portname
  164.     if ~exists(PPCPLAY) then do
  165.                lister request handle '"'getcatstr(25,'Fatal Error ...'LF''LF'PPCMpegPlayer by Stefan Burstroem not found?!'LF'Path to Command: '"'%s'"'/'"'%s'"''LF'For Setup select Prefs!',PPCPATH,PPCPLAY)'"' getcatstr(17,'OK|Preferences|Help')
  166.         if RC=0 then command run HELPPATH
  167.             else if RC=2 then command run SETUPPATH
  168.         call Ende
  169.         end
  170.        address command "RUN >NIL: PPCMpegPlayer " '"'Titel'"' " UNIT="PPCUNIT
  171.     Titel=substr(Titel,lastpos("/",Titel)+1)
  172.     address value portname
  173.     dopus progress name info bar abort
  174.     handle=result
  175.      SEC=0
  176.     TPM="00"
  177.     TPS="00"
  178.       dopus progress handle title "PPCMpegPlayer by Stefan Burstroem"
  179.      dopus progress handle name PM":"PS"  "CD
  180.     TIMS=time('S')
  181.        do forever
  182.               if COUNTER="FOR" then dopus progress handle INFO TPM":"TPS"  "Titel
  183.                   else dopus progress handle INFO PM":"PS"  "Titel
  184.            dopus progress handle bar LAENGE SEC
  185.         if TIMS=86400 then TIMS=1
  186.             else TIMS=TIMS+1
  187.         do until TIMS<=time('S')
  188.             call delay(10)
  189.             lister query handle abort
  190.               if result then leave
  191.             end
  192.         SEC=SEC+1
  193.         if COUNTER="FOR" then do
  194.             if TPM=PM & TPS=PS then leave
  195.             TPS=right(TPS+1,2,0)
  196.             if TPS=60 then do
  197.                 TPS="00"
  198.                 TPM=right(TPM+1,2,0)
  199.                 end
  200.         end
  201.         else do
  202.             if PM=0 & PS=0 then leave
  203.             PS=right(PS-1,2,0)
  204.             if PS<0 then do
  205.                 PS=59
  206.                 PM=right(PM-1,2,0)
  207.                   end
  208.         end
  209.           dopus progress handle abort
  210.         if result then do
  211.             address command BREAKMPEG" "PPCPLAY" C"
  212.             dopus progress handle name getcatstr(2,'Player aborted, please wait ...')
  213.             call delay (200)
  214.             leave
  215.         end
  216.     end
  217.      dopus progress handle off
  218.     call delay(10)
  219.   end
  220.  
  221. if (DT="MP2"&Player="MPEGA")|(DT="MP3" & PPCPLAY="") then do
  222.      address command "RUN >NIL: "PlayMPEG" <nil: "MPEGA_OPTIONS" " '"'Titel'"' " >PIPE:MPEGAOUT"
  223.     Readinfo()
  224.     Titel=substr(Titel,lastpos("/",Titel)+1)
  225.     address value portname
  226.     dopus progress name info bar abort
  227.     handle=result
  228.      SEC=0
  229.     TPM="00"
  230.     TPS="00"
  231.      dopus progress handle title MPEGAV
  232.      dopus progress handle name PM":"PS"  "CD
  233.      DO UNTIL Eof('MPEGAOUT')
  234.         DO UNTIL readch('MPEGAOUT',1)='0D'x|Eof('MPEGAOUT')
  235.          end
  236.               if COUNTER="FOR" then dopus progress handle INFO TPM":"TPS"  "Titel
  237.                   else dopus progress handle INFO PM":"PS"  "Titel
  238.            dopus progress handle bar LAENGE SEC
  239.         SEC=SEC+1
  240.         TPS=right(TPS+1,2,0)
  241.         if TPS=60 then do
  242.             TPS="00"
  243.             TPM=right(TPM+1,2,0)
  244.             end
  245.         PS=right(PS-1,2,0)
  246.         if PS<0 then do
  247.             PS=59
  248.             PM=right(PM-1,2,0)
  249.               end
  250.           dopus progress handle abort
  251.           IF RESULT THEN address command BREAKMPEG" "PlayMPEG" C"
  252.      end
  253.      dopus progress handle off
  254.     call delay(10)
  255.      CALL Close('MPEGAOUT')
  256. end
  257. If DT="MP2" & Player="PEGGYPLAYER" then do
  258.           address 'Peggy'
  259.           open '"'Titel'"'
  260.           setwindow XOFF 0 YOFF 0 WIDTH 1 HEIGHT 1 XPIC 0 YPIC 0
  261.           Play async
  262. end
  263. if DT="MP2" & (Player="MELODY"|Player="PEGGYMELODY"|Player="CD32") then do
  264.     if ~show('P','MPEGPLAY.1') then do
  265.         ADDRESS VALUE portname
  266.             dopus request '"'getcatstr(11,'Fatal Error ...'lf''lf'MPEGPlay V1.0+ by Thorsten Hansen not found?!'lf'Path to Command: '"'%s'"''lf'For Setup use Player-Setup !',PlayMelody)'"' getcatstr(1,'Quit')
  267.         exit
  268.     end
  269.     else do
  270.           address 'MPEGPLAY.1'
  271.         'showgui'
  272.               'play' Titel
  273.     end
  274. end
  275. exit
  276.  
  277. /*-------Readinfo-------------------------------------------------------------------------*/
  278. Readinfo:
  279.       if ~Open('MPEGAOUT','PIPE:MPEGAOUT','r') then do
  280.         address command BREAKMPEG" "PlayMPEG" C"
  281.         ADDRESS VALUE portname
  282.                dopus front
  283.                dopus request '"'getcatstr(7,'System Error ...'LF'DEVS:DOSDrivers/PIPE not installed?!')'"' getcatstr(1,'Quit')
  284.         exit
  285.          end
  286.     TAGINFO=""
  287.     DUMMY=""
  288.        do until DUMMY='0D'x|Eof('MPEGAOUT')
  289.            TAGINFO=TAGINFO||DUMMY
  290.         DUMMY=readch('MPEGAOUT',1)
  291.          end
  292.     MPEGAV=substr(TAGINFO,5,9)||substr(TAGINFO,19,pos('(C)',TAGINFO)-19)
  293.     if  substr(MPEGAV,7,3)<3.3 then do
  294.         dopus request '"'getcatstr(6,'Fatal Error ...'LF''LF'MPEGA (by StΘphane TAVENARD) version 3.3 or newer required!')'"' getcatstr(1,'Quit')
  295.         exit
  296.         end
  297.     PS=substr(TAGINFO,pos('length:',TAGINFO)+15,2)
  298.     PM=substr(TAGINFO,pos('length:',TAGINFO)+12,2)
  299.     CD=substr(TAGINFO,pos('Type:',TAGINFO)+14,30)
  300.     CD=substr(CD,1,pos('Hz',CD)+1)
  301.        LAENGE=PM*60+PS
  302. return 0
  303.  
  304. /*-----Locale-----------------------------------------------------------------*/
  305. getcatstr:
  306. parse arg msgno,msgstring,insert.1,insert.2
  307. if catalog~=0 then msgstring=getcatalogstr(catalog,msgno,msgstring)
  308. j=0
  309. do while pos('%s',msgstring)>0
  310.         parse var msgstring fore '%s' aft
  311.           j=j+1
  312.           msgstring=fore||insert.j||aft
  313. end
  314. return msgstring
  315.