host = $h; $this->port = $p; $this->password = $pw; } // HttpQPlayer /** * add * append a song to the playlist * $name Name to be shown in the playlist * $url URL of the song */ function add($name, $url) { $args['name'] = urlencode($name); $args['url'] = urlencode($url); $results = $this->sendCommand('playurl', $args); if ($results == '0') { $results = null; } return $results; } // add /** * version * This gets the version of winamp currently * running, use this to test for a valid connection */ function version() { $args = array(); $results = $this->sendCommand('getversion',$args); // a return of 0 is a bad value if ($results == '0') { $results = null; } return $results; } // version /** * clear * clear the playlist */ function clear() { $args = array(); $results = $this->sendCommand("delete", $args); if ($results == '0') { $results = null; } return $results; } // clear /** * next * go to next song */ function next() { $args = array(); $results = $this->sendCommand("next", $args); if ($results == '0') { return null; } return true; } // next /** * prev * go to previous song */ function prev() { $args = array(); $results = $this->sendCommand("prev", $args); if ($results == '0') { return null; } return true; } // prev /** * skip * This skips to POS in the playlist */ function skip($pos) { $args = array('index'=>$pos); $results = $this->sendCommand('setplaylistpos',$args); if ($results == '0') { return null; } return true; } // skip /** * play * play the current song */ function play() { $args = array(); $results = $this->sendCommand("play", $args); if ($results == '0') { $results = null; } return $results; } // play /** * pause * toggle pause mode on current song */ public function pause() { $args = array(); $results = $this->sendCommand("pause", $args); if ($results == '0') { $results = null; } return $results; } // pause /** * stop * stops the current song amazing! */ public function stop() { $args = array(); $results = $this->sendCommand('stop', $args); if ($results == '0') { $results = null; } return $results; } // stop /** * repeat * This toggles the repeat state of HttpQ */ public function repeat($value) { $args = array('enable'=>$value); $results = $this->sendCommand('repeat',$args); if ($results == '0') { $results = null; } return $results; } // repeat /** * random * this toggles the random state of HttpQ */ public function random($value) { $args = array('enable'=>$value); $results = $this->sendCommand('shuffle',$args); if ($results == '0') { $results = null; } return $results; } // random /** * delete_pos * This deletes a specific track */ function delete_pos($track) { $args = array('index'=>$track); $results = $this->sendCommand('deletepos',$args); if ($results == '0') { $results = null; } return $results; } // delete_pos /** * state * This returns the current state of the httpQ player */ function state() { $args = array(); $results = $this->sendCommand('isplaying',$args); if ($results == '1') { $state = 'play'; } if ($results == '0') { $state = 'stop'; } if ($results == '3') { $state = 'pause'; } return $state; } // state /** * get_volume * This returns the current volume */ function get_volume() { $args = array(); $results = $this->sendCommand('getvolume',$args); if ($results == '0') { $results = null; } else { /* Need to make this out of 100 */ $results = round((($results / 255) * 100),2); } return $results; } // get_volume /** * volume_up * This increases the volume by Wimamp's defined amount */ function volume_up() { $args = array(); $results = $this->sendCommand('volumeup',$args); if ($results == '0') { return null; } return true; } // volume_up /** * volume_down * This decreases the volume by Winamp's defined amount */ function volume_down() { $args = array(); $results = $this->sendCommand('volumedown',$args); if ($results == '0') { return null; } return true; } // volume_down /** * set_volume * This sets the volume as best it can, we go from a resolution * of 100 --> 255 so it's a little fuzzy */ function set_volume($value) { // Convert it to base 255 $value = $value*2.55; $args = array('level'=>$value); $results = $this->sendCommand('setvolume',$args); if ($results == '0') { return null; } return true; } // set_volume /** * clear_playlist * this flushes the playlist cache (I hope this means clear) */ function clear_playlist() { $args = array(); $results = $this->sendcommand('flushplaylist',$args); if ($results == '0') { return null; } return true; } // clear_playlist /** * get_repeat * This returns the current state of the repeat */ function get_repeat() { $args = array(); $results = $this->sendCommand('repeat_status',$args); return $results; } // get_repeat /** * get_random * This returns the current state of shuffle */ function get_random() { $args = array(); $results = $this->sendCommand('shuffle_status',$args); return $results; } // get_random /** * get_now_playing * This returns the file information for the currently * playing song */ function get_now_playing() { // First get the current POS $pos = $this->sendCommand('getlistpos',array()); // Now get the filename $file = $this->sendCommand('getplaylistfile',array('index'=>$pos)); return $file; } // get_now_playing /** * get_tracks * This returns a delimiated string of all of the filenames * current in your playlist */ function get_tracks() { // Pull a delimited list of all tracks $results = $this->sendCommand('getplaylistfile',array('delim'=>'::')); if ($results == '0') { $results = null; } return $results; } // get_tracks /** * sendCommand * This is the core of this library it takes care of sending the HTTP * request to the HttpQ server and getting the response */ private function sendCommand($cmd, $args) { $fp = fsockopen($this->host, $this->port, $errno, $errstr); if(!$fp) { debug_event('httpq',"HttpQPlayer: $errstr ($errno)",'1'); return null; } // Define the base message $msg = "GET /$cmd?p=$this->password"; // Foreach our arguments foreach ($args AS $key => $val) { $msg = $msg . "&$key=$val"; } $msg = $msg . " HTTP/1.0\r\n\r\n"; fputs($fp, $msg); $data = ''; while(!feof($fp)) { $data .= fgets($fp); } fclose($fp); // Explode the results by line break and take 4th line (results) $data = explode("\n",$data); $result = $data['4']; return $result; } // sendCommand } // End HttpQPlayer Class ?>