AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Winamp Control Library - Die ultimative *DLL für Winamp :)
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Rastaman · begonnen am 9. Nov 2005 · letzter Beitrag vom 11. Sep 2009
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von Rastaman
Rastaman
Registriert seit: 6. Jan 2005
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

Funktionslist:

  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.

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

  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.

  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.

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

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

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

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

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

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

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

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

  procedure Close; Beendet Winamp auf normalem Wege.

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

  procedure RestartWinamp; Startet Winamp neu, über den Sinn lässt sich streiten

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

  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.

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

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

  procedure StopPlayback; Stoppt die Wiedergabe.

  procedure SwapRepeatState; Wechselt den Repeatstatus, unabhängig vom momentanen Status.

  procedure SwapShuffleState; Wie SwapRepeatState, nur halt mit Shuffle

  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

  procedure Terminate; Beendet den Winampprozess.




Propertys:

  property Handle //nur lesen Handle ausgeben.

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

  property RepeatState //lesen und schreiben Repeatstatus ausgeben / setzen.

  property Shufflestate //lesen und schreiben Shufflestatus ausgeben / setzen.

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

  property TrackPos //lesen und schreiben (nur, wenn kein Stream läuft) To be continued

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 )

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

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

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

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

Vielen Dank für ihre Aufmerksamkeit...Tschüss
Chuck Norris has counted to infinity ... twice!
 
BlackOut
 
#21
  Alt 31. Okt 2006, 16:29
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?
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#22
  Alt 31. Okt 2006, 19:16
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 ?
Michael Springwald
  Mit Zitat antworten Zitat
oakley
 
#23
  Alt 11. Feb 2007, 18:58
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
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

 
Turbo C++
 
#24
  Alt 11. Feb 2007, 20:08
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.
  Mit Zitat antworten Zitat
Daniel G
 
#25
  Alt 11. Feb 2007, 20:15
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"?
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

 
Turbo C++
 
#26
  Alt 12. Feb 2007, 20:29
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.
Angehängte Dateien
Dateityp: rar winamp_control_library_129.rar (11,2 KB, 92x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Guinness
Guinness

 
Delphi 7 Architect
 
#27
  Alt 19. Mär 2007, 11:16
Hallo!

Hab mir deine Files gerade angesehen.

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 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!
Angehängte Dateien
Dateityp: pas winamp_ctrl_189.pas (2,2 KB, 71x aufgerufen)
  Mit Zitat antworten Zitat
dominikkv

 
Delphi 2007 Professional
 
#28
  Alt 3. Mai 2007, 15:00
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?
Dominik
  Mit Zitat antworten Zitat
Rainer1000

 
Delphi 7 Personal
 
#29
  Alt 22. Mai 2007, 21:07
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
  Mit Zitat antworten Zitat
Aike
 
#30
  Alt 29. Mai 2007, 22:13
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.
Achim
  Mit Zitat antworten Zitat
Alt 29. Mai 2007, 22:44     Erstellt von EWeiss
Dieser Beitrag wurde von fkerber gelöscht. - Grund: Inhalt von Autor entfernt
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 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