Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Winamp Control Library - Die ultimative *DLL für Winamp :) (https://www.delphipraxis.net/56690-winamp-control-library-die-ultimative-%2Adll-fuer-winamp.html)

Rastaman 9. Nov 2005 21:11


Winamp Control Library - Die ultimative *DLL für Winamp :)
 
Guten Abend!

Aufgrund dieses Threads, ist mir die Idee gekommen, daraus einfach eine Komponente zu machen, weil das die Sache erleichtert.
Hab ja auch in dem Thread schon geschrieben, dass ich das in eine Komponente umwandeln möchte.

In dieser Komponente ist alles Lebensnotwendige, was man braucht, um Winamp zu kontrollieren.
Ich stell dann hier mal eine Funktionsliste auf (24 Funktionen/Prozeduren, 6 Propertys atm)

Alle Funktionen, die einen Integer als Rückgabewert haben, haben versagt (oder Winamp läuft nicht), wenn sie -1 zurück geben.
In jede Prozedur bzw. Funktion ist eine Abfrage eingebaut, ob Winamp auch läuft, wenn nicht geben sie False, '', oder -1 zurück.
Das Winamp-Fenster Handle wird mit dem Klassennamen 'Winamp v1.x' ermittelt, sollte das Winamp-Fenster eine andere Klasse haben,
wird es nicht erkannt. Allerdings...Wer ruft sein Winamp schon mit anderem Klassennamen auf :mrgreen:

Funktionslist:

Delphi-Quellcode:
  function Execute(params: String): Integer;
Führt Winamp mit Parametern aus. Der Pfad zur exe wird aus der Registry aus dem HKLU gelesen.
Wird der Wert nicht gefunden, gibt die Funktion ERROR_NOT_FOUND zurück.
Gibts es einen Fehler bei ShellExecute gibt sie ERROR_FAILED zurück. Wenn alles klappt, dann gibt sie 1 zurück.

Delphi-Quellcode:
  function GetBitRate: Integer;
Gibt die Bitrate des aktuellen Tracks / Streams zurück.

Delphi-Quellcode:
  function GetEQData: TEQData;
Speichert Informationen über den Equalizer in einem Record vom Typ TEQData, der ebenfalls in der Komponente deklariert ist.
Mehr Infos zu TEQData ganz unten am Ende der Funktionsliste.

Delphi-Quellcode:
  function GetFileNameByPlaylistPos(pos: Integer): String;
Erwartet einen Integer, der die Position in der Playliste angibt (von 0 beginnend).
Gibt den dazugehörigen Dateinamen bzw die URL zurück.

Delphi-Quellcode:
  function GetPlaybackState: Integer;
Gibt den Playbackstatus zurück:
0 - Angehalten
1 - Spielt
2 - Pause

Delphi-Quellcode:
  function GetRootFolder: String;
Ermittelt das Winamp Root Verzeichnis aus der Registry (HKLU).

Delphi-Quellcode:
  function GetSampleRate: Integer;
Ermittelt die Samplerate des aktuellen Tracks / Streams.
Z.B 44

Delphi-Quellcode:
  function GetPlaylistCount: Integer;
Gibt die Playlisteinträge zurück.

Delphi-Quellcode:
  function GetWindowText: String;
Gibt den Fenstertext des Winamp-Fenster wieder, der auch im Taskmanager zu sehen ist.

Delphi-Quellcode:
  function IsRunning: Boolean;
Prüft, ob Winamp läuft (Standardklasse 'Winamp v1.x' ist Voraussetzung).
Wird auch intern in jeder Funktion / Prozedur eingesetzt.

Delphi-Quellcode:
  function IsStreaming: Boolean;
Prüft, ob ein Stream gespielt wird (wenn nicht, dann wohl eine Datei :mrgreen:)

Delphi-Quellcode:
  procedure ClearPlayList;
Leert die aktuelle Playliste.
GetFileNameByPlaylistPos gibt jetzt nur noch leere Strings zurück, da die Playliste leer ist.

Delphi-Quellcode:
  procedure Close;
Beendet Winamp auf normalem Wege.

Delphi-Quellcode:
  procedure Pause_Resume;
Pausiert, oder spielt weiter, je nachdem.
Weiterspielen funktioniert nicht bei einem gestoppten, nur bei einem pausierten Lied.

