|
|
||||||
|
#1
|
|
|
|
|
Hallo zusammen !
Ich will ein Visualisierungs PlugIn für winamp 5.1 schreiben (nur für mich für testzwecke) das die Waveform daten beider kanäle auf jeweils einer ProgressBar für links und rechts anzeigt, die auf einem kleinen Formular (bsToolWindow) liegen. Jetzt habe ich aber hier 2 Probleme, an denen ich einfach nicht mehr weiterkomme :( 1. Wenn ich winamp mit meiner plugin dll starte und dann beende kommt immer folgende meldung : Im Projekt Winamp.exe ist eine Exception der Klasse EOSError aufgetreten. Meldung : 'Systemfehler. Code 1400. Ungültiges Fensterhandle'. ... Das formular wird aber korrekt initialisiert, oder habe ich was übersehen ? 2. Die Render Function (laut SDK) wird offenbar garnicht erst ausgeführt. An den 2 Progressbars tut sich garnichts. |
|
|
|
#2
|
|
|
|
|
Hallo.
> 1. Wenn ich winamp mit meiner plugin dll starte und dann beende kommt > immer folgende > meldung : [...] Ich bekomme sogar noch eine, wenn ich WinAmp über Delphi starte,.. da würde ich mich nicht weiter dran stören. > 2. Die Render Function (laut SDK) wird offenbar garnicht erst ausgeführt. > An den 2 Progressbars tut sich garnichts. Naja, da hast du was falsch gemacht. Das Problem bei deiner Version ist, dass init nicht nach dem Erzeugen des Forms zurückkehrt, sondern so lange blockiert, bis Form1 wieder geschlossen wurde. => WinAmp meint, dass sie Initialisierung noch nicht abgeschlossen ist und ruft natürlich dann auch die render Funktion nicht auf. > ----------winamp.pas------------ (habe den Datentyp der Datenarrays von char nach Shortint bzw. byte geändert) > ----------Unit1.pas--------------- > function init(this_mod:PwinampVisModule):Integer; > begin > //Form1 initialisieren und anzeigen > Application.Initialize; > Application.CreateForm(TForm1,Form1); > Application.Run; > hDC:=GetDC(Form1.Handle); //Handle abfragen > end; Rückgabe: 0 -> alles OK / 1 -> Feheler // was willst du mit dem Device-Context-Handle? (den braucht man normalerweise, wenn man nicht über ein Canvas zeichnen will, sondern die entsprechenden WinApi Funktionen verwendet. Hmmmm,.. Application.xxx,.. das geht nicht!! Application.Run; läuft so lange, wie das Fenster auch existiert -> init kehrt nicht zurück -> render wird nicht aufgerufen!!! > function render(this_mod:PwinampVisModule):Integer; > var > x,y,aaa,bbb: Integer; > aa,bb: Char; > a,b: PByte; > begin > Application.ProcessMessages; > > a:=@this_mod^.waveformData[0,0]; > b:=@this_mod^.waveformData[1,0]; //verwendest du nicht > for x:=0 to 287 do //Buffer durchgehen > begin > For y:=0 to 575 do begin //Array abfragen > aa:=this_mod^.waveformData[0,y]; > aaa:=Byte(aa); > bb:=this_mod^.waveformData[1,y]; > bbb:=Byte(bb); > end; > > //Sichtbar darstellen > form1.ProgressBar1.Position:=aaa; > form1.ProgressBar1.Position:=bbb; > > end; >end; Häää? Was soll das ???? - ProgressBar1 auf aaa und auf bbb gesetzt,.. wird wohl nur bbb anzeigen - y-Schleife: da kommt für aaa immer this_mod^.waveformData[0,575] raus, analog für bbb - X-Schleife: du setzt ProgressBar1 288 mal auf this_mod^.waveformData[1,575] => vermutlich ist das anders geplant. Und es wird auch nichts bringen, jeden Wert des Buffers mit dem ProgressBar anzuzeigen! Je nachdem, was dargestellt werden soll, ist der quadratischer Mittelwert/ Betrags-Maximum /... zu berechnen und anzuzeigen. (Ich würde auch die ganzen Plugin-Funktionen nicht in das Formular packen, sondern in die dpr oder ne extra Datei und dem Form eine passende Update Funktion verpassen, die dann aus der render Funktion aufgerufen wird) ------------------------------------------------------- Und das ganze könnte wie folgt aussehen: (Nur die wesentlichen Stellen,.. hab dir aber auch ne Mail geschickt) //------- Unit1 ------------------ procedure TForm1.updateWaveform(var waveformData:WaveformDataArray;waveformNch:integer ); var x,aaa,bbb: Integer; aa,bb: Shortint ; begin paintbox1.Canvas.fillrect(rect(0,0,576,128)); paintbox2.Canvas.fillrect(rect(0,0,576,128)); paintbox1.Canvas.moveto(0,64); paintbox2.Canvas.moveto(0,64); paintbox1.canvas.pen.color:=clred; paintbox2.canvas.pen.color:=clred; aaa:=0; bbb:=0; For x:=0 to 575 do begin //Array abfragen aa:=waveformData[0,x]; bb:=waveformData[1,x]; aaa:= max(aaa,abs(aa)); // v1 bbb:= max(bbb,abs(bb)); // v1 // aaa := aaa+ aa*aa ; // v2 // ProgressBar1.max = 128^2 // bbb := bbb+ bb*bb; // v2 paintbox1.Canvas.lineto(x,(128+aa) shr 1); // shr 1 entspricht Division durch zwei paintbox2.Canvas.lineto(x,(128+aa) shr 1); end; //Sichtbar darstellen //aaa:=round(aaa/576); // v2 //bbb:=round(bbb/576); // v2 ProgressBar1.Position:=aaa; ProgressBar2.Position:=bbb; end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose:=true; PostQuitMessage(0); //!!!! (ist ne WinApi Funktion, nichts spezielles von WinAmp) // ^^^Damit WinAmp erfährt, dass das Fenster geschlossen wurde // -> es wird quit aufgerufen, ... end; //------------- Project1.dpr --------------------- function init(this_mod:PwinampVisModule):Integer; cdecl; begin application.handle:=this_mod^.hwndParent; // !!!! Form1:=TForm1.create(nil); Form1.show; result:=0; end; function render(this_mod:PwinampVisModule):Integer; cdecl; begin Form1.updateWaveform(this_mod^.waveformData,this_m od^.waveformNch); result:=0; end; procedure quit(this_mod:PwinampVisModule); cdecl; begin application.handle:=0; // !!!! Form1.free; //MessageDlg('- Form1.free -',mtInformation,[mbOK],0); end; //------------ Winamp.pas --------------- type SpectrumDataArray = array[0..1,0..575]of byte; WaveformDataArray = array[0..1,0..575]of Shortint; PwinampVisModule =^TwinampVisModule; TwinampVisModule = record // [...] spectrumData: spectrumDataArray; waveformData: waveformDataArray; // [...] Andreas. |
|
|
| Ähnliche Themen | |
| Plugin für Winamp für MP3 mit 48KHz? Hi, kennt jemand ein Plugin, mit dem man Winamp beibringen kann, auch mp3-Dateien mit 48KHz abzuspielen? Auch nach längerem Suchen und Googeln bin ich nicht fündig... |
|
| Winamp - Plugin für Inernetstream Recording Hallo zusammen, gibt es für Winamp ein Plugin oder Tool mit dem man den Stream vom Webradio aufnehmen kann? Danke im Voraus, Michael |
|
| winamp mit streamripper plugin hallo Leute, hatte den streamripper erfolgreich als winamp plugin inastalliert jedoch irgendwie weggeklickt. Wenn ich ihn nochmals installiere, ist er bereits vorhanden???... |
|
| Winamp Plugin Hallo zusammen ! Ich will für winamp ein plugin schreiben, nur etwas ganz einfaches, OHNE grafik u.s.w.. nur von dem linken und rechten kanal soll die aussteuerung in 2... |
|
|
Alle Zeitangaben in WEZ. Es ist jetzt 18:22 Uhr. | Privacy Policy
|