Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi cd's rippen - brauche dringend hilfe! (https://www.delphipraxis.net/126969-cds-rippen-brauche-dringend-hilfe.html)

Marco Steinebach 5. Jan 2009 21:13


cd's rippen - brauche dringend hilfe!
 
Hallo zusammen,
ich möchte die Titel einer CD in MP3's konvertieren.
Probleme:
1. die New Audio components sind absolut klasse, tun aber bei mir nicht, weil ich noch'n gutes, altes Delphi 5 hab.
okay, nächstes: bassenc.dll und lame.exe. Funktioniert wunderbar, solange man nicht versucht, die bassenc.dll dynamisch zu laden. Tut man dies, bgibt es ständig einen Fehler, daß der Handle nicht valid sei. Hääää? Hat dazu vielleicht jemand eine Idee?
Und wenn das alle nix hilft: Kann ich irgendwie dem lame.exe, oder sonst wem ;-), die MP3 Daten ohne diese BASSEnc.DLL übergeben?
Dazu hab ich absolut nix hier in der DP und auch sonst nix schlaues gefunden!

Ich bitte um eure Hilfe!
Einen schönen Abend
Marco

Mithrandir 5. Jan 2009 21:23

Re: cd's rippen - brauche dringend hilfe!
 
1. Quelltext. "Häääää?" ist keine Fehlermeldung, und dass du kein gültiges Handle bekommst, hat bestimmt seinen Grund. ;)
2. Hat das einen besonderen Grund, dass du noch mit D5 arbeiten musst? Ansonsten => Turbo Delphi

Zu deinem Problem:

Natürlich kannst du LAME eine WAVE Datei mit Parametern übergeben, 10 Sekunden Google:

http://lame.cvs.sourceforge.net/*che...ame/lame/USAGE

LAME zum Rippen der CD zu nutzen, dürfte schwer sein.

Marco Steinebach 5. Jan 2009 21:34

Re: cd's rippen - brauche dringend hilfe!
 
Zitat:

Zitat von Der Abtrünnige
1. Quelltext. "Häääää?" ist keine Fehlermeldung, und dass du kein gültiges Handle bekommst, hat bestimmt seinen Grund.

also:
Delphi-Quellcode:
var
  sh: HSTREAM; // das eigentliche Handle für den Kanal
  dh: HENCODE; // das Handle für den Encoder, wenn er's denn geschaft hat.

  BASS_Init(0, 44100, 0, Application.handle, nil);
  sh := BASS_CD_StreamCreateFile(PChar('f:\track01.cda'), BASS_STREAM_DECODE);
        if sh <> 0 then
        begin
          dh := BASS_Encode_Start (sh, pChar(cmdline), 0, nil, nil);
und genau hier hängt's, DH sollte nämlich der Handle für den Decode-Kanal sein, und der ist 0. Aaaaaaber nur, wenn man die BASSENC.DLL dynamisch lädt.
Es gibt auch keine Fehlermeldungen beim laden, o.ä., mit allen anderen BASSXXX.DLL's funktioniert das dynamische laden auch wunderbar.
Bemüht man nach dme aufruf von
Delphi-Quellcode:
          dh := BASS_Encode_Start (sh, pChar(cmdline), 0, nil, nil);
Bass_errorGetCode, liefert einem das die 5 zurück, was für "invalid Handle" steht.
Zitat:

Zitat von Der Abtrünnige
2. Hat das einen besonderen Grund, dass du noch mit D5 arbeiten musst? Ansonsten => Turbo Delphi

Joa, klar, aber das funktioniert nicht mit meinem Screenreader zusammen.

Zitat:

Zitat von Der Abtrünnige
Zu deinem Problem:

Natürlich kannst du LAME eine WAVE Datei mit Parametern übergeben, 10 Sekunden Google:

http://lame.cvs.sourceforge.net/*che...ame/lame/USAGE

;-), ;-), ähm, das war mir klar, hat aber den KLEINEN Nachteil, daß man die Datei erst als WAVE rippen muß udn dann der LAME zum encodieren übergeben - wie das geht, ist mir klar, es ging um den direkten weg.

Viele Grüße
Marco

Mithrandir 5. Jan 2009 21:43

Re: cd's rippen - brauche dringend hilfe!
 
Zitat:

Zitat von Marco Steinebach
wenn man die BASSENC.DLL dynamisch lädt.

Merkwürdig, in der Tat...
Zitat:

Zitat von Marco Steinebach
Joa, klar, aber das funktioniert nicht mit meinem Screenreader zusammen.

Das'n Argument. ;)
Zitat:

Zitat von Marco Steinebach
ähm, das war mir klar, hat aber den KLEINEN Nachteil, daß man die Datei erst als WAVE rippen muß udn dann der LAME zum encodieren übergeben - wie das geht, ist mir klar, es ging um den direkten weg.

Geht mit LAME imho nicht, und mir wäre auch sonst keine Komponente bekannt, die das kann. Die BASS-Beispiele laufen bei dir auch nicht? Bindest du die DLL denn zum richtigen Zeitpunkt ein?

Marco Steinebach 5. Jan 2009 22:18

Re: cd's rippen - brauche dringend hilfe!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo nochmal,
ich hänge hier mal ein Testprogramm dran. Vielleicht finden wir ja eine Lösung, daß kann ischer noch jemand gebrauchen.
Außerdem sind da, für alle die wollen, gleich die dynamic_bass_cd und die dynamic_bass_enc mit dabei - auch wenn letztere ja nicht funktioniert. *grrr
Für die statische variante einfach in der uses das "dynamic" streichen und im OnShow die LoadBassxxx aufrufe auskommentieren, dann sollte das beispiel laufen.

Bin ganz gespannt auf eure Antworten!
Marco

Cyf 6. Jan 2009 04:59

Re: cd's rippen - brauche dringend hilfe!
 
Falls du vorhast dein Programm weiterzugeben, wie sieht das überhaupt mit der lame-Lizens aus?
Ich mein das Audiograbber z.B lame auch nicht mitliefert.

[Edit]Ok, hab mal nachgeschaut, scheint die LGPL zu sein.

Garfield 6. Jan 2009 11:25

Re: cd's rippen - brauche dringend hilfe!
 
Zitat:

Zitat von Marco Steinebach
... Außerdem sind da, für alle die wollen, gleich die dynamic_bass_cd und die dynamic_bass_enc mit dabei - auch wenn letztere ja nicht funktioniert. *grrr
Für die statische variante einfach in der uses das "dynamic" streichen und im OnShow die LoadBassxxx aufrufe auskommentieren, dann sollte das beispiel laufen.

Die Fehler liegen in der dynamic_bass_enc.pas. Es fehlt an einigen Stellen das 'stdcall;'.

Delphi-Quellcode:
var BASS_Encode_GetVersion: function: DWORD; stdcall;

var BASS_Encode_Start: function (handle:DWORD; cmdline:PAnsiChar; flags:DWORD; proc:ENCODEPROC; user:Pointer): HENCODE; stdcall;
var BASS_Encode_AddChunk: function (handle:HENCODE; id:PAnsiChar; buffer:Pointer; length:DWORD): BOOL; stdcall;
var BASS_Encode_IsActive: function (handle:DWORD): DWORD; stdcall;
var BASS_Encode_Stop: function (handle:DWORD): BOOL; stdcall;
var BASS_Encode_SetPaused: function (handle:DWORD; paused:BOOL): BOOL; stdcall;
var BASS_Encode_Write: function (handle:DWORD; buffer:Pointer; length:DWORD): BOOL; stdcall;
var BASS_Encode_SetNotify: function (handle:DWORD; proc:ENCODENOTIFYPROC; user:Pointer): BOOL; stdcall;
var BASS_Encode_GetCount: function (handle:HENCODE; count:DWORD): QWORD; stdcall;
var BASS_Encode_SetChannel: function (handle:DWORD; channel:DWORD): BOOL; stdcall;
var BASS_Encode_GetChannel: function (handle:HENCODE): DWORD; stdcall;

var BASS_Encode_GetACMFormat: function (handle:DWORD; form:Pointer; formlen:DWORD; title:PAnsiChar; flags:DWORD): DWORD; stdcall;
var BASS_Encode_StartACM: function (handle:DWORD; form:Pointer; flags:DWORD; proc:ENCODEPROC; user:Pointer): HENCODE; stdcall;
var BASS_Encode_StartACMFile: function (handle:DWORD; form:Pointer; flags:DWORD; filename:PAnsiChar): HENCODE; stdcall;

var BASS_Encode_CastInit: function (handle:HENCODE; server,pass,content,name,url,genre,desc,headers:PAnsiChar; bitrate:DWORD; pub:BOOL): BOOL; stdcall;
var BASS_Encode_CastSetTitle: function (handle:HENCODE; title,url:PAnsiChar): BOOL; stdcall;
var BASS_Encode_CastGetStats: function (handle:HENCODE; stype:DWORD; pass:PAnsiChar): PAnsiChar; stdcall;

Marco Steinebach 6. Jan 2009 15:21

Re: cd's rippen - brauche dringend hilfe!
 
Hallo,
Ganz, ganz herzlichen Dank, Garfield, für die Lösung.
Scheiß kopierarbeit. ;-)
Wie kann man denn so plemm-plemm sein und die stdcalls vergessen.
*grummel* nach dem Fehler würde ich noch in zwei Wochen suchen!
Vielen Dank nochmal und viele Grüße
Marco
p.s.: ich bring die 3 Units jetzt auf den neuesten Stand und poste sie dann hier nochmal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:16 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