All pastes #140775 Raw Edit

shadow

public text v1 · immutable
#140775 ·published 2006-08-20 17:27 UTC
rendered paste body
;Thank you Fmod, Mdx and WhileFix.
;MircAmp v1.3 by talim.

menu channel,status,query {
  -
  $iif($window(@MircAmp), $style(2)) Mp3 player:/mircamp_open
  -
}

menu @MircAmp {
  sclick { if ($in_function) { return }
    var %x = $mouse.x, %y = $mouse.y, %i, %fmod | if ($inrect(%x, %y, 245, 0, 40, 15)) {
      %i = $round($calc(((%x - 245) / 40) * 3), 0) | if (%i == 0) { window -n @MircAmp }
    if (%i == 1) { size_click } | elseif (%i == 2) { MircAmp_close } }
    elseif ($hget(Y4, state) == normal) { if ($inrect(%x, %y, 18, 73, 115, 18)) { %i = $int($calc(((%x - 18) / 115) * 5)) | draw_key %i 1
        while ($mouse.key & 1) { $whilef } | if (%i != 2) && ($fmod(SOUND_GetPaused)) { draw_key %i 0 | return }
      if ($inrect($mouse.x, $mouse.y, $calc(18 + (%i * 23)), 73, 23, 18)) { sclick_event %i } | draw_key %i 0 }
      elseif ($inrect(%x, %y, 138, 73, 46, 18)) { %i = $iif(%x <= 163, 5, 6) | draw_key %i 1 | while ($mouse.key & 1) { $whilef } | sclick_event %i }
      elseif ($inrect(%x, %y, 189, 74, 75, 15)) { var %i = $iif(%x >= 235, 2, 1) | draw_key_b %i 1
      while ($mouse.key & 1) { $whilef } | sclick_event $calc(%i + 6) | draw_key_b %i 0 }
      elseif ($inrect(%x, %y, 191, 42, 75, 10)) { in_function 1
        while ($mouse.key & 1) { $whilef | %i = $int($round($calc((($mouse.x - 197) / 56) * 255), 0))
      if (%i > 0) { fmod SOUND_SetVolume 0 %i | draw_volume 1 } } | draw_volume 0 | hadd Y4 volume %i | in_function 0 }
      elseif ($inrect(%x, %y, 19, 16, 91, 28)) { var %p = hadd -m Y4 vis_type
      if ($hget(Y4, vis_type) == 1) { %p 2 } | else { %p 1 } | vis_switch }
      elseif ($inrect(%x, %y, 16, 57, 249, 10) && $fmod(SOUND_IsPlaying)) {
        if ($fmod(SOUND_GetPaused)) { return } | in_function 1 | var %x, %y, %z
        fmod SOUND_SetPaused -3 1 | while ($mouse.key & 1) {
          %x = $gettok($hget(Y4, track_info), 1, 32) | %y = $round($calc((($mouse.x - 25) / 233) * %x), 0)
        %z = $fmod(SOUND_Stream_SetPosition,1 %y) | draw_scroll %y %x 1 }
      else { return } | fmod SOUND_SetPaused -3 0 | in_function 0 }
      else { var %a, %b, %c = $calc($window(-1).w - $window($active).w), %d = $calc($window(-1).h - $window($active).h)
        while ($mouse.key & 1) { $whilef | %a = $calc($mouse.dx - %x) | %b = $calc($mouse.dy - %y)
    window $active $iif(%a < %c, $iif(%a > 0, %a, 0), %c) $iif(%b < %d, $iif(%b > 0, %b, 0), %d) } } }
    elseif ($hget(Y4, state) == minimized) { if ($inrect(%x, %y, 80, 0, 45, 15)) { %i = $int($calc(((%x - 80) / 45) * 5)) | draw_key_c %i 1 | while ($mouse.key & 1) { $whilef } | draw_key_c %i 0
      if ($inrect($mouse.x, $mouse.y, $calc(83 + (9 * %i)), 0, 9, 15)) { sclick_event %i } }
      elseif ($inrect(%x, %y, 200, 5, 43, 5)) {
        if ($fmod(SOUND_GetPaused)) { return }
        var %x, %y, %z | fmod SOUND_SetPaused -3 1
        while ($mouse.key & 1) { %x = $gettok($hget(Y4, track_info), 1, 32)
          %y = $round($calc((($mouse.x - 200) / 43) * %x), 0) | %z = $fmod(SOUND_Stream_SetPosition,1 %y)
        draw_scroll2 %y %x }
      fmod SOUND_SetPaused -3 0) }
      else { var %a, %b, %c = $calc($window(-1).w - $window($active).w), %d = $calc($window(-1).h - $window($active).h)
        while ($mouse.key & 1) { $whilef | %a = $calc($mouse.dx - %x) | %b = $calc($mouse.dy - %y)
  window $active $iif(%a < %c, $iif(%a > 0, %a, 0), %c) $iif(%b < %d, $iif(%b > 0, %b, 0), %d) } } } }
  Play
  .$submenu($playlist_tracks($1))
  Pause:/pause_track
  Stop:/stop_track
  Playlist:/sclick_event 5
  Media library:/sclick_event 6
  Favorite tracks
  .$submenu($fave_tracks($1))
  .Minimum play count $+ $chr(58) $iif($hget(Y4, min_play), $v1, not set.) : hadd -m Y4 min_play $?"Display tracks played how many times? (Or more)"
  .Clear history : hdel -w Y3 *
  Options
  .$iif($hget(Y4, random), $style(1)) $+ Shuffle { sclick_event 7 | draw_key_b 1 0 }
  .$iif($hget(Y4, continue), $style(1)) $+ Continuous play { sclick_event 8 | draw_key_b 2 0 }
  .$iif($hget(Y4, volume_fade), $style(1)) $+ Fade tracks:/hadd Y4 volume_fade $iif($hget(Y4, volume_fade), 0, 1)
  .Create playlists by
  ..$iif($hget(Y4, playlist_method) == 1, $style(1)) $+ Folder:/set_method 1
  ..$iif($hget(Y4, playlist_method) == 2, $style(1)) $+ Artist:/set_method 2
  ..$iif($hget(Y4, playlist_method) == 3, $style(1)) $+ Album:/set_method 3
  .$iif($hget(Y4, ontop), $style(1)) $+ On top { set_ontop $iif($hget(Y4, ontop), 0, 1) }
  .Add media to library:/add_media
  .Scan library for new files.:/rescan_media
  Exit:/mircamp_close
}
alias -l mircamp_open { var %w = @MircAmp
  window -Bpdh $+ $iif($hget(Y4, ontop), o) $+ k0 +d %w $iif($hget(Y4, main_coords), $v1, 0 0) 275 102 $binary(MircAmp.ico)
  drawpic -c %w 0 12 $bitmap(Main)
  drawpic -c %w 0 0 0 0 275 14 $bitmap(TitleBar) | var %i = 0
  while (%i <= 6) { draw_key %i 0 | inc %i } | draw_key_b 1 0
  draw_key_b 2 0 | draw_scroll 0 0 0
  draw_volume | vis_start
  if ($hget(Y4, media_status)) { sclick_event 6 } | if ($hget(Y4, playlist_status)) { sclick_event 5 }
  update_display | hadd -m Y4 state normal
}

alias -l mircamp_close { .timerUpdateDisplay off
  stop_track | vis_stop | var %d = Media
  :top
  if ($dialog(%d)) { did -a %d 2 page state | if ($gettok($did(%d, 2), 3, 32) == normal) { hadd -m Y4 %d $+ _status 1 }
  else {  hadd -m Y4 %d $+ _status 0 } | dialog -c %d } | if (%d == Media) { %d = Playlist | goto top }
  if ($window(@MircAmp)) { hadd -m Y4 main_coords $window(@mircAmp).x $window(@MircAmp).y | window -c @MircAmp }
  drawpic -c
}
alias -l draw_key { var %p = $calc($1 * 23) $iif(!$2, 0, 19) 22 18 $bitmap(KeyPadA) | drawpic -c @MircAmp $calc(18 + ($1 * 23) $iif($1 > 4,+ 5)) 73 %p }

alias -l draw_key_b { var %p
  if ($1 == 1) { %p = 0 $calc($iif(!$hget(Y4, random), 0, 30) + $iif(!$2, 0, 15)) 46 15 }
  else { %p = 46 $calc($iif(!$hget(Y4, continue), 0, 30) + $iif(!$2, 0, 15)) 29 15 }
  drawpic -c @MircAmp $iif($1 == 1, 189, 235) 74 %p $bitmap(KeyPadB)
}

alias -l draw_key_c {
  var %p = $calc($1 * 9) $calc(0 + $iif(!$2, 0, 10)) 9 9 $bitmap(KeyPadC)
  drawpic -c @mircAmp $calc(83 + (9 * $1)) 3 %p
}

alias -l draw_scroll { $whilef
  drawpic -cn @MircAmp 16 57 0 0 249 10 $bitmap(ScrollBar)
  if ($1 && $2) { var %i = $calc((($1 / $2) * 249) - 14)
    if (%i > 221) { %i = 221 } | elseif (%i < 0) { %i = 0 }
  drawpic -cn @MircAmp $calc(16 + %i) 57 $calc(249 + $iif(!$3, 0, 29)) 0 28 10 $bitmap(ScrollBar)  }
  drawdot @MircAmp
}


alias draw_scroll2 { $whilef | var %i = $round($calc(($1 / $2) * 43), 0)
  if (%i >= 0) && (%i <= 89) { drawrect -nfr @MircAmp $rgb(0,255,0) 1 200 5 %i 5 } | else { %i = 0 }
  drawrect -nfr @MircAmp $rgb(0,0,0) 1 $calc(200 + %i) 5 $calc(43 - %i) 5 | drawdot @MircAmp
}

alias draw_volume {
  var %x = $calc($fmod(SOUND_GetVolume,0) / 255), %y = $round($calc(191 + (%x * 68)), 0), %z = $round($calc(%x * 27), 0), %s
  if (%y < 197) { %y = 197 } | elseif (%y > 253) { %y = 253 }
  drawpic -cn @MircAmp 191 41 0 $calc(%z * 15) 68 14 $bitmap(Volume)
  drawpic -cn @MircAmp $calc(%y - 6) 42 $iif($1, 0, 16) 422 12 10 $bitmap(Volume)
  if ($round($calc(%x * 100), 0) > 2) { MircAmp_Print $v1 percent. }
  else { MircAmp_Print Mute. }

  drawdot @MircAmp
}

alias -l set_ontop {
  window - $+ $iif($1, o, u) @MircAmp | if ($dialog(Media)) { dialog - $+ $iif($1, o, n) Media }
  if ($dialog(Playlist)) { dialog - $+ $iif($1, o, n) Playlist } | hadd Y4 ontop $1
}

alias -l sclick_event { if ($1 == 0) { skip_track - }
  elseif ($1 == 1) { play_track }
  elseif ($1 == 2) { $iif($fmod(SOUND_IsPlaying), pause_track) }
  elseif ($1 == 3) { stop_track } | elseif ($1 == 4) { skip_track + }
  elseif ($1 isnum 5-6) { var %i, %d | if ($1 == 5) { %d = Playlist } | else { %d = Media }
    if (!$dialog(%d)) { dialog -md $+ $iif($hget(Y4, ontop), o) %d %d | %i = 1 | goto done } | did -a %d 2 page state
    if ($gettok($did(%d, 2), 3, 32) == normal) { did -a %d 2 hide | %i = 0 } | else { did -a %d 2 show | %i = 1 }
    :done
  draw_key $1 %i }
  elseif ($1 isnum 7-8) { var %h = $iif($1 == 7, random, continue), %i = $iif($hget(Y4, %h), 0, 1) | hadd Y4 %h %i }
}

dialog Media {
  title "Media Library"
  size $iif($hget(Y4, media_coords), $v1, -1 -1 400 200)
  option pixles
  list 1, -1 -1 0 0, size
  button "", 2, 0 0 0 0, hide
  edit "", 3, -1 -1 0 0
}

on *:dialog:Media:init:*: { mdx SetMircVersion $version | mdx MarkDialog $dname
  mdx SetDialog $dname style title tool | mdx SetDialog $dname bgcolor $rgb(30, 30, 50)
  mdx SetControlMDX $dname 1 ListView report rowselect showsel single nosortheader > $binary(views.mdx))
  mdx SetControlMDX $dname 2 Positioner size > $binary(dialog.mdx)
  did -i $dname 1 1 headerdims $iif($hget(Y4, media_dims), $v1, 150:1 150:2 150:3 0:4)
  did -i $dname 1 1 headertext $+(Title, $chr(9), Artist, $chr(9), Album) | did -i $dname 1 1 setbkg color $rgb(30, 30, 50)
  did -i $dname 1 1 settxt bgcolor $rgb(30, 30, 50) | did -i $dname 1 1 settxt color $rgb(0, 255, 0)
  mdx SetColor $dname 3 background $rgb(30, 30, 50) | mdx SetColor $dname 3 textbg $rgb(30, 30, 50)
  mdx SetColor $dname 3 text $rgb(0, 255, 0) | mdx SetFont $dname 1,3 12 500 Arial
  size_controls $dname | load_media
}

