A simple Mp3 player I have been working while taking on other script projects. This is still in its Beta stage so any comments or suggestions would be extremely appreciated.
Use: Type /mp3 -> Choose: button
alias mp3.length {
var %mp3.len $int($calc($1 / 1000))
var %mp3.min $int($calc(%mp3.len / 60))
var %mp3.sec $calc(%mp3.len - (%mp3.min * 60))
if (%mp3.min < 10) { set %mp3.min 0 $+ %mp3.min }
if (%mp3.sec < 10) { set %mp3.sec 0 $+ %mp3.sec }
set %mp3.len %mp3.min $+: $+ %mp3.sec
return %mp3.len
}
alias mp3.entry {
var %mp3.entry
if (.wav isin $longfn($1)) {
set %mp3.entry $nopath($longfn($1))
set %mp3.entry $remove(%mp3.entry,.,wav)
set %mp3.entry %mp3.entry - WAVE File
return %mp3.entry
}
if (.mid isin $longfn($1)) {
set %mp3.entry $nopath($longfn($1))
set %mp3.entry $remove(%mp3.entry,.,mid)
set %mp3.entry %mp3.entry - MIDI File
return %mp3.entry
}
if (.mp3 isin $1) {
set %mp3.entry $mp3($1).artist - $mp3($1).title
}
if (.mp3 isin $1) && ($mp3($1).artist == $null) || ($mp3($1).title == $null) {
set %mp3.entry $remove($nopath($longfn($1)),.mp3)
}
return %mp3.entry
}
alias mp3.play {
if (!$dialog(mp3)) { return }
if (%mp3.pause == 1) { goto proceed }
.timermp3 off
if ($1) || ($exists($1)) {
set %mp3.file $1
goto playfile
}
if (!%mp3.file) { return }
:playfile
if (.mp3 !isin %mp3.file) { did -b mp3 5,9 }
else { did -e mp3 5,9 }
splay %mp3.file
unset %mp3.pause
.timermp3 0 1 mp3.position
did -ra mp3 2 $mp3.entry(%mp3.file)
did -ra mp3 3 00:00 / $gmt($mp3.length($mp3(%mp3.file).length),nn:ss)
return
:proceed
splay resume
did -e mp3 7
set %mp3.pause 0
.timermp3 0 1 mp3.position
did -ra mp3 4 $sound($insong).album
}
alias mp3.eject {
set %mp3.file $file="Please Select A Media File ..." "C:\*.*"
if (!%mp3.file) { return }
set %mp3.file $shortfn(%mp3.file)
if ($dialog(mp3)) {
did -ra mp3 2 $mp3.entry(%mp3.file)
did -ra mp3 3 00:00 / $mp3.length($mp3(%mp3.file).length)
}
return %mp3.file
}
alias mp3.stop {
.timermp3 off
splay -p stop
splay -w stop
splay -m stop
unset %mp3.pause
did -ra mp3 3 $mp3.length($inmp3.pos) / $mp3.length($mp3(%mp3.file).length)
}
alias mp3.pause {
if (!$inmp3) { return }
splay pause
set %mp3.pause 1
.timermp3 off
did -b mp3 7
}
alias mp3.seek {
if (!$inmp3) || (!$1) || (!$dialog(mp3)) { return }
var %mp3.sfactor 10
if ($1 = back) {
var %mp3.seek $calc($inmp3.pos - (%mp3.sfactor * 1000))
if (%mp3.seek < 0) { return }
goto seek
}
if ($1 = skip) {
var %mp3.seek $calc($inmp3.pos + (%mp3.sfactor * 1000))
if (%mp3.seek > $inmp3.length) { return }
goto seek
}
:seek
splay seek %mp3.seek
did -ra mp3 3 $gmt($mp3.length($inmp3.pos),nn:ss) / $gmt($mp3.length($mp3(%mp3.file).length),nn:ss)
return
}
alias mp3.position { if ($dialog(mp3)) did -ra mp3 3 $gmt($mp3.length($inmp3.pos),nn:ss) / $gmt($mp3.length($mp3(%mp3.file).length),nn:ss) }
dialog mp3 {
title "Mp3 player"
size -1 -1 127 39
option dbu
box "", 1, -3 -3 300 4
text "", 2, 3 4 150 7
text "", 3, 84 14 39 8
button "<|", 5, 3 25 12 11
button "||>", 6, 17 25 12 11
button "||", 7, 31 25 12 11
button "[[]]", 8, 45 25 12 11
button "|>", 9, 59 25 12 11
button "Choose:", 10, 73 25 25 11
check "Repeat", 11, 100 25 24 11, push
button "", 12, 0 0 0 0, cancel
text "", 4, 3 14 70 8
}
alias mp3 { if (!$dialog(mp3)l) dialog -md mp3 mp3 }
On *:DIALOG:mp3:init:0:{
if (%mp3.file) { did -ra mp3 2 $mp3.entry(%mp3.file) }
}
On *:DIALOG:mp3:sclick:5:{ mp3.seek back }
On *:DIALOG:mp3:sclick:6:{ mp3.play }
On *:DIALOG:mp3:sclick:7:{ mp3.pause }
On *:DIALOG:mp3:sclick:8:{ mp3.stop }
On *:DIALOG:mp3:sclick:9:{ mp3.seek skip }
On *:DIALOG:mp3:sclick:10:{ .timer 1 0 mp3.eject }
On *:DIALOG:mp3:sclick:12:{ splay stop }
On *:MP3END:{ if ($dialog(mp3)) && ($did(mp3,11).state == 1) { mp3.play } }
On *:WAVEEND:{ if ($dialog(mp3)) && ($did(mp3,11).state == 1) { mp3.play } }
On *:MIDIEND:{ if ($dialog(mp3)) && ($did(mp3,11).state == 1) { mp3.play } }
uh, its has shit loads of bugs.
And it needs lots and lots of improvements... Try using a few more functions, use -b/e switches to disable and enable functions.
The pause function acually stops the song, and doesnt play.
There\'s no really seek function, imho, its a good starter, but not even close to good, sorry buddy.
Also, /player returns an error if the dialog is already open, use $iif.