![]() |
Winamp Control Library - Die ultimative *DLL für Winamp :)
Guten Abend!
Aufgrund ![]() 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:
Führt Winamp mit Parametern aus. Der Pfad zur exe wird aus der Registry aus dem HKLU gelesen.
function Execute(params: String): Integer;
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:
Gibt die Bitrate des aktuellen Tracks / Streams zurück.
function GetBitRate: Integer;
Delphi-Quellcode:
Speichert Informationen über den Equalizer in einem Record vom Typ TEQData, der ebenfalls in der Komponente deklariert ist.
function GetEQData: TEQData;
Mehr Infos zu TEQData ganz unten am Ende der Funktionsliste.
Delphi-Quellcode:
Erwartet einen Integer, der die Position in der Playliste angibt (von 0 beginnend).
function GetFileNameByPlaylistPos(pos: Integer): String;
Gibt den dazugehörigen Dateinamen bzw die URL zurück.
Delphi-Quellcode:
Gibt den Playbackstatus zurück:
function GetPlaybackState: Integer;
0 - Angehalten 1 - Spielt 2 - Pause
Delphi-Quellcode:
Ermittelt das Winamp Root Verzeichnis aus der Registry (HKLU).
function GetRootFolder: String;
Delphi-Quellcode:
Ermittelt die Samplerate des aktuellen Tracks / Streams.
function GetSampleRate: Integer;
Z.B 44
Delphi-Quellcode:
Gibt die Playlisteinträge zurück.
function GetPlaylistCount: Integer;
Delphi-Quellcode:
Gibt den Fenstertext des Winamp-Fenster wieder, der auch im Taskmanager zu sehen ist.
function GetWindowText: String;
Delphi-Quellcode:
Prüft, ob Winamp läuft (Standardklasse 'Winamp v1.x' ist Voraussetzung).
function IsRunning: Boolean;
Wird auch intern in jeder Funktion / Prozedur eingesetzt.
Delphi-Quellcode:
Prüft, ob ein Stream gespielt wird (wenn nicht, dann wohl eine Datei :mrgreen:)
function IsStreaming: Boolean;
Delphi-Quellcode:
Leert die aktuelle Playliste.
procedure ClearPlayList;
GetFileNameByPlaylistPos gibt jetzt nur noch leere Strings zurück, da die Playliste leer ist.
Delphi-Quellcode:
Beendet Winamp auf normalem Wege.
procedure Close;
Delphi-Quellcode:
Pausiert, oder spielt weiter, je nachdem.
procedure Pause_Resume;
Weiterspielen funktioniert nicht bei einem gestoppten, nur bei einem pausierten Lied.
Delphi-Quellcode:
Startet Winamp neu, über den Sinn lässt sich streiten :zwinker:
procedure RestartWinamp;
Delphi-Quellcode:
Speichert die aktuelle Playliste in %Winampdir%\Winamp.m3u
procedure SavePlaylist;
%Winampdir% kann durch GetRootFolder ermittelt werden.
Delphi-Quellcode:
Je nachdem, wie viel aus der rechten bzw. linken Box kommen soll.
procedure SetBalance(pos: Byte);
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:
Lautstärke verändern (0 - 255).
procedure SetVolume(vol: Byte);
Delphi-Quellcode:
Wiedergabe starten.
procedure StartPlayback;
Öffnet den OpenDialog in winamp, wenn die Playliste leer ist.
Delphi-Quellcode:
Stoppt die Wiedergabe.
procedure StopPlayback;
Delphi-Quellcode:
Wechselt den Repeatstatus, unabhängig vom momentanen Status.
procedure SwapRepeatState;
Delphi-Quellcode:
Wie SwapRepeatState, nur halt mit Shuffle ;)
procedure SwapShuffleState;
Delphi-Quellcode:
Entweder einen Track weiter in der Playlist, oder einen zurück.
procedure SwitchTrack(direction: Integer);
direction muss sein: waPrev: Einen Track zurück waNext: Einen Track vor
Delphi-Quellcode:
Beendet den Winampprozess.
procedure Terminate;
Propertys:
Delphi-Quellcode:
Handle ausgeben.
property Handle //nur lesen
Delphi-Quellcode:
Playlistindex ausgeben, von 0 beginnend.
property PlaylistPos //nur lesen (bald schreiben?)
Delphi-Quellcode:
Repeatstatus ausgeben / setzen.
property RepeatState //lesen und schreiben
Delphi-Quellcode:
Shufflestatus ausgeben / setzen.
property Shufflestate //lesen und schreiben
Delphi-Quellcode:
Tracklänge in Sekunden ausgeben. Funktioniert nicht bei Streams.
property TrackLength //nur lesen
Delphi-Quellcode:
To be continued :mrgreen:
property TrackPos //lesen und schreiben (nur, wenn kein Stream läuft)
So jetzt kommen wir zu TEQData Der Record sieht so aus:
Delphi-Quellcode:
(Ja, ich habe einen komischen Kommentarstil, aber mir hat der aus dem Winamp SDK so gut gefallen :-D )
{
** 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; 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: |
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:
Zitat:
IsRunning, IsStreaming usw. könnte man noch in ein Set verpacken, wie z.B. TComponent.ComponentState. |
Re: TWinAmpControl - Die ultimative Komponente für Winamp :)
Hallo Khabarakh
Danke für Kritik und Tips! Zitat:
Ausserdem ist dann alles einheitlich und wozu gibts IsRunning? Zitat:
Ist umgesetzt worden. 9 Funktionen entfernt und dafür Propertys. Neue Version 1.1 hochgeladen! |
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!)? |
Re: TWinAmpControl - Die ultimative Komponente für Winamp :)
...
|
Re: TWinAmpControl - Die ultimative Komponente für Winamp :)
...
|
Re: TWinAmpControl - Die ultimative Komponente für Winamp :)
Zitat:
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? |
Re: TWinAmpControl - Die ultimative Komponente für Winamp :)
Zitat:
|
Re: TWinAmpControl - Die ultimative Komponente für Winamp :)
WoW :shock:
Es regt sich was :) Zitat:
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:
Alles 0 basiert.
Edit1.Text := IntToStr(Winamp.PlaylistPos);
// oder Winamp.PlaylistPos := StrToInt(Edit1.Text); 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. |
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz