Mega Code Archive

 
Categories / Delphi / Games
 

Winamp api

unit WinampApi; interface uses Windows,Messages,Classes,SysUtils; type TWinampApi = class private WinampHnd : THandle; function ConvertTime(n: integer;m : integer): string; function ConvertTimeTool(n: integer): string; function split(seperator: Char; text: String; var list: TStringList): Integer; public WinampPath : String; SongLengthParseTime : Boolean; SongPosParseTime : Boolean; constructor Create(WPath : String); function getWhatsPlaying():String; function getSongState():String; function getSongPosition():String; function getSongLength():String; function getSongSampleRate():String; function getSongBitRate():String; function getSongChannels():String; function getPlayListPosition():String; function getPlayListLength():String; procedure getPlayList(var PlayList:TStringList;var FileList:TStringList); procedure PlaySong(Mp3Name:string); procedure AddToPlayList(Mp3Name:string); procedure Play(); procedure Stop(); procedure Pause(); procedure NextTrack(); procedure PreviousTrack(); procedure Forward5Seconds(); procedure Back5Seconds(); procedure StartOfPlayList(); procedure VolumeUp(); procedure VolumeDown(); procedure FadeOutStop(); end; implementation { ----- PUBLIC VOID/NULL RETURN METHODS ---- } constructor TWinampApi.Create(WPath : String); begin SongLengthParseTime := False; SongPosParseTime := False; WinampPath := WPath; WinampHnd := FindWindow(\'Winamp v1.x\', nil); end; procedure TWinampApi.PlaySong(Mp3Name:String); begin WinExec(PChar(\'\"\'+WinampPath+\'\\winamp.exe\" \"\'+Mp3Name+\'\"\'),SW_SHOW); end; procedure TWinampApi.AddToPlayList(Mp3Name:String); begin WinExec(PChar(\'\"\'+WinampPath+\'\\winamp.exe\" /ADD \"\'+Mp3Name+\'\"\'),SW_SHOW); end; procedure TWinampApi.Play(); begin SendMessage(WinampHnd, WM_COMMAND, 40045, 0); end; procedure TWinampApi.Stop(); begin SendMessage(WinampHnd, WM_COMMAND, 40047, 0); end; procedure TWinampApi.Pause(); begin SendMessage(WinampHnd, WM_COMMAND, 40046, 0); end; procedure TWinampApi.NextTrack(); begin SendMessage(WinampHnd, WM_COMMAND, 40048, 0); end; procedure TWinampApi.PreviousTrack(); begin SendMessage(WinampHnd, WM_COMMAND, 40044, 0); end; procedure TWinampApi.Forward5Seconds(); begin SendMessage(WinampHnd, WM_COMMAND, 40148, 0); end; procedure TWinampApi.Back5Seconds(); begin SendMessage(WinampHnd, WM_COMMAND, 40144, 0); end; procedure TWinampApi.StartOfPlayList(); begin SendMessage(WinampHnd, WM_COMMAND, 40154, 0); end; procedure TWinampApi.VolumeUp(); begin SendMessage(WinampHnd, WM_COMMAND, 40058, 0); end; procedure TWinampApi.VolumeDown(); begin SendMessage(WinampHnd, WM_COMMAND, 40059, 0); end; procedure TWinampApi.FadeOutStop(); begin SendMessage(WinampHnd, WM_COMMAND, 40147, 0); end; function TWinampApi.getWhatsPlaying():String; var TitleLen: integer; TempInt : Integer; TempStr: String; begin TempStr := \'Winamp isn\'\'t running\'; if WinampHnd <> 0 then begin // Get wHnd text TitleLen := GetWindowTextLength(WinampHnd)+2; SetLength(TempStr,TitleLen); GetWindowText(WinampHnd,Pchar(TempStr),TitleLen); SetLength(TempStr,Length(TempStr)); // Remove \'- Winamp\' part TempInt := Pos(\'- Winamp\',TempStr); TempStr := Copy(TempStr,0,TempInt -2); // Knock of space and - end; result := TempStr; end; procedure TWinampApi.getPlayList(var PlayList:TStringList;var FileList:TStringList); var Buffer: string; Stream: TFileStream; FileStr : String; TempList : TStringList; TempListLen : Integer; TempStr,TempStr2 : String; TempPos,TempPos2 : Integer; i : Integer; begin SendMessage(WinampHnd,WM_USER,0,120); Stream := TFileStream.Create(WinampPath+\'\\winamp.m3u\', fmShareDenyNone); try SetLength(buffer, Stream.Size); Stream.Read(Buffer[1], Stream.Size); FileStr := Buffer; finally Stream.Free; end; TempList := TStringList.Create; TempListLen := Split(\'#\',FileStr,TempList); // Start from 1 to cut out \'#EXTM3U\'. Grab Name and Filename for i:=2 to TempListLen -1 do begin TempPos := Pos(\',\',TempList.Strings[i]); TempPos2 := Pos(#13,TempList.Strings[i]); TempStr := Copy(TempList.Strings[i],TempPos +1,(TempPos2 -1) - TempPos); TempStr2 := Copy(TempList.Strings[i],TempPos2 +2,(Length(TempList.Strings[i]) -1) - (TempPos2 +2)); PlayList.Add(TempStr); FileList.Add(TempStr2); end; TempList.Free; end; { ----- PUBLIC RETURN METHODS ---- } function TWinampApi.getSongState():String; var SongState : Word; SongStateStr : String; begin SongState := SendMessage(WinampHnd,WM_USER,0,104); case SongState of 1: SongStateStr:= \'playing\'; 3: SongStateStr:= \'paused\'; 0: SongStateStr:= \'stopped\' else SongStateStr := \'unknown\'; end; Result := SongStateStr; end; function TWinampApi.getSongPosition():String; var TempInt : Integer; begin TempInt := SendMessage(WinampHnd,WM_USER,0,105); if SongPosParseTime then Result := ConvertTime(TempInt,1000) else Result := IntToStr(TempInt); end; function TWinampApi.getSongLength():String; var TempInt : Integer; begin TempInt := SendMessage(WinampHnd,WM_USER,1,105); if SongLengthParseTime then Result := ConvertTime(TempInt,1) else Result := IntToStr(TempInt); end; function TWinampApi.getSongSampleRate():String; begin Result := IntToStr(SendMessage(WinampHnd,WM_USER,0,126)); end; function TWinampApi.getSongBitRate():String; begin Result := IntToStr(SendMessage(WinampHnd,WM_USER,1,126)); end; function TWinampApi.getSongChannels():String; begin Result := IntToStr(SendMessage(WinampHnd,WM_USER,2,126)); end; function TWinampApi.getPlayListPosition():String; var TempInt : Integer; begin TempInt := SendMessage(WinampHnd,WM_USER,0,125); if StrToInt(getPlayListLength()) <1 then Result := IntToStr(TempInt) else Result := IntToStr(TempInt +1); end; function TWinampApi.getPlayListLength():String; begin Result := IntToStr(SendMessage(WinampHnd,WM_USER,0,124)); end; { ----- PRIVATE METHODS ----- } function TWinampApi.ConvertTime(n: integer;m : integer): string; begin n := n div m; result := ConvertTimeTool(n div 60) + \':\' + ConvertTimeTool(n mod 60); end; function TWinampApi.ConvertTimeTool(n: integer): string; begin if n < 10 then result := \'0\' + inttostr(n) else result := inttostr(n); end; function TWinampApi.split(seperator: Char; text: String; var list: TStringList): Integer; var mypos, number: Integer; begin number:=0; if Length(text) > 0 then begin if text[Length(text)] <> seperator then text:=text+seperator; while(Pos(String(seperator),text))>0 do begin mypos:=Pos(String(seperator),text); list.Add(Copy(text,1,mypos-1)); text:=Copy(text,mypos+1,Length(text)-mypos); Inc(number); end; end; Result:=number; end; end.