on *:dialog:Media:sclick:*: {
  if ($did == 1) { hadd -m Y4 media_selected $did($dname, 1).sel } | elseif ($did == 2) {
  tokenize 32 $did($dname, 2) | if ($1 == exitSizeMove) { size_controls $dname } }
}

on *:dialog:Media:dclick:1: { create_playlist $hget(Y1, $gettok($gettok($did($dname, 1).seltext, 4, 9), 5-, 32)) }

on *:dialog:Media:edit:3: { hadd Y4 filter $did($dname, 3) | .timerListFilter 1 2 media_filter $did($dname, 3)  }

alias -l media_filter {
  if (!$1) { hdel Y4 filter | var %i = $gettok($gettok($did(Media, 1).seltext, 4, 9), 5-, 32) | load_media | did -c Media 1 $didwm(Media, 1, * $+ %i) }
  else { in_function 1 | did -r Media 1 | did -b Media 3
    var %i = 1, %x = $+($chr(42) ,$replace($1-, $chr(32), $chr(42)), $chr(42)), %y = $hmatch(Y1, %x, 0).data, %z
    while ($hmatch(Y1, %x, %i).data) { $whilef
      did -a Media 1 0 + 0 0 0 $hget(Y1, $v1) | MircAmp_print Searching, $round($calc((%i / %y) * 100), 0) percent.
    inc %i  }
  did -e Media 3 | in_function 0 }
}

on *:dialog:Media:close:*: { hadd -m Y4 media_coords $dialog($dname).x $dialog($dname).y $calc($dialog($dname).w - 8) $calc($dialog($dname).h - 28)
  did -i $dname 1 1 page headerdims | hadd Y4 media_dims $gettok($did($dname, 1, 1), 3-, 32)
}

alias -l size_controls { if ($1 == Media) { mdx MoveControl $1 1 * * $calc($dialog($1).w - 3) $calc($dialog($1).h - 43)
  mdx MoveControl $1 3 -1 $calc($dialog($1).h - 44) $calc($dialog($1).w - 3) 21 }
  elseif ($1 == Playlist) { mdx MoveControl $1 1 * * $calc($dialog($1).w - 3) $calc($dialog($1).h - 23) }
}

dialog Playlist {
  title "Playlist"
  size $iif($hget(Y4, playlist_coords), $v1, -1 -1 200 200)
  option pixles
  list 1, -1 -1 0 0, size
  button "", 2, 0 0 0 0, hide
}

on *:dialog:Playlist:init:*: { mdx SetMircVersion $version | mdx MarkDialog $dname
  mdx SetDialog $dname style title tool | mdx SetDialog $dname bgcolor $rgb(30, 30, 50)
  mdx SetControlMDX $dname 1 ListView report rowselect showsel single nosortheader > $binary(views.mdx))
  mdx SetControlMDX $dname 2 Positioner size > $binary(dialog.mdx)
  did -i $dname 1 1 headerdims $iif($hget(Y4, playlist_dims), $v1, 150:1 70:2)
  did -i $dname 1 1 headertext $+(Title, $chr(9), Length) | did -i $dname 1 1 setbkg color $rgb(30, 30, 50)
  did -i $dname 1 1 settxt bgcolor $rgb(30, 30, 50) | did -i $dname 1 1 settxt color $rgb(0, 255, 0)
  mdx SetFont $dname 1 12 500 Arial | size_controls $dname | load_playlist
}

on *:dialog:Playlist:sclick:*: {
  if ($did == 2) { tokenize 32 $did($dname, 2) | if ($1 == exitSizeMove) { size_controls $dname } }
}

on *:dialog:Playlist:dclick:1: { skip_track $calc($did($dname, 1).sel - 1) }