Delphi-Quellcode:
  procedure RestartWinamp;
Startet Winamp neu, über den Sinn lässt sich streiten :zwinker:

Delphi-Quellcode:
  procedure SavePlaylist;
Speichert die aktuelle Playliste in %Winampdir%\Winamp.m3u
%Winampdir% kann durch GetRootFolder ermittelt werden.

Delphi-Quellcode:
  procedure SetBalance(pos: Byte);
Je nachdem, wie viel aus der rechten bzw. linken Box kommen soll.
Laut Winamp SDK 0 - 255 als Wert übergeben.
Musste in einem Test aber bei einer Trackbar "Min" auf -128 und "Max" auf 127 setzen, damit alles geklappt hat.

Delphi-Quellcode:
  procedure SetVolume(vol: Byte);
Lautstärke verändern (0 - 255).

Delphi-Quellcode:
  procedure StartPlayback;
Wiedergabe starten.
Öffnet den OpenDialog in winamp, wenn die Playliste leer ist.

Delphi-Quellcode:
  procedure StopPlayback;
Stoppt die Wiedergabe.

Delphi-Quellcode:
  procedure SwapRepeatState;
Wechselt den Repeatstatus, unabhängig vom momentanen Status.

Delphi-Quellcode:
  procedure SwapShuffleState;
Wie SwapRepeatState, nur halt mit Shuffle ;)

Delphi-Quellcode:
  procedure SwitchTrack(direction: Integer);
Entweder einen Track weiter in der Playlist, oder einen zurück.
direction muss sein:

waPrev: Einen Track zurück
waNext: Einen Track vor

Delphi-Quellcode:
  procedure Terminate;
Beendet den Winampprozess.




Propertys:

Delphi-Quellcode:
  property Handle //nur lesen
Handle ausgeben.

Delphi-Quellcode:
  property PlaylistPos //nur lesen (bald schreiben?)
Playlistindex ausgeben, von 0 beginnend.

Delphi-Quellcode:
  property RepeatState //lesen und schreiben
Repeatstatus ausgeben / setzen.

Delphi-Quellcode:
  property Shufflestate //lesen und schreiben
Shufflestatus ausgeben / setzen.

Delphi-Quellcode:
  property TrackLength //nur lesen
Tracklänge in Sekunden ausgeben. Funktioniert nicht bei Streams.

Delphi-Quellcode:
  property TrackPos //lesen und schreiben (nur, wenn kein Stream läuft)
To be continued :mrgreen:

So jetzt kommen wir zu

TEQData

Der Record sieht so aus:

Delphi-Quellcode:
{
  ** Record that obtains the Winamp EQ Data
}
type
  TEQData = packed record
    Enabled, Autoload,
    EQ_60  , EQ_170,
    EQ_310 , EQ_600,
    EQ_1k , EQ_3k,
    EQ_6k , EQ_12k,
    EQ_14k , EQ_16k,
    Preamp : Integer;
end;
(Ja, ich habe einen komischen Kommentarstil, aber mir hat der aus dem Winamp SDK so gut gefallen :-D )

Die Equalizerdaten können in so einem Record gespeichert werden, über Aufruf von GetEQData.
Wenn man sich den Winamp-EQ ansieht, erklären sich alle Werte von selbst.

So. Das wars auch schon :lol:

Es wäre SEHR nett, wenn das Ding einer testen würde.
Und noch besser, wenns jemand gebrauchen kann :)

Ach ja ... Könnt mir wohl mal einer die RegisterComponent-Funktion per PN schicken?
Hab nur die Personal Version :(
Weil sonst muss ich Classes einbinden, und das macht die Kompo nich grad nonVCL fähig.
Geht das dann überhaupt?
Bitte keine Diskussionen darüber :mrgreen:

Rote Farbe = Neue Version

//Edit: Rechtschreibfehler (immer noch welche da?) / Beispielapp angehängt

//Edit2: v1.1 - 9 Funktionen durch 5 Propertys ersetzt / Neue Beispielapp

//Edit3: In die Beispielapp hatte sich der Fehlerteufel eingeschlichen :mrgreen:

//Edit4: Neue Version. Die Property PlaylistPos kann jetzt auch gesetzt werden.

Vielen Dank für ihre Aufmerksamkeit...Tschüss :mrgreen:

Khabarakh 10. Nov 2005 11:42

Re: TWinAmpControl - Die ultimative Komponente für Winamp :)
 
