All pastes #183229 Raw Edit

Unnamed

public text v1 · immutable
#183229 ·published 2006-09-26 18:33 UTC
rendered paste body
;########################################################################################
;# Shoutcast stream recorder v1.1 for mIRC  5.9x and higher
;# just load it and type /shoutcast
;# you can listen the stream while recording it but due to the /splay command
;# you will get a small blank every ~10 seconds :(
;#
;# (c)2002 gamo @ [irc.kewl.org - #uk]
;########################################################################################

dialog shout {
  title "Shoutcast stream recorder"
  size -1 -1 139 152
  option dbu
  edit "", 1, 3 8 94 10
  box "Address", 2, 1 1 98 19
  box "Port", 3, 98 1 40 19
  edit "", 4, 100 8 36 10
  box "", 5, 1 16 137 121
  list 6, 3 21 133 41, size vsbar
  text "Output:", 7, 4 65 20 8
  edit "", 8, 24 64 91 10, read autohs
  button "[...]", 9, 116 64 19 10
  button "Close", 10, 111 139 27 12, cancel
  box "Infos", 11, 1 76 137 61
  text "Radio Name:", 12, 5 84 31 8, right
  edit "", 13, 37 83 98 10, read autohs
  text "Radio URL:", 14, 5 95 31 8, right
  edit "", 15, 37 94 98 10, read autohs
  edit "", 17, 3 125 43 10, read
  text "Genre:", 18, 5 106 31 8, right
  edit "", 19, 37 105 98 10, read autohs
  edit "", 20, 48 125 43 10, read
  edit "", 21, 93 125 43 10, read
  box "Bitrate", 22, 1 117 47 20
  box "Record time", 23, 47 117 45 20
  box "File size", 24, 91 117 47 20
  button "Start", 25, 82 139 27 12
  button "Play", 26, 1 139 27 12, disable
}
on *:dialog:shout:init:*: {
  hmake shout 100
  hadd shout file $mircdir $+ Radio.mp3
  hadd shout head 0
  did -ra shout 8 $hget(shout,file)
}
on *:dialog:shout:sclick:26: {
  if (!$hget(shout,ispl)) { shp -p | did -ra shout 26 Stop }
  else { shp -s | did -ra shout 26 Play }
}
on *:dialog:shout:sclick:10: sockclose shoutcast | shp -s | hfree shout | .timershout off
on *:dialog:shout:sclick:9: var %a = $sfile($mircdir,Choose a file) | if (%a) { hadd shout file %a | did -ra shout 8 %a }
on *:dialog:shout:sclick:25: {
  if ($did(shout,25) == Start) {
    if ($isfile($+(",$hget(shout,file),"))) { var %a = $input(The specified file allready exist, do you want to overwrite it ?) | if (!%a) return }
    write -c $+(",$hget(shout,file),")
    var %ip = $did(shout,1), %port = $did(shout,4)
    if (!%ip) || (!%port) { var %a = $input(Enter a valid IP/Port,260) | return }
    hadd shout ip %ip | hadd shout port %port
    did -ra shout 6 Connecting to: $+($hget(shout,ip),:,$hget(shout,port)) ...
    did -ra shout 25 Stop
    sockopen shoutcast $hget(shout,ip) $hget(shout,port)
    did -e shout 26
  }
  else {
    sockclose shoutcast
    did -a shout 6 Stream stopped | did -ra shout 25 Start | did -ra shout 26 Play
    .timershout off | hadd shout head 0 | shp -s | did -b shout 26
  }
}
alias shoutcast dialog $iif($dialog(shout),-v,-m shout) shout

on *:sockopen:shoutcast: { 
  if ($sockerr) { disp Can't connect to: $+($hget(shout,ip),:,$hget(shout,port)) | return }
  var %a = sockwrite -n shoutcast
  %a GET / HTTP/1.0
  %a Host: $sock(shoutcast).ip
  %a User-Agent: mSSC/1.1
  %a Accept: */*
  %a Icy-MetaData:0
  %a Connection: close
  %a
}
on *:sockread:shoutcast: {
  var %a
  if (!$hget(shout,head)) {
    sockread %a
    while ($sockbr) {
      if (%a) {
        tokenize 58 %a
        if (%a == ICY 200 OK) { disp Connected successfuly }
        elseif ($1 == icy-name) { did -ra shout 13 $2- }
        elseif ($1 == icy-genre) { did -ra shout 19 $2- }
        elseif ($1 == icy-url) { did -ra shout 15 $2- }
      }
      if (icy-br:* iswm %a) { hadd shout head 1 | did -ra shout 17 $2 | .timershout -m 0 500 shoutinf | break }
      sockread %a
    }
  }
  else {
    sockread &a 8192
    while ($sockbr) {

      if ($hget(shout,play)) {
        var %f = $+(shtmp,$hget(shout,wrt),.mp3)
        bwrite %f -1 -1 &a

        if ($file(%f).size >= 131072) {
          if ($hget(shout,wrt) == 3) hadd shout wrt 1
          else hinc shout wrt 1
          if (!$hget(shout,ready)) { hinc shout ready | splay %f | disp Play: buffering ok, now playing }
          else splay -q %f
          write -c $+(shtmp,$hget(shout,wrt),.mp3)
        }
      }
      bwrite $shortfn($hget(shout,file)) -1 -1 &a
      sockread &a 8192
    }
  }
}
alias -l shoutinf {
  did -ra shout 20 $duration($calc($sound($shortfn($hget(shout,file))).length /1000))
  did -ra shout 21 $bytes($file($shortfn($hget(shout,file))).size,m) Mb
}
alias disp { did -a shout 6 $1- | did -c shout 6 $did(shout,6).lines }
alias -l shp {
  if ($1 == -p) {
    write -c shtmp1.mp3 | write -c shtmp2.mp3 | write -c shtmp3.mp3
    hadd shout play 1 | hadd shout ready 0 | hadd shout wrt 1
    disp Play: Please Wait (buffering 128kb) ...
    hadd shout ispl 1
  }
  if ($1 == -s) {
    splay stop | hadd shout play 0 | hadd shout ready 0 | hadd shout wrt 1 | hadd shout ispl 0
    if ($isfile(shtmp1.mp3)) .remove shtmp1.mp3 | if ($isfile(shtmp2.mp3)) .remove shtmp2.mp3
    if ($isfile(shtmp3.mp3)) .remove shtmp3.mp3
    disp Play: Stopped
  }
}