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"+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; } ]]>