Ich brauche die Komponente zwar nicht :mrgreen:, aber du kannst deine Klasse noch etwas mehr an OOP anpassen.
Beispiele:
Zitat:

Zitat von Rastaman
Alle Funktionen, die einen Integer als Rückgabewert haben, haben versagt (oder Winamp läuft nicht), wenn sie -1 zurück geben.

[...]

Funktionslist:

Delphi-Quellcode:
  function Execute(params: String): Integer;
Führt Winamp mit Parametern aus. Der Pfad zur exe wird aus der Registry aus dem HKLU gelesen.
Wird der Wert nicht gefunden, gibt die Funktion ERROR_NOT_FOUND zurück.
Gibts es einen Fehler bei ShellExecute gibt sie ERROR_FAILED zurück. Wenn alles klappt, dann gibt sie 1 zurück.

Entferne den Rückgabewert und löse stattdessen eine Exception aus, dann ist z.B. auch
Zitat:

haben versagt (oder Winamp läuft nicht)
eindeutig.
Zitat:

Zitat von Rastaman
Delphi-Quellcode:
  function GetRepeatState: Integer;
[...]

Delphi-Quellcode:
  function GetShuffleState: Integer;
[...]

Delphi-Quellcode:
  procedure SetRepeatState(state: Integer);
[...]

Delphi-Quellcode:
  procedure SetShuffleState(state: Integer);

Das schreit doch geradezu nach Properties :wink: .

IsRunning, IsStreaming usw. könnte man noch in ein Set verpacken, wie z.B. TComponent.ComponentState.

Rastaman 10. Nov 2005 15:05

Re: TWinAmpControl - Die ultimative Komponente für Winamp :)
 
Hallo Khabarakh
Danke für Kritik und Tips!

Zitat:

Zitat von Khabarakh
Entferne den Rückgabewert und löse stattdessen eine Exception aus, dann ist z.B. auch
Zitat:

...haben versagt (oder Winamp läuft nicht)
eindeutig.

Naja, aber finde das so schon ganz gut.
Ausserdem ist dann alles einheitlich und wozu gibts IsRunning?

Zitat:

Zitat von Khabarakh
Das schreit doch geradezu nach Properties :wink: .

Jo das stimmt. Gute Idee :thumb:
Ist umgesetzt worden. 9 Funktionen entfernt und dafür Propertys.


Neue Version 1.1 hochgeladen!

Rastaman 18. Nov 2005 13:11

Re: TWinAmpControl - Die ultimative Komponente für Winamp :)
 
*** P U S H ***

Wenn schon keiner was sagen möchte, kann mir dann nicht wenigstens einer
die RegisterComponent-Funktion als Source schicken (An Leute mir Prof, Enterprise, Archi gerichtet!)?

mestro 22. Jan 2006 23:45

Re: TWinAmpControl - Die ultimative Komponente für Winamp :)
 
...

mestro 25. Jan 2006 10:28

Re: TWinAmpControl - Die ultimative Komponente für Winamp :)
 
...

DevilsCamp 25. Jan 2006 11:43

Re: TWinAmpControl - Die ultimative Komponente für Winamp :)
 
Zitat:

Zitat von Rastaman
Delphi-Quellcode:
  function Execute(params: String): Integer;
Führt Winamp mit Parametern aus. Der Pfad zur exe wird aus der Registry aus dem HKLU gelesen.
Wird der Wert nicht gefunden, gibt die Funktion ERROR_NOT_FOUND zurück.
Gibts es einen Fehler bei ShellExecute gibt sie ERROR_FAILED zurück. Wenn alles klappt, dann gibt sie 1 zurück.

Frage:
Steht der Pfad auch dann in der Registry, wenn ich Winamp nicht installiert habe, weil ich das Verzeichnis nur kopiert habe?
z.B. nach einer Neuinstallation von Windows?

dahead 25. Jan 2006 11:47

Re: TWinAmpControl - Die ultimative Komponente für Winamp :)
 
Zitat:

Zitat von DevilsCamp
Frage:
Steht der Pfad auch dann in der Registry, wenn ich Winamp nicht installiert habe, weil ich das Verzeichnis nur kopiert habe?
z.B. nach einer Neuinstallation von Windows?

