> [EMAIL PROTECTED] wrote:
> 
> > Any plans for REBOL to support MP3?
> 

Petr wrote:
> ... but maybe there is another way ... REBOL/Command should support REBOL
> embedding into custom apps. So let's ask mp3 players authors to add rebol
> port into it and you can link your rebol to such app. Another solution is
> - REBOL/Command is supposed to support external apps execution at least,
> so you will be able to start your favourite mp3 player ...

Why wait?  A REBOL port is just a standard TCP/IP port, and there 
already  MP3 players that can be controlled via TCP.

I'm in the (slow) process of building a standalone/dedicated MP3 
player into an old CD player chassis I had laying around.  See the 
attached code.  I welcome any comments or feedback.

Cheers,
Kev

------------------------------------------------------------------------
Kevin McKinnon, Network Engineer                 [EMAIL PROTECTED]
Sunshine Communications                     http://www.sunshinecable.com
                      **NOTE NEW E-MAIL ADDRESS**
PGP Public Key: http://www.dockmaster.net/pgp.html   PGP 6.0 www.pgp.com

#!/usr/local/rebol/rebol -s

REBOL [
        Title:  "MP3 Controller"
        Date:   29-Dec-1999
        Author: "Kevin McKinnon"
        File:   %mp3.r
        Email:  [EMAIL PROTECTED]
        Purpose: {
                Controller for a stand-alone MP3 player which is being
                built with a P233MMX motherboard mounted inside a gutted
                Pioneer PDM-401 6-pack CD Player chassis.  The LCD routines
                control a Matrix Orbital LK204-25 serial LCD display.
                (www.matrixorbital.com, Cdn distrib: www.hvwtech.com)
                Operating system: Linux 2.2.13 (Slackware 7.0)
                MP3 player: www.mpegtv.com
                This script is called via a shell script that pipes the output
                of the MP3 player into Rebols STDIN.
                All song filenames are formatted "Artist-Title.mp3" for easy parsing.

                'input?/'input don't seem to be working all that well for the piped
                input from xaudio.  Can read-io be used for STDIN?

        }
]

com: open/binary/direct %/dev/ttyS1
cmd: to-string #{FE}
lcdclear: rejoin [cmd "X"]
lcdhome: rejoin [cmd "H"]
lcdcurson: rejoin [cmd "J"]
lcdcursoff: rejoin [cmd "K"]
lcdcursblinkon: rejoin [cmd "S"]
lcdcursblinkoff: rejoin [cmd "T"]
lcdwrapon: rejoin [cmd "C"]
lcdwrapoff: rejoin [cmd "D"]
lcdscrollon: rejoin [cmd "Q"]
lcdscrolloff: rejoin [cmd "R"]
lcdbacklighton: rejoin [cmd "B" ^@]
lcdbacklightoff: rejoin [cmd "F"]
lcdinit: rejoin [lcdwrapon lcdscrollon lcdbacklighton lcdcursoff
                 lcdcursblinkoff lcdclear]
runtime: 0:00:01

append com lcdinit

titleartistdisplay: make function! [filename] [
  tasplit: parse first parse last parse to-string filename "/" "." "-"
  artist: copy/part join first tasplit ["                    "] 20
  title: copy/part join second tasplit ["                    "] 20
  duration: rejoin ["             " counter]
  display: rejoin [lcdhome title artist duration]
  append com display
]

mp3cue: make function! [filename] [
  mp3ctlport: open tcp://127.0.0.1:9717
  print rejoin ["open " to-string filename crlf]
  insert mp3ctlport rejoin ["open " to-string filename crlf]
  close mp3ctlport
  while [input?] [
    a: input
    if (find a "duration") [
      runtime: to-time to-integer last parse a "[]"
    ]
    if ((copy/part a 22) = "MSG notify stream info") [break]
    print a
  ]
;  print "broke with ack"
]

mp3play: make function! [] [
  mp3ctlport: open tcp://127.0.0.1:9717
  print rejoin ["play" crlf]
  insert mp3ctlport rejoin ["play" crlf]
  close mp3ctlport
]

mp3stop: make function! [] [
  mp3ctlport: open tcp://127.0.0.1:9717
  print rejoin ["stop" crlf]
  insert mp3ctlport rejoin ["stop" crlf]
  close mp3ctlport
]

mp3close: make function! [] [
  mp3ctlport: open tcp://127.0.0.1:9717
  print rejoin ["close" crlf]
  insert mp3ctlport rejoin ["close" crlf]
  close mp3ctlport
]

comment {
getkeypad: make function! [
  buffer: make string! 16
  result: make string! 16
  while [(read-io com buffer 16) <> 0] [
          append result buffer
          clear buffer
        ]
]
}

doplayer: make function! [musicfile] [
  mp3cue musicfile
  endtime: (to-time runtime) + now/time
  counter: endtime - now/time
  titleartistdisplay musicfile
  mp3play
  until [retport: wait [1]
    counter: endtime - now/time
    titleartistdisplay musicfile
    lesser-or-equal? (counter) 0:00:00
  ]
  mp3stop
  mp3close
]

doplayer %"/mnt/mp3/PaulMcCartney/PaulMcCartney-BandOnTheRun.mp3"
doplayer %"/mnt/mp3/Journey/Journey-SeparateWays(WorldsApart).mp3"
doplayer %"/mnt/mp3/TomPetty/TomPetty-Refugee.mp3"
doplayer %"/mnt/mp3/DireStraits/DireStraits-Twistin'ByThePool.mp3"

close com

Reply via email to