Daniel Schroeder
Copyright © 2007 Daniel Schroeder
klipfolio@schroeder-daniel.de
http://www.schroeder-daniel.de
Winamp Controller
winamp_controller_091079
1.1.2
2007.06.16:1904
Control a local or remote Winamp from inside this Klip. Features: Play, Pause, Stop, Next Track, Previous Track, Volume control, displays current track and whole paylist. Click on an item to play. Requires the httpQ-Plugin for Winamp: http://httpq.sourceforge.net/
winamp controller control remote
http://klipfolio.schroeder-daniel.de/winamp/icons/icon.gif
http://www.klipfolio.com/download/kid-6650/winamp_controller.klip
http://klipfolio.schroeder-daniel.de/winamp/icons/banner.gif
1
--
true
Can't connect to Winamp. Start the httpQ-Plugin in Winamp and/or enter the correct connection details in klip setup.
1) {
for(var i=Items.length;i>0;i--) {
Items.remove(i,true);
}
}
//display controls
if(Items.length==0) {
var food = "\
0\
"+image_pause+"\
"+image_prev+"\
"+image_stop+"\
"+image_next+"\
"+image_speaker+"\
"+image_wave1+"\
"+image_wave2+"\
"+image_wave3+"\
"+image_wave4+"\
"+image_wave5+"\
"+image_play+"\
"+image_pause+"\
";
var styles = "control {type:item; definition: 'prev,play,stop,next,speaker,wave1,wave2,wave3,wave4,wave5,playdesc,pausedesc,order'}\
prev { itemcol: 1; type: image; noterow: 1; label: \"Jump to previous track\"; }\
play { itemcol: 2; type: image;}\
playdesc { type: image; noterow: 2; label: \"Play current track\"}\
pausedesc { type: image; noterow: 3; label: \"Pause current track\"}\
stop { itemcol: 3; type: image; noterow: 4; label: \"Stop playback\"; }\
next { itemcol: 4; type: image; noterow: 5; label: \"Jump to next track\"; }\
speaker { itemcol: 5; type: image; }\
wave1 { itemcol: 6; type: image; noterow: 6; label: \"Mute\"; }\
wave2 { itemcol: 7; type: image; noterow: 7; label: \"Volume level 25%\"; }\
wave3 { itemcol: 8; type: image; noterow: 8; label: \"Volume level 50%\"; }\
wave4 { itemcol: 9; type: image; noterow: 9; label: \"Volume level 75%\"; }\
wave5 { itemcol: 10; type: image; noterow: 10; label: \"Volume level 100%\"; }\
order { type: text; }";
Engines.KlipFood.stylesheet = styles;
Engines.KlipFood.process(food);
Engines.KlipFood.stylesheet = "@import klip";
}
//display playlist items
var delimiter="!delim!";
var req=Engines.HTTP.newRequest("http://"+ip+":"+port+"/getplaylisttitle?p="+password+"&delim="+delimiter);
req.send();
var list=req.response.data.split(delimiter);
var food="";
currentTrack=Prefs.title.match(/^[0-9]*/);
for(var i=0;i"+(i+1)+""+list[i]+"";
if(currentTrack==i+1)
food+=""+image_play+"";
food+="";
}
if(food.length) {
Engines.KlipFood.process(food);
Items.sort(sortItems);
}
//check playing-staus
var req=Engines.HTTP.newRequest("http://"+ip+":"+port+"/isplaying?p="+password);
req.send();
if(req.response.data=="1") {
Items[0].setData("play", image_pause);
playing=true;
}
else {
Items[0].setData("play", image_play);
playing=false;
}
//setting refresh rate so the Klip reloads as soon as Winamp is playing the next track
if(playing) {
var req=Engines.HTTP.newRequest("http://"+ip+":"+port+"/getoutputtime?p="+password+"&frmt=1");
req.send();
var track_length=req.response.data*1000;
var req=Engines.HTTP.newRequest("http://"+ip+":"+port+"/getoutputtime?p="+password+"&frmt=0");
req.send();
var track_pos=req.response.data*1;
playingtime=track_pos;
if(timer)
destroyTimer(timer);
timer_skip=true;
timer=createTimer(track_length-track_pos);
timer.onTick = tick;
}
else {
if(timer)
destroyTimer(timer);
timer=false;
}
return true;
}
function tick() {
if(timer_skip) {
timer_skip=false;
return;
}
if(timer)
destroyTimer(timer);
timer=false;
Klip.requestRefresh();
}
function updatePlayingtime() {
if(playing) {
playingtime+=1000;
var minutes = Math.floor(playingtime / 60 /1000)
var seconds = Math.floor(playingtime / 1000 - minutes * 60);
if(minutes.length==1)
minutes = "0" + minutes;
if(seconds<10)
seconds = "0" + seconds;
Items.status=minutes + ":" + seconds;
Items.statusvisible=true;
}
}
function myCreate(item) {
item.canpurge = false;
item.canvisit = false;
item.autoremove = false;
item.candelete = false;
item.onClick = processClick;
return true;
}
function myUpdate(old_item, properties) {
return(myCreate(properties));
}
function processClick(index, style) {
if(index>0) {
nextTrack=index-1;
command="jump";
}
else
command=style;
if(command=="speaker")
return;
Klip.requestRefresh();
}
function sortItems(item1, item2) {
if(item1.getData("order")-0 < item2.getData("order")-0)
return -1;
else
return 1;
}
]]>