Avatar billede mora Nybegynder
27. november 2001 - 17:21 Der er 16 kommentarer og
1 løsning

info fra winamp

Jeg ved den har været her før, men kan ikke finde den, og slet ikke med google søgetingen :)

Hvordan kan jeg finde dette (i delphi).

Det skal helst være uden grafiske componenter da det skal laves i en dll fil ...


~MORA~
Avatar billede borrisholt Novice
27. november 2001 - 17:22 #1
Jeg har et API til DElphi .... (Det er på vej)

Jens B
Avatar billede borrisholt Novice
27. november 2001 - 17:22 #2
hov nej et DElphi API til WinAMP.

Jens B
Avatar billede ziron Nybegynder
27. november 2001 - 18:27 #3
se denne side, der er hvad du skal bruge:

http://www.winamp.com/nsdn/winamp2x/dev/sdk/api.jhtml

/ZIRON
Avatar billede mora Nybegynder
27. november 2001 - 19:07 #4
Jens får points, hans pas fil viser alt hvad jeg skal bruge, og det link er som kommentar i toppen :)
Avatar billede ziron Nybegynder
27. november 2001 - 19:08 #5
okay det er så iorden, kunne vi ikke få den fil også, bare for sjov :)

/ZIRON
Avatar billede mora Nybegynder
27. november 2001 - 19:11 #6
unit WinampApi;
{
    WinAmp API Wrapper for Delphi
    Author: Jens Borrisholt
    Date: May 2001
    Winamp API docs:
    http://www.winamp.com/nsdn/winamp2x/dev/sdk/api.jhtml
}
interface

uses
  Windows,Messages,Classes,SysUtils, Unit1;

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);

    Form1.Caption:=\'runs\';
    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 -
    Form1.Label1.Caption:=TempStr;
    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.
   
Avatar billede ziron Nybegynder
27. november 2001 - 19:12 #7
okay bare iorden :)

/ZIRON
Avatar billede mora Nybegynder
27. november 2001 - 19:20 #8
Hmm, mangler faktisk stadig filnavnet ?
Det syntes jeg ikke står på den winamp side eller i pas filen ?
Avatar billede ziron Nybegynder
27. november 2001 - 19:22 #9
altså hvilken fil det er som at der afspilles???

/ZIRON
Avatar billede mora Nybegynder
27. november 2001 - 19:22 #10
Tja, man kunne jo skrive playlisten ud og finde filnavnet for det nummer man kan få i title, men er der ikke en anden måde ?
Avatar billede mora Nybegynder
27. november 2001 - 19:23 #11
Ja, filnavnet med sti ...
eks. c:\\mp3\\test.mp3
Avatar billede ziron Nybegynder
27. november 2001 - 19:24 #12
hmmm ja menere det har været her før, og at der faktisk blev fundet en løsning...

/ZIRON
Avatar billede mora Nybegynder
27. november 2001 - 19:25 #13
Så ville det være fedt, hvis eksperten havde brugt 10min på en søge funktion istedet for google :(
Avatar billede ziron Nybegynder
27. november 2001 - 19:27 #14
ja nemlig, jeg havde også noget jeg skulle finde tideliger, men nej det synes den ikke at jeg skulle finde, sååå...

/ZIRON
Avatar billede mora Nybegynder
27. november 2001 - 19:28 #15
LOOOLLLL, man kunne vælge :)
Avatar billede mora Nybegynder
27. november 2001 - 23:13 #16
Nu har jeg så lavet det hvor den henter fillisten fra en playlist, og så med timer tkekker at filen ikke er ændret, er den ændret, reloades listen ...

det må kunne gøres bedre, det tager flere sekunder for en reload...
Avatar billede ziron Nybegynder
27. november 2001 - 23:14 #17
hehe

/ZIRON
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer

Erhvervshus Hovedstaden S/I

Erfaren IT- og AI-specialist

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger IT-supporterelever til Lokal IT på Aalborg Kaserne

Metroselskabet I/S

Senior IT Help Desk Specialist