das kannst du selbst rausfinden, indem du in der registrierung nach dem 1. start u. ende von winamp in der registrierung danach suchst (wahrscheinlich unter HKCU/Software/Winamp oder Nullsoft).

Rastaman 25. Jan 2006 16:17

Re: TWinAmpControl - Die ultimative Komponente für Winamp :)
 
WoW :shock:

Es regt sich was :)

Zitat:

Zitat von mestro
Was ich persönlich die ganze Zeit suche ist wie ich einen bestimmten Track aus der Playlist abgespielt bekomme. Ich suche schon ewig und finde nichts :cry:

Dabei währen mir die Messages doch schon genug! :wall:
Naja, und an wen ich das ganze sende muss Main oder PE-Window?

Ich habe nichteinmal geschaft im Main-Window einen speziellen Titel zu laden. Das anschließende "Play" senden klappt natürlich.

Hat vielleicht jemand einen Tip?

Testen konnte ich deinen Code leider noch nicht.

Da hast du Recht, das fehlt. Ist jetzt mit drin. Hab ne neue Version hochgeladen, aber keine Lust mehr alles
oben zu editieren, isn bischn umständlich bei so viel Gedöns :mrgreen:

PlaylistPos ist jetzt eine Property.
Du kannst also Folgendes jetzt machen.

Delphi-Quellcode:
Edit1.Text := IntToStr(Winamp.PlaylistPos);

// oder

Winamp.PlaylistPos := StrToInt(Edit1.Text);
Alles 0 basiert.
Also was du in der Playlist als ersten Eintrag siehst, hat den Wert 0. Eintrag 2 den Wert 1 usw.

Bitte nicht so schüchtern was Kommentare usw angeht an alle anderen :zwinker:

//Edit: Ach ja, du musst nach dem setzen des Eintrages noch Winamp.StartPlayback aufrufen, weil der Eintrag sonst zwar gesetzt, aber nicht abgespielt wird.

bladecs 27. Jan 2006 21:31

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
tipp:


du könntest auch noch eine property für volume einbauen.

code würde so ungefähr aussehen:

Delphi-Quellcode:
private
function GetVolume: Byte;

public
procedure SetVolume(Vol: Byte);
property Volume: Byte read GetVolume write Setvolume;

end;

function TWinAmpControl.GetVolume: Byte;
var
  wnd: HWND;
begin
  if IsRunning then
  begin
    wnd := GetHandle;
    result:=SendMessage(wnd, WM_WA_IPC, -666, IPC_SETVOLUME);
  end;
end;

procedure TWinAmpControl.SetVolume(vol: Byte);
var
  wnd: HWND;
begin
  if IsRunning then
  begin
    wnd := GetHandle;
    SendMessage(wnd, WM_WA_IPC, vol, IPC_SETVOLUME);
  end;
end;

kaiser1401 7. Apr 2006 07:57

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
Hallo Rastaman,

Super sache. das ist genau das was ich suche, nur habe ich leider ein problem beim Compilieren.... Ich bekomme immer einen fehler wenn ich die .pas compilieren möchte. der Debugger meckert immer beim ersten const das er dort ein end erwartet. mach ich irgendwas falsch? und wenn ja, was könnte das sein??

(Delphi 7)

ste_ett 7. Apr 2006 08:07

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
Zitat:

Zitat von Rastaman
Das Winamp-Fenster Handle wird mit dem Klassennamen 'Winamp v1.x' ermittelt, sollte das Winamp-Fenster eine andere Klasse haben,
wird es nicht erkannt. Allerdings...Wer ruft sein Winamp schon mit anderem Klassennamen auf :mrgreen:

Gut wäre es, hier den Klassennamen, den man vergeben hat, angeben zu können, entweder per Parameter oder als property, so dass auch andere Winamp-Instanzen gefunden werden können. :)

Valle 7. Apr 2006 11:31

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
Also klingt ja ganz gut die Sache, aber ich habe so ungefähr das gleiche Problem wie Kaiser:

[Fehler] WinAmpControl.pas(66): 'END' erwartet, aber 'CONST' gefunden
[Fehler] WinAmpControl.pas(105): Unbekannte Anweisung: 'public'
[Fehler] WinAmpControl.pas(130): Deklaration erwartet, aber 'PROPERTY' gefunden
[Fehler] WinAmpControl.pas(136): 'IMPLEMENTATION' erwartet, aber ';' gefunden
[Fehler] WinAmpControl.pas(144): '.' erwartet, aber 'IMPLEMENTATION' gefunden
[Fehler] WinAmpControl.pas(94): Ungenügende Forward- oder External-Deklaration: 'GetHandle'
[Fehler] WinAmpControl.pas(95): Ungenügende Forward- oder External-Deklaration: 'GetOutputTime'
[Fehler] WinAmpControl.pas(96): Ungenügende Forward- oder External-Deklaration: 'GetOutputPos'
[Fehler] WinAmpControl.pas(97): Ungenügende Forward- oder External-Deklaration: 'GetPlaylistPos'
[Fehler] WinAmpControl.pas(98): Ungenügende Forward- oder External-Deklaration: 'GetRepeatState'
[Fehler] WinAmpControl.pas(99): Ungenügende Forward- oder External-Deklaration: 'GetShuffleState'
[Fehler] WinAmpControl.pas(100): Ungenügende Forward- oder External-Deklaration: 'JumpToTime'
[Fehler] WinAmpControl.pas(101): Ungenügende Forward- oder External-Deklaration: 'SetPlaylistPos'
[Fehler] WinAmpControl.pas(102): Ungenügende Forward- oder External-Deklaration: 'SetRepeatState'
[Fehler] WinAmpControl.pas(103): Ungenügende Forward- oder External-Deklaration: 'SetShuffleState'
[Fehler] WinAmpControl.pas(106): Ungenügende Forward- oder External-Deklaration: 'Execute'
[Fehler] WinAmpControl.pas(107): Ungenügende Forward- oder External-Deklaration: 'GetBitRate'
[Fehler] WinAmpControl.pas(108): Ungenügende Forward- oder External-Deklaration: 'GetEQData'
[Fehler] WinAmpControl.pas(109): Ungenügende Forward- oder External-Deklaration: 'GetFileNameByPlaylistPos'
[Fehler] WinAmpControl.pas(110): Ungenügende Forward- oder External-Deklaration: 'GetPlaybackState'
[Fehler] WinAmpControl.pas(111): Ungenügende Forward- oder External-Deklaration: 'GetRootFolder'
[Fehler] WinAmpControl.pas(112): Ungenügende Forward- oder External-Deklaration: 'GetPlaylistCount'
[Fehler] WinAmpControl.pas(113): Ungenügende Forward- oder External-Deklaration: 'GetSampleRate'
[Fehler] WinAmpControl.pas(114): Ungenügende Forward- oder External-Deklaration: 'GetWindowText'
[Fehler] WinAmpControl.pas(115): Ungenügende Forward- oder External-Deklaration: 'IsRunning'
[Fehler] WinAmpControl.pas(116): Ungenügende Forward- oder External-Deklaration: 'IsStreaming'
[Fehler] WinAmpControl.pas(117): Ungenügende Forward- oder External-Deklaration: 'ClearPlayList'
[Fehler] WinAmpControl.pas(118): Ungenügende Forward- oder External-Deklaration: 'Close'
[Fehler] WinAmpControl.pas(119): Ungenügende Forward- oder External-Deklaration: 'Pause_Resume'
[Fehler] WinAmpControl.pas(120): Ungenügende Forward- oder External-Deklaration: 'RestartWinamp'
[Fehler] WinAmpControl.pas(121): Ungenügende Forward- oder External-Deklaration: 'SavePlaylist'
[Fehler] WinAmpControl.pas(122): Ungenügende Forward- oder External-Deklaration: 'SetBalance'
[Fehler] WinAmpControl.pas(123): Ungenügende Forward- oder External-Deklaration: 'SetVolume'
[Fehler] WinAmpControl.pas(124): Ungenügende Forward- oder External-Deklaration: 'StartPlayback'
[Fehler] WinAmpControl.pas(125): Ungenügende Forward- oder External-Deklaration: 'StopPlayback'
[Fehler] WinAmpControl.pas(126): Ungenügende Forward- oder External-Deklaration: 'SwapRepeatState'
[Fehler] WinAmpControl.pas(127): Ungenügende Forward- oder External-Deklaration: 'SwapShuffleState'
[Fehler] WinAmpControl.pas(128): Ungenügende Forward- oder External-Deklaration: 'SwitchTrack'
[Fehler] WinAmpControl.pas(129): Ungenügende Forward- oder External-Deklaration: 'Terminate'
[Fataler Fehler] dclusr.dpk(44): Verwendete Unit 'WinAmpControl.pas' kann nicht compiliert werden