on *:dialog:Playlist:close:*: { hadd -m Y4 playlist_coords $dialog($dname).x $dialog($dname).y $calc($dialog($dname).w - 8) $calc($dialog($dname).h - 28)
  did -i $dname 1 1 page headerdims | hadd Y4 playlist_dims $gettok($did($dname, 1, 1), 3-, 32)
}

alias -l load_media { if (!$dialog(Media)) { return } | did -r Media 1 | var %f = $hashs(X6), %i = $hget(Y4, media_selected)
  if ($isfile(%f)) { if ($hget(Y4, filter)) { var %i = $v1 | media_filter %i | did -a Media 3 %i }
  else { loadbuf $lines(%f) -o Media 1 %f | if ($did(Media, 1, %i)) { did -c Media 1 %i } } }
  elseif ($input(No files have been added. Do so now?, y)) { add_media }
}

alias -l add_media {
  var %d = $$sdir($iif($hget(Y4, last_dir), $v1, $mircdir), Please select your music directory $+ $chr(44) all subfolders will be scanned), %i, %x = $iif($version < 6.17, *, *.mp3;*.wma;*.ogg;*.wav)
  hadd -m Y4 last_dir %d | in_function 1
  if ($hget(Y1) && $input(Clear library?, y)) { hfree Y1 | write -c $hashs(X6) }
  set %i_ 1 | set %x_ $findfile(%d, %x, 0)
  %i = $findfile(%d, %x, 0, add_file $1-)
  unset %x_ | unset %i_ | if (%i) { hsave -o Y1 $hashs(X1) | hsave -o Y5 $hashs(X5) }
  MircAmp_print %i files processed, done. | .timerLoadMedia 1 1 load_media | in_function 0
}

alias -l add_file { $whilef | var %f = $1-
  if ($regex(%f, (mp3|wma|ogg|wav)$)) { tokenize 32 $+($title(%f), $chr(9), $iif($sound(%f).artist, $v1, No tag.), $chr(9), $iif($sound(%f).album, $v1, No tag.), $chr(9), $shortfn(%f))
    hadd -m Y1 $shortfn(%f) $1-
    hadd -m Y5 $shortfn(%f) $+($sound(%f).bitrate, $chr(1), $sound(%f).vbr, $chr(1), $gettok($duration($calc($sound(%f).length / 1000), 3), 2-, 58))
  write $hashs(X6) 0 + 0 0 0 $1-  }
  MircAmp_print Hashing files, $round($calc((%i_ / %x_) * 100), 0) percent.
  inc %i_
}

alias -l MircAmp_print { $whilef | drawrect -nfr @MircAmp $rgb(0,0,0) 1 109 23 157 13 | drawtext -c @MircAmp 9 Arial 9 109 23 157 13 $1- }

alias -l set_method { hadd Y4 playlist_method $1 }

alias -l title { if ($hget(Y1, $1)) { return $gettok($v1, 1, 9) }
  else { tokenize 32 $+(", $longfn($1-), ") | if ($sound($1-).title) { return $v1 }
  else { return $left($remove($replace($nopath($1-), _, $chr(32), -, $chr(32)), $chr(40), $chr(41), 1, 2, 4, 5, 6, 7, 8, 9, 0), -4) } }
}

alias -l create_playlist { if ($hget(Y2)) { hfree $v1 } | in_function 1
  var %m = $iif($hget(Y4, playlist_method), $v1, 1), %c = $gettok($1-, 4, 9)
  :retry
  if (%m == 1) { tokenize 32 $nofile($gettok($1-, 4, 9)) } | elseif (%m == 2) { tokenize 32 $gettok($1-, 2, 9) }
  elseif (%m == 3) { tokenize 32 $gettok($1-, 3, 9) } | if (!$1- == No tag.) { %m = 1 | goto retry }
  elseif (!$1) { echo 4 -a Hash/file error. | return } | tokenize 32 $+(*, $1-, *)
  var %i = 1, %t  = $hmatch(Y1, $1-, 0).data, %fmod | window -slh @SortTemp
  while (%i <= %t) { $whilef | aline @SortTemp $hmatch(Y1, $1-, %i).data
    MircAmp_print Creating playlist. $round($calc((%i / (%t * 2)) * 100), 0) percent. | inc %i
  }
  %i = 1 | while ($line(@SortTemp, %i)) {
    if ($v1 == %c) { hadd -m Y2 current_track %i } | hadd -m Y2 Track $+ %i $v1
    MircAmp_print Creating playlist. $round($calc(((%t + %i)  / (%t * 2)) * 100), 0) percent. | inc %i
  } | hadd -m Y2 total_tracks $calc(%i - 1) | window -c @SortTemp
  in_function 0 | load_playlist | play_track | MircAmp_print $calc(%i - 1) tracks, done.
}

alias -l load_playlist { if (!$dialog(Playlist)) { return }
  did -r Playlist 1 | var %i = 1, %f, %l, %t
  while ($hget(Y2, Track $+ %i)) { $whilef | %f = $v1
    did -a Playlist 1 $+(0 + 0 0 0 $title(%f), $chr(9), $gettok($hget(Y5, %f), 3, 1))
  inc %i } | set_playlist
}

alias -l set_playlist { if ($dialog(Playlist)) { %i = $calc($hget(Y2, current_track) + 1) | if ($did(Playlist, 1, %i)) { did -c Playlist 1 %i } } }

alias -l fmod_open { if ($fmod(FMOD_Connect, $binary(fmod.dll))) {
    if ($fmod(SOUND_Init,44100 64 0)) { vis_open }
  else { echo -s Fmod: error } }
}

alias -l fmod_close { vis_stop | fmod SOUND_Close | dll -u fmod_mIRC.dll }

alias -l vis_open {
  fmod Plugin_Load 0 $+(", $binary(plugins\fmm_vis_spectrum.dll), ")
  fmod Plugin_Load 1 $+(", $binary(plugins\fmm_vis_oscilloscope.dll), ")
  fmod Plugin_Load 2 $+(", $binary(plugins\fmm_vis_spectrum2.dll), ")
}

alias vis_close { fmod Plugin_UnLoad 0 | fmod Plugin_UnLoad 1 | fmod Plugin_UnLoad 2 }

alias vis_start {
  vis 0 Set_Dim 12 23 91 28 | vis 0 Set_Bgbmp $bitmap(VisBg)
  vis 0 Set_Barwidth 1 | vis 0 Set_NumColors 60
  vis 0 Set_Barspace 0 | vis 0 Set_BounceRate 5.0
  vis 0 Set_Avg 10 | vis 0 Set_CShift 0
  vis 1 Set_Dim 12 23 91 28 | vis 1 Set_Bgbmp $bitmap(VisBg)
  vis 1 Set_NumColors 60 | vis 1 Set_NumFades 3
  vis 1 Set_BounceRate 2.0 | vis 1 Set_YSpace_Every 0
  vis 1 Set_YSpace_Height 0 | vis 2 Set_Dim 153 4 43 6
  vis 2 Set_Bgcolor 0/0/0 | vis 2 Set_Barwidth 1
  vis 2 Set_Color 0 0/255/0 | vis 2 Set_NumColors 1
  vis 2 Set_Barspace 0 | vis 2 Set_BounceRate 5.0
  vis 2 Set_Avg 10 | vis 2 Set_CShift 0
  var %i = 0, %x = 250, %y = 0, %z = 10
  while (%i <= 60) { $whilef
    vis 0 Set_Color %i $+(%x, /, %y, /, %z)
    vis 1 Set_Color %i $+(%x, /, %y, /, %z)
    dec %x 4 | inc %y 4 | inc %i
  }
  vis_switch
}

alias -l vis_stop { vis 0 Spectrum 0 | vis 1 Oscilloscope 0 }

alias -l vis_switch {
  if ($hget(Y4, vis_type) == 1) {
    vis 0 Spectrum 0
  vis 1 Oscilloscope 1 1 @MircAmp 25 }
  else {
    vis 1 Oscilloscope 0
    vis 0 Spectrum 1 1 @MircAmp 25
  }
}

alias -l play_track { var %i = $hget(Y2, current_track), %f = $hget(Y2, Track $+ %i)
  if (%f) { fmod SOUND_Stream_Close 1
    fmod SOUND_Stream_Open 1 $+(", %f, ") | fmod SOUND_Stream_Play 1 | if ($hget(Y4, volume)) { fmod SOUND_SetVolume 0 $v1 }
    if ($hget(Y4, continue)) { fmod SOUND_Stream_SetEndCallback 1 skip_track }
    tokenize 1 $hget(Y5, %f) | hadd Y4 track_info $fmod(SOUND_Stream_GetLength,1) $1 $2 $3 $shortfn(%f)
  display_info %f $1- | update_display | set_playlist }
}

alias skip_track { if (!$hmatch(Y2, Track*).item) { return }
  var %i, %x = hadd -m Y2 current_track, %y = $hget(Y2, current_track), %z = $hget(Y2, total_tracks)
  if ($1 isnum) { %x $1 }
  elseif ($1 == -) { %i = $calc(%y - 1) | if (%i >= 1) { %x %i } | else { %x %z  } }
  else { if ($hget(Y4, random)) { %x $rand_track }
  else { %i = $calc(%y + 1) | if (%i <= %z) { %x %i } | else { %x 1 } } }
  if ($hget(Y4, volume_fade)) { volume_fade } | play_track
}

alias rand_track { var %i, %t = $hget(Y2, total_tracks)
  :top
  %i = $rand(1, %t)
  if (!$hget(Y2, Played $+ %i)) { hadd Y2 Played $+ %i 1 | return %i }
  elseif ($hmatch(Y2, Played*, 0).item < %t) { goto top } | else { hdel -w Y2 Played* | goto top }
}

alias pause_track {
  if (!$fmod(SOUND_GetPaused)) { fmod SOUND_SetPaused -3 1 | draw_key 2 1 }
  else { fmod SOUND_SetPaused -3 0 | draw_key 2 0 } | halt
}

alias -l stop_track { if ($fmod(SOUND_IsPlaying)) { fmod SOUND_Stream_Close 1 } | hadd -m Y4 display_string Not Playing... }

alias -l display_info { var %w = @MircAmp, %f = $1
  if (%f) {
    if ($hget(Y3, %f)) { hinc Y3 %f } | else { hadd -m Y3 %f 1 }
    drawrect -nfr %w $rgb(0,0,0) 1 111 41 16 9 | drawtext -nc @MircAmp 9 Arial 9 111 40 18 10 $2
    drawrect -nfr %w $rgb(0,0,0) 1 155 40 12 10 | drawtext -nc @MircAmp 9 Arial 9 155 40 12 10 $left($fmod(SOUND_GetFrequency, 1), 2)
    tokenize 9 $hget(Y1, $1) | tokenize 32 $replace($+($1, $chr(32), $chr(164), $chr(32), $iif($2 != No tag., $+($v1, $chr(32), $chr(164), $chr(32))), $iif($3 != No tag., $+($v1, $chr(32), $chr(164), $chr(32))), $iif($gettok($hget(Y4, track_info), 2, 32), $+(Vbr, $chr(32), $chr(164), $chr(32))), $chr(1), 1), $chr(32), $chr(160))
    if ($width($1-, Arial, 9) > 150) { hadd Y4 display_string $+($1-, $chr(1), $gettok($hget(Y4, display_string), 2, 1)) }
    else { hadd Y4 display_string $1- } | drawdot %w
  }
  else { MircAmp_Print File not found. }
}

alias -l update_display {
  if ($window(@MircAmp)) { .timerUpdateDisplay 1 1 update_display $1- }
  else { return }
  if ($in_function) { return }
  draw_scroll $iif($fmod(SOUND_IsPlaying), $fmod(SOUND_Stream_GetPosition,1) $gettok($hget(Y4, track_info), 1, 32))
  if ($hget(Y4, display_string)) { tokenize 1 $v1
    if ($3) { var %i = $2 | if (%i < $len($1)) { inc %i } | else { %i = 1 }
    hadd Y4 display_string $+($1, $chr(1), %i, $chr(1), 1) | MircAmp_print $right($1, - $+ %i) $+ $left($1, %i) }
  else { MircAmp_print $left($1, -2) } }
  else { hadd -m Y4 display_string $+(Welcome to MircAmp v1.0 by talim., $chr(32), $chr(1), 1) }
}

alias -l update_display2 {
  if ($window(@MircAmp)) { .timerUpdateDisplay2 1 1 update_display2 $1- }
  draw_scroll2 $iif($fmod(SOUND_IsPlaying), $fmod(SOUND_Stream_GetPosition,1) $gettok($hget(Y4, track_info), 1, 32))
}

alias -l volume_fade { if ($fmod(SOUND_IsPlaying)) {
    var %x = $fmod(SOUND_GetVolume,1), %y = %x
    while (%y) { $whilef | dec %y 0.05
    if ($chr(46) !isin %y) { fmod SOUND_SetVolume 0 %y } }
    stop_track | fmod SOUND_SetVolume 0 %x
  }
}

alias -l playlist_tracks { if ($1 == 1) { return - } | var %x
  tokenize 32 $calc($1 - 1) | if ($1 == $hget(Y2, current_track)) { %x = $style(1) }
  if ($hget(Y2, Track $+ $1)) { return %x $title($v1) : skip_track $1 } | else { return - }
}

alias -l fave_tracks { if ($1 == begin) { var %i = $hget(Y4,min_play)
  set %pattern $+([, $str(0, $calc(3 - $len(%i))), %i, -999]) | return - }
  elseif ($hfind(Y3, %pattern, $1, r).data) { var %f = $v1
    return $title(%f) $+ $chr(44) played $hget(Y3, %f) times. : create_playlist $hget(Y1, %f)
  } | else { unset %pattern | return - }
}

alias np { if ($status == connected && $window(@mircamp)) { msg $active $part_1 $part_2 } }
alias -l part_1 { tokenize 160 Now Playing: $+($left($gettok($hget(Y4, display_string), 1, 1), -9), 08) $chr(164) | var %i = 1, %s | while ($gettok($1-, %i, 32)) { %s = $v1 | tokenize 32 $reptok($1-, %s, $+(08, $left(%s, 1), 14, $right(%s, -1)), 1, 32) | inc %i } | return $1- }
alias -l part_2 { tokenize 32 $hget(Y4, track_info) | return $+(08, 14, $4 08, $chr(164), 14 $2, kbps, 08) }

alias -l in_function { if ($isid) { return $hget(Y4, in_function) }
  else { if ($1) { hadd Y4 in_function $true | vis_stop } | else { hdel Y4 in_function | vis_switch } }
}

on *:start: { var %i = 1
  while (%i <= 5) { if ($isfile($hashs(X $+ %i))) { hmake Y $+ %i | hload Y $+ %i $hashs(X $+ %i) }
  inc %i } | fmod_open | MircAmp_Open
}

on *:exit: { window -c @MircAmp | var %i = 2
  while (%i <= 4) { if ($hget(Y $+ %i)) { hsave Y $+ %i $hashs(X $+ %i) }
  inc %i } | fmod_close
}

on *:active:@MircAmp: { if ($dialog(Media)) { dialog -v $v1 } | if ($dialog(Playlist)) { dialog -v $v1 } | window -a @MircAmp }

on *:close:@MircAmp: { mircamp_close }

alias -l bitmap { return $shortfn($+(", $scriptdirBitmap, \, $1, .bmp")) }
alias -l binary { return $shortfn($+(", $scriptdirBinary, \, $1, ")) }
alias -l hashs { return $+(", $scriptdirHash, \, $1, ") }
alias -l whilef { var %dll = $binary(whilefix.dll) | dll %dll WhileFix }
alias -l mdx { var %dll = $binary(mdx.dll) | return $dll(%dll, $1, $2-) }
alias -l fmod { var %dll = $binary(fmod_mIRC.dll) | if ($isid) { return $dll(%dll, $1, $2-) } | else { dll %dll $1 $2- } }
alias -l vis { fmod Plugin_Send $1- }

alias -l size_click { var %w = @MircAmp
  if ($hget(Y4, state) != minimized) { hadd Y4 state minimized | drawpic -c %w 0 0 0 16 275 15 $bitmap(TitleBar)
    var %i = 0 | while (%i <= 5) { draw_key_c %i 0 | inc %i } | vis_stop | vis 2 Spectrum 1 1 @MircAmp 25
  window %w $window(%w).x $window(%w).y $window(%w).w 15 | .timerUpdateDisplay off | update_display2 }
  else { hadd Y4 state normal | drawpic -c %w 0 0 0 0 275 15 $bitmap(TitleBar) | vis 2 Spectrum 0 | vis_switch
  window %w $window(%w).x $window(%w).y $window(%w).w 102 | .timerUpdateDisplay2 off | update_display }
}