home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Multimed / Multimed.zip / lbmix04.zip / PipeMix / minimix.cmd < prev    next >
OS/2 REXX Batch file  |  2000-05-04  |  7KB  |  221 lines

  1. /* REXX */
  2. /*
  3.    A mini pipe mixer control REXX script (second edition) based on work of
  4.    Lesha Bogdanow.
  5.    Works at least with my cheap noname Crystal-PCI-CS4614 Sound-Card.
  6.    Mix90.exe or 'lbmix -ps' or something like this has to run in background
  7.    to be able to use this script.
  8.  
  9.    Usable keys: Cursor up/down left/right,
  10.                 Ctrl + Cursor up/down,
  11.                 Ctrl + Cursor left/right,
  12.                 TAB, Shift+TAB,
  13.                 SPACE, m, q.
  14.  
  15.    copyright:   >freeware< If you like this little script, find a bug
  16.                 or have a good idea to enhance it, you can send email to
  17.                 fbakan@gmx.net    Franz Bakan, 4. 5. 2000
  18. */
  19.  
  20. CALL RxFuncAdd 'SysLoadFuncs','RexxUtil','SysLoadFuncs'
  21. CALL SysLoadFuncs
  22.  
  23. ESC = "1B"x||"["
  24. no  = ESC||"44;0;37m" /* normal */
  25. bd  = ESC||"1m"       /* bold   */
  26. reverse  = ESC||"7m"
  27. muted    = reverse
  28. red      = ESC||"31;1m" /* bold red */
  29. selected = ESC||"44;37;1m"
  30.  
  31. pipe="\PIPE\MIXER"
  32.  
  33. controls = 5
  34. lc = controls - 1  /* last control */
  35. /*         Name      ; query-string    ; set-string */
  36. ctrl.0.n = " Master" ; ctrl.0.q = "11" ; ctrl.0.set = "01"
  37. ctrl.1.n = "  Mic  " ; ctrl.1.q = "62" ; ctrl.1.set = "42"
  38. ctrl.2.n = "  Line " ; ctrl.2.q = "63" ; ctrl.2.set = "43"
  39. ctrl.3.n = "   CD  " ; ctrl.3.q = "64" ; ctrl.3.set = "44"
  40.  
  41. /* increase number of controls and enter additional lines here. For example: */
  42. /* ctrl.4.n = "  AUX  " ; ctrl.4.q = "66" ; ctrl.4.set = "46" */
  43. /* see ioctl90.h or http://www.pompano.net/~joenord/ioctl90/ for details */
  44.  
  45. ctrl.lc.n = "  "||red||"Rec  " ; ctrl.lc.q = "6F" ; ctrl.lc.set = "4F"
  46.  
  47. idx = 2 /* Default to Line */
  48. MODE controls*8 3
  49. cls
  50. CALL SysCurState(OFF)
  51.  
  52. /* query status */
  53. DO i = 0 to controls-1
  54.   CALL queryvolume i
  55.   ctrl.i.atr = no /* text atribut */
  56.   rc = SysCurPos(1,i*8)
  57.   IF ctrl.i.s THEN DO
  58.     IF ctrl.i.mute == 0 THEN SAY FORMAT(ctrl.i.left,3) FORMAT(ctrl.i.right,3)
  59.     ELSE SAY muted||FORMAT(ctrl.i.left,3) FORMAT(ctrl.i.right,3)||no
  60.     END
  61. END
  62.  
  63. ctrl.idx.atr = selected
  64. rc = SysCurPos(2,0)
  65. rc = CHAROUT(, ' 'bd||'m'||no||'=toggle_mute ' bd||'q'||no||'=quit')
  66.  
  67. CALL output
  68.  
  69. DO FOREVER
  70.   key=SysGetKey(NOECHO)
  71.     SELECT
  72.       WHEN key == "09"x THEN DO /* select source */
  73.         ctrl.idx.atr = no
  74.         idx = idx + 1
  75.         IF idx == controls THEN idx = 0
  76.         ctrl.idx.atr = selected
  77.         CALL output
  78.       END /* tab */
  79.  
  80.     WHEN (key == 'm' | key == ' ') & idx <> 0 THEN DO /* toggle mute */
  81.       IF ctrl.idx.mute == 1 THEN ctrl.idx.mute = 0
  82.       ELSE ctrl.idx.mute = 1
  83.       CALL changevolume
  84.     END /* m */
  85.  
  86.     WHEN key == 'q' THEN DO
  87.       'mode 80 25'
  88.       SAY no
  89.       CLS
  90.       EXIT(0)
  91.     END /* q */
  92.  
  93.     WHEN key == "00"x | key == "E0"x THEN DO  /* Function Keys */
  94.       key2 = SysGetKey(NOECHO)
  95.       SELECT
  96.         WHEN C2D(key2) == 15 | C2D(key2) == 75 THEN DO /* select source */
  97.           ctrl.idx.atr = no
  98.           idx = idx -1
  99.           IF idx == -1 THEN idx = controls-1
  100.           ctrl.idx.atr = selected
  101.           CALL output
  102.         END /* shift tab  cursor left */
  103.  
  104.         WHEN C2D(key2) == 77 THEN DO /* select source */
  105.           ctrl.idx.atr = no
  106.           idx = idx +1
  107.           IF idx == controls THEN idx = 0
  108.           ctrl.idx.atr = selected
  109.           CALL output
  110.         END /*  cursor right */
  111.  
  112.         WHEN C2D(key2) == 72 THEN DO /* Cursor up: increase volume */
  113.           IF ctrl.idx.left < 100 THEN ctrl.idx.left = ctrl.idx.left + 1
  114.           IF ctrl.idx.right < 100 THEN ctrl.idx.right = ctrl.idx.right + 1
  115.           CALL changevolume
  116.         END /* 72 */
  117.  
  118.         WHEN C2D(key2) == 141 THEN DO /* Cursor up: increase volume +10 */
  119.           ctrl.idx.left = ctrl.idx.left + 10
  120.           IF ctrl.idx.left > 100 THEN ctrl.idx.left = 100
  121.           ctrl.idx.right = ctrl.idx.right + 10
  122.           IF ctrl.idx.right > 100 THEN ctrl.idx.right = 100
  123.           CALL changevolume
  124.         END /* 141 */
  125.  
  126.         WHEN C2D(key2) == 80 THEN DO /* Cursor down: decrease volume */
  127.           IF ctrl.idx.left > 0 THEN ctrl.idx.left = ctrl.idx.left - 1
  128.           IF ctrl.idx.right > 0 THEN ctrl.idx.right = ctrl.idx.right - 1
  129.           CALL changevolume
  130.         END /* 80 */
  131.  
  132.         WHEN C2D(key2) == 145 THEN DO /* Cursor down: decrease volume -10 */
  133.           ctrl.idx.left = ctrl.idx.left - 10
  134.           IF ctrl.idx.left < 0 THEN ctrl.idx.left = 0
  135.           ctrl.idx.right = ctrl.idx.right - 10
  136.           IF ctrl.idx.right < 0 THEN ctrl.idx.right = 0
  137.           CALL changevolume
  138.         END /* 145 */
  139.  
  140.         WHEN C2D(key2) == 115 & idx <> 7 THEN DO /* Ctrl+Cursor left: balance to left */
  141.           IF ctrl.idx.left < 100 THEN ctrl.idx.left = ctrl.idx.left +1
  142.           IF ctrl.idx.right > 0 THEN ctrl.idx.right = ctrl.idx.right -1
  143.           CALL changevolume
  144.         END /* 75 */
  145.  
  146.         WHEN C2D(key2) == 116 & idx <> 7 THEN DO /* Ctrl+Cursor right: balance to right */
  147.           IF ctrl.idx.left > 0 THEN ctrl.idx.left = ctrl.idx.left -1
  148.           IF ctrl.idx.right < 100 THEN ctrl.idx.right = ctrl.idx.right +1
  149.           CALL changevolume
  150.         END /* 77 */
  151.  
  152.       otherwise
  153.         nop     
  154.       END /* select key2 */
  155.     END /* function Key */
  156.  
  157.     otherwise
  158.       nop
  159.   END /* select key */
  160. END
  161.  
  162. EXIT
  163.  
  164. topipe:
  165.   IF STREAM(pipe,'c','OPEN') <> 'READY:' THEN DO
  166.     SAY 'Unable to connect to pipe for write' pipe
  167.     EXIT -1
  168.   END
  169.   IF lineout(pipe, dataout) <> 0 THEN DO
  170.     SAY 'Unable to write to pipe' pipe
  171.     EXIT -2
  172.   END
  173.   datain = ''
  174.   DO ii=1 to 16
  175.     data.ii = CHARIN(pipe)
  176.   END
  177.   IF STREAM(pipe,'c','CLOSE') <> 'READY:' THEN DO
  178.     SAY 'Unable to close pipe' pipe
  179.     EXIT -3
  180.   END
  181.   DO ii = 1 to 16
  182.     datain = datain||data.ii
  183.   END
  184.   CALL SysSleep 0.01
  185. RETURN
  186.  
  187. output:
  188.   rc = SysCurPos(0,0)
  189.   CALL SysCurState(OFF)
  190.   DO i = 0 to controls - 1
  191.     rc = CHAROUT(, ctrl.i.atr||ctrl.i.n||no||' ')
  192.   END 
  193. RETURN
  194.  
  195. changevolume:
  196.   dataout = ctrl.idx.set ctrl.idx.left ctrl.idx.right ctrl.idx.mute
  197.   rc = SysCurPos(1,idx*8)
  198.   IF ctrl.idx.s THEN DO
  199.     IF ctrl.idx.mute == 0 THEN SAY FORMAT(ctrl.idx.left,3) FORMAT(ctrl.idx.right,3)
  200.                       ELSE SAY muted||FORMAT(ctrl.idx.left,3) FORMAT(ctrl.idx.right,3)||no
  201.     END
  202.   CALL topipe
  203. RETURN
  204.  
  205. queryvolume:
  206.   ARG idx
  207.   dataout = ctrl.idx.q
  208.   CALL topipe
  209.   IF datain == "" THEN datain = "xx 50 50 0" /* in case query status fails */
  210.   ctrl.idx.left = word(datain,2) /* volume left  */
  211.   ctrl.idx.right = word(datain,3) /* volume right */
  212.   ctrl.idx.mute = word(datain,4) /* mute         */
  213.   IF datatype(ctrl.i.left)='NUM' THEN ctrl.i.s = 1 /* supported    */
  214.   ELSE DO 
  215.      ctrl.i.s     = 0 
  216.      ctrl.i.left  = 0
  217.      ctrl.i.right = 0
  218.      ctrl.i.mute  = 0
  219.   END
  220. RETURN
  221.