Rastaman 7. Apr 2006 11:58

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
Mmh ja, das hab ich schon von vielen gehört.
Liegt wohl daran, dass ich Delphi 2005 habe.
Ich habe jetzt mal eine neue Version hochgeladen, von der ich mir erhoffe, dass sie auch mit niedrigeren Versionen funktioniert.

Valle 22. Apr 2006 16:31

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
Jetzt funktioniert sie! Klasse unit!

citybreaker 15. Sep 2006 17:51

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
Versteh noch die ganz wie ich einen Track weiter bzw. zurück schalten kann.

Zitat:

Delphi-Quellcode:
procedure SwitchTrack(direction: Integer);
Entweder einen Track weiter in der Playlist, oder einen zurück.
direction muss sein:

waPrev: Einen Track zurück
waNext: Einen Track vor
Hab also folgendes gemacht:
Delphi-Quellcode:
var WinAmp: TWinAmpControl;
begin
  WinAmp := TWinAmpControl.Create();
  if WinAmp.IsRunning then begin
    WinAmp.SwitchTrack(waNext);
  end;
  WinAmp.Free;
Allerdings mag der das nicht, da waNext undefiniert ist. Komm grad nicht ganz klar. :(

arne99 20. Sep 2006 18:03

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
hey bekomm ich auch den aktuellen tracktitel ausgegeben?

mimi 3. Okt 2006 16:36

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
ich finde deine unit echt klasse und habe damit ein kleines tool für mich geschrieben was ich mit meiner USB fernbedingunge bedinen kann.

Nun gibt es auf der fernbedingung + und ein - zeichen.
ich würde gerne die aktuelle lautstärze nicht auf 0 setzten sondern einfach um bestimmte einheiten runter bzw. rauf...

also kurz gesagt: könntes du noch eine funktion einbauen die die aktuelle lautstärke zurück gibt ?

xZise 3. Okt 2006 17:04

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
Zitat:

Zitat von citybreaker
Delphi-Quellcode:
var WinAmp: TWinAmpControl;
begin
  WinAmp := TWinAmpControl.Create();
  if WinAmp.IsRunning then begin
    WinAmp.SwitchTrack(waNext);
  end;
  WinAmp.Free;
Allerdings mag der das nicht, da waNext undefiniert ist. Komm grad nicht ganz klar. :(

Nur geraten: Probiere mal WinAmp.waNext...

mimi 3. Okt 2006 17:54

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
ich habe das bei mir so gelöst:
Delphi-Quellcode:
  if Pos('F7 07 F8',str) > 0  then begin // Weiter
    if winamp.PlaylistPos+1 > winamp.GetPlaylistCount-1 then
      winamp.PlaylistPos:=0
    else
      winamp.PlaylistPos:=winamp.PlaylistPos+1;
    winamp.StartPlayback;
  end;

  if Pos('F7 01 FE',str) > 0 then begin // Zurück
    if winamp.PlaylistPos-1 >= 0 then
      winamp.PlaylistPos:=winamp.PlaylistPos-1
    else
      winamp.PlaylistPos:=winamp.GetPlaylistCount-1;

    winamp.StartPlayback;
  end;
und so funktioniert es sogar recht gut... nicht wundern wegen den pos es ist halt für meine vernbedingung und das ist der code für weiter *G*

BlackOut 31. Okt 2006 16:29

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
Kann ClearPlayList aufgerufen werden, wenn WinAmp nicht gestartet wurde?
Quasi ohne isRunning Abfrage?

Generell bastle ich mir ein "Evidence Eliminator" Tool zusammen, das alle moeglichen Histories, Temps und Recent Files beseitigen soll, darunter auch Mediaplayer- und eben WinAmp Playlist. Weiss jemand eventuell wie man an diese Playlists kommt um sie zu clearen?

mimi 31. Okt 2006 19:16

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
ich glaube das würde nicht gehen, du brauchst ja ein handle für winamp...
schau mal in das verzeichnis von winamp dort ist eine winamp.m3u meine ich... evlt. ist das das...
wie du an die aktiviert playliste von winamp ran kommst weiß ich leider nicht, es sei denn du rufst es auf cleearst die liste und schließst es wieder müste klappen oder ?

oakley 11. Feb 2007 18:58

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
Hiho,

ich hab mir das Beispiel angeguckt und bin begeister. Klasse Sache.

Ich bin scheinbar völlig verpeilt, denn irgendwas funktioniert mit der Installation nicht.

Ich hab hier D2006 und versucht die KOmponente wie "üblich" zu installieren.

Package - Datei hinzugefügt - instlliert.

Ich wollte das Beispiel.dpr öffnen und bekam den Fehler, daß die Komponente nicht registriert sei.

Kann mir da jemand bitte helfen?

Gruß

Mirko

Rastaman 11. Feb 2007 20:08

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
Hallo.
Ich werd ne DLL draus machen, weil es einfach zu viele Leute gibt die Fehler haben.
Die DLL wird nur eine Funktion exportieren, keine Klasse. Mal sehn wann ich fertig bin.

Daniel G 11. Feb 2007 20:15

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
Zitat:

Zitat von oakley
Ich hab hier D2006 und versucht die KOmponente wie "üblich" zu installieren.

Package - Datei hinzugefügt - instlliert.

Hast du das BDS oder eine der Turbo Versionen? Wenn Turbo, welche? Hast du irgendwelche Updates installiert? Und was heißt "wie üblich"?

Rastaman 12. Feb 2007 20:29

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
Liste der Anhänge anzeigen (Anzahl: 1)
So. DLL draus gemacht. Habe aber kein Delphi installiert und auch nich mehr so die Ahnung davon.

Kann mal vllt jemand den Anhang ausprobieren und auf Fehler prüfen etc. (vllt Windows einbinden? cdecl statt stdcall?)
Einfach einmal winampControl(WA_EXECUTE, 0, NIL) aufrufen und guggn ob Winamp angeht.
Wenn nicht bitte verbesserte .pas hier reinstellen. Dokumentation kommt später wenn ich sicher bin, dass alles so klappt.

Guinness 19. Mär 2007 11:16

Re: TWinAmpControl - Die ultimative Unit für Winamp :)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!

Hab mir deine Files gerade angesehen.

Zitat:

Zitat von Rastaman
Kann mal vllt jemand den Anhang ausprobieren und auf Fehler prüfen etc. (vllt Windows einbinden? cdecl statt stdcall?)

Die Unit Windows muss man unbedingt einbinden, sonst werden die Datentypen der Parameter nicht erkannt. Auch bei der Konstanten-Definition fehlten ein paar Sachen. Ich hab eine neue Version in den Anhang gelegt.

Zitat:

Zitat von Rastaman
Einfach einmal winampControl(WA_EXECUTE, 0, NIL) aufrufen und guggn ob Winamp angeht.
Wenn nicht bitte verbesserte .pas hier reinstellen.

Hab alle Aufrufkonventionen (register, pascal, cdecl, stdcall & safecall) durchprobiert, mit der Hälfte der Conventions bekommt man eine Zugriffsverletzung, dafür passiert bei der anderen Hälfte gar nichts (habs nur mit winampControl(WA_EXECUTE, 0, NIL) ausprobiert).

Hast du eine Ahnung, woran es liegen könnte?

LG, Andy!

dominikkv 3. Mai 2007 15:00

Re: Winamp Control Library - Die ultimative *DLL für Winamp
 
hi
ich habs auch mal versucht mit winampControl(WA_EXECUTE, 0, NIL); Winamp zu starten... hab aber auch ne zugriffsverletzung bekommen:
Zitat:

---------------------------
Project1
---------------------------
Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000.
---------------------------
OK
---------------------------
gibt es auch ne Unit mit den ganzen Funktionen... so wie ich das erkenne hast du zuerst ne Unit hier rein gestellt, aber wieder rausgenommen. Wäre nett wenn die mir einer schicken könnte.

und... gibt es auch sowas für Windows Media Player?

Rainer1000 22. Mai 2007 21:07

Re: Winamp Control Library - Die ultimative *DLL für Winamp
 
Tjoa, also ich melde mal interesse an dem Projekt hier an, kann aber leider kaum bei der entwicklung helfen, --> vollnoob eben... Wär super, wenn da noch dran gearbeitet würde, weil ich momentan an einem Projekt arbeite, mit dem ich Titel auslesen kann und anzeigen...


Falls es sowas auch für WMP geben sollte, bitte mal reinschreiben

Aike 29. Mai 2007 22:13

Re: Winamp Control Library - Die ultimative *DLL für Winamp
 
Mich interessiert die Möglichkeit, die Playlist zu löschen, habe aber keine Ahnung, wie ich eine DLL in mein Projekt einbinde. Warum hast du denn die alten DL-Links entfernt? Find ich ehrlich gesagt ziemlich doof, weil's ja nichts schlimmes ist, dass sie da stehen und ich hätte sie mir gerne runtergeladen und angesehen.

in D7 funktioniert die .pas schonmal nicht, da ";" und "=" fehlen.

ghost007 30. Mai 2007 00:07

Re: Winamp Control Library - Die ultimative *DLL für Winamp
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich weiß nicht ob es im sinn des topic ersteller ist, aber da Aike gern die .pas datei wieder hätte, hab ich mal "meine" um die GetVolume erweiterte pas in den anhanf gepackt ;)

MfG - Ghost007

ghost007 11. Sep 2007 13:51

Re: Winamp Control Library - Die ultimative *DLL für Winamp
 
hi,
ich such ne möglichkeit einen track aus der playlist zu löschen, wie kann ich das machen?
hab schon im winamp forum geschaut, dafür gibts irwie keinen code für sendmessage() oder so.

MfG - Ghost007

fylo 16. Jan 2008 22:42

Re: Winamp Control Library - Die ultimative *DLL für Winamp
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,

@ghost007: ich hab mal deine pas-Datei genommen und um eine Funktion erweitert.
Delphi-Quellcode:
function GetTitleByPlaylistPos(pos: Integer): String;
//gets the title of the playlist entry (index)
Komplette Datei befindet sich im Anhang.

NikoMitDaMacht 16. Jan 2008 23:50

Re: Winamp Control Library - Die ultimative *DLL für Winamp
 
Liste der Anhänge anzeigen (Anzahl: 1)
Album, Artists ect. wird aber noch nicht ermittelt, oder?
Also ich hab auch schon viel mit der WA-API gearbeitet und hatte mir damals in c++ eine DLL für genau das geschrieben.
(ich hasse Pointer in Delphi. Das hat da einfach nicht geklappt)

Würde mich freuen wenn das jemand übersetzen und in die DLL packen könnte.
Eine vollständige Lib ist doch immer sehr praktisch ist.

Im Anhang befindet sich das ehemalige Projekt.

Oliver1983 23. Jan 2008 09:19

Re: Winamp Control Library - Die ultimative *DLL für Winamp
 
Moin,

wie kann ich die Volume Anzeigen lassen in einem Label? Bekomme immer die Fehler meldung Byte und String inkompatibel!

gruss olli

fylo 23. Jan 2008 19:34

Re: Winamp Control Library - Die ultimative *DLL für Winamp
 
Zitat:

Zitat von Oliver1983
wie kann ich die Volume Anzeigen lassen in einem Label?

Zum Beispiel so:
Delphi-Quellcode:
var WinAmp: TWinAmpControl; // sollte irgendwo schon existieren (z.B. als private in der Form)

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  case trunc(winamp.GetVolume/256*100) of
    0 : label1.Caption := 'min';
    1..99 : label1.Caption := inttostr(trunc(winamp.GetVolume/255*100)) +'%';
    100 : label1.Caption := 'max';
  end;
end;

Oldy 11. Sep 2009 22:13

Re: Winamp Control Library - Die ultimative *DLL für Winamp
 
ja, das thema is n bissl älter..
Aber mich interessiert das nunmal :D

ich habe nun die DLL eingebunden, habe schon n biosschen drin, dennoch fehlen noch die grundbefehle..
- Wie setze ich mit der DLL einen Titel zurück (also nciht auf start von playlist) ?
- Wie gehe ich zum letzten / nächsten titel?

wäre toll wenn sich dass mal jemand ansieht..

Danke :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz