Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   An lame.exe Bitratevariable übergeben? (https://www.delphipraxis.net/153672-lame-exe-bitratevariable-uebergeben.html)

OrNEC 12. Aug 2010 12:01

An lame.exe Bitratevariable übergeben?
 
Hallo,

versuche schon seit Gestern an die lame.exe eine Bitravariable zu übergeben, aber es gelingt mir nicht. Also zur Zeit encodiere ich die mp3's wie folgt:

Delphi-Quellcode:
//var bitrate: String;
begin
//bitrate:='-b 128';

BASS_Encode_Start(chan, Pointer(PWideString('lame -h - "' + Verzeichnis + '"')), BASS_UNICODE, nil, nil);
end;
Den Parameter "-h" will ich durch die Variable "bitrate" ersetzen, und da komm ich nicht weiter.

Hab schon so versucht und zig anders... also klappt nichts. Wer hilft mir da weiter?
Delphi-Quellcode:
... 'lame "'bitrate'" ...

DeddyH 12. Aug 2010 12:09

AW: An lame.exe Bitratevariable übergeben?
 
http://wiki.hydrogenaudio.org/index....e=EAC_and_Lame
Zitat:

So, if you selected 192 kBit/s in the Bit Rate drop-down list, the command line would be:
Code:
LAME.exe -b192 %s %d


OrNEC 12. Aug 2010 12:15

AW: An lame.exe Bitratevariable übergeben?
 
Hm.... :gruebel:
hilft mir irgendwie nicht weiter, -b192 ist doch keine Variable und die will ich grade. :gruebel:

DeddyH 12. Aug 2010 12:18

AW: An lame.exe Bitratevariable übergeben?
 
Delphi-Quellcode:
var bitrate: integer;
begin
  bitrate := 128;
  BASS_Encode_Start(chan, Pointer(PWideString(Format('lame -b%d -"%s"',[bitrate, Verzeichnis]))), BASS_UNICODE, nil, nil);

OrNEC 12. Aug 2010 12:27

AW: An lame.exe Bitratevariable übergeben?
 
Ach so... ok ist schon verständlicher.

Und wenn ich "-b" durch "-h" ersetzen will und dabei hat "-h" keine Bitrate? :gruebel:

Das ist nämlich so:

Automatische Bitrate:
Delphi-Quellcode:
BASS_Encode_Start(chan, Pointer(PWideString('lame -h - "' + Verzeichnis + '"')), BASS_UNICODE, nil, nil);


Und das hier manuelle:
Delphi-Quellcode:
BASS_Encode_Start(chan, Pointer(PWideString('lame -b 128 - "' + Verzeichnis + '"')), BASS_UNICODE, nil, nil);


Also die Parameter "-h" und "-b" müssen wohl auch Variablen sein, oder?

Delphi-Quellcode:
bitrate:='-h';
oder
bitrate:='-b 128';

DeddyH 12. Aug 2010 12:39

AW: An lame.exe Bitratevariable übergeben?
 
Delphi-Quellcode:
type TBitrate = (brAutomatic, br128, br192); //nur als Beispiel, sollte noch erweitert werden

procedure MachWas(bitrate: TBitrate);
var brString: string;
begin
  case bitrate of
    br128: brString := '-b 128';
    br192: brString := '-b 192';
    else
      //brAutomatic oder ungültiger Wert
      brString := '-h';
  end;
  BASS_Encode_Start(chan, Pointer(PWideString(Format('lame %s -"%s"',[brString, Verzeichnis]))), BASS_UNICODE, nil, nil);

OrNEC 12. Aug 2010 12:45

AW: An lame.exe Bitratevariable übergeben?
 
:shock: :roteyes:

Geht das nicht einfacher?
Ok danke, ich schau ma was es sich machen lässt.

DeddyH 12. Aug 2010 12:53

AW: An lame.exe Bitratevariable übergeben?
 
Klar geht das auch einfacher.
Delphi-Quellcode:
var bitrate: integer;

...

if bitrate > 0 then
  brString := '-b ' + IntToStr(bitrate)
else
  brString := '-h';
Ist halt nicht so schön strukturiert ;)

OrNEC 12. Aug 2010 12:59

AW: An lame.exe Bitratevariable übergeben?
 
Ok das ist klar, aber mein Problem ist wie setze ich die Variable "bitrate" in die Kommandozeile von lame rein?

Wie gesagt hab schon alles mögliche versucht.

DeddyH 12. Aug 2010 13:07

AW: An lame.exe Bitratevariable übergeben?
 
Mit Format(), wie oben geschrieben.

OrNEC 12. Aug 2010 13:11

AW: An lame.exe Bitratevariable übergeben?
 
Sag ma wieso hast du oben "%d %s" und unten dann zwei mal nur %s? :gruebel:

DeddyH 12. Aug 2010 13:14

AW: An lame.exe Bitratevariable übergeben?
 
Weil der erste Parameter im ersten Beispiel eine Zahl ist und im zweiten ein String.

OrNEC 12. Aug 2010 13:22

AW: An lame.exe Bitratevariable übergeben?
 
Hab das jetzt wie folgt und ohne Fehlermeldungen, will aber nicht aufnehmen:

Delphi-Quellcode:
BASS_Encode_Start(chan, Pointer(PWideString(Format('lame %s - "%s"',[bitrate, Verzeichnis]))), BASS_UNICODE, nil, nil);
Irgendwie stehe ich auf dem Schlauch. :pale:

DeddyH 12. Aug 2010 13:24

AW: An lame.exe Bitratevariable übergeben?
 
Bist Du sicher, dass das Leerzeichen dahingehört (vor die Verzeichnisangabe)?

OrNEC 12. Aug 2010 13:31

AW: An lame.exe Bitratevariable übergeben?
 
Zitat:

Zitat von DeddyH (Beitrag 1041545)
Bist Du sicher, dass das Leerzeichen dahingehört (vor die Verzeichnisangabe)?

Ne läuft trotzdem nicht. Liegt das vllt am Pointer oder PWideString?

DeddyH 12. Aug 2010 13:32

AW: An lame.exe Bitratevariable übergeben?
 
Ich hab von BASS keine Ahnung. Wie sieht denn die Signatur von BASS_Encode_Start aus?

OrNEC 12. Aug 2010 13:35

AW: An lame.exe Bitratevariable übergeben?
 
Zitat:

Zitat von deddyh (Beitrag 1041548)
ich hab von bass keine ahnung. Wie sieht denn die signatur von bass_encode_start aus?

123
Delphi-Quellcode:
HENCODE BASS_Encode_Start(
    DWORD handle,
    char *cmdline,
    DWORD flags,
    ENCODEPROC *proc,
    void *user
);

DeddyH 12. Aug 2010 13:45

AW: An lame.exe Bitratevariable übergeben?
 
Geht es so?
Delphi-Quellcode:
BASS_Encode_Start(chan, PWideChar(Format('lame %s - "%s"',[bitrate, Verzeichnis])), BASS_UNICODE, nil, nil);

OrNEC 12. Aug 2010 13:48

AW: An lame.exe Bitratevariable übergeben?
 
Zitat:

Zitat von DeddyH (Beitrag 1041555)
Geht es so?
Delphi-Quellcode:
BASS_Encode_Start(chan, PWideChar(Format('lame %s - "%s"',[bitrate, Verzeichnis])), BASS_UNICODE, nil, nil);

Leider nicht, bekomme die Fehlermeldung, Inkompatible Typen 'WideString' und 'Char'. Der Pointer ist den Unicode wichtig.

DeddyH 12. Aug 2010 14:08

AW: An lame.exe Bitratevariable übergeben?
 
Und mit PWideString statt PWideChar? Eigentlich müsste die Programmierhilfe Dir sagen, welche Typen da genau erwartet werden.

[edit] Ich bin da gerade auf einen Thread gestoßen: http://www.un4seen.com/forum/?action...e;topic=9680.0[/edit]

OrNEC 12. Aug 2010 14:16

AW: An lame.exe Bitratevariable übergeben?
 
Hab jetzt die Frage im bass Forum gestellt, mal schauen, ob mir jemand helfen kann.

DeddyH 12. Aug 2010 14:22

AW: An lame.exe Bitratevariable übergeben?
 
Erscheint mir sinnvoll ;)

OrNEC 12. Aug 2010 14:27

AW: An lame.exe Bitratevariable übergeben?
 
Aber ich hab schon Plan B :-D

Delphi-Quellcode:
if Bitrate=Auto then
 BASS_Encode_Start(chan, Pointer(PWideString('lame -h - "' + Verzeichnis + '"')), BASS_UNICODE, nil, nil)
else if Bitrate=32 then
 BASS_Encode_Start(chan, Pointer(PWideString('lame -b 32 - "' + Verzeichnis + '"')), BASS_UNICODE, nil, nil)
else if Bitrate=48 then
 BASS_Encode_Start(chan, Pointer(PWideString('lame -b 48 - "' + Verzeichnis + '"')), BASS_UNICODE, nil, nil)
else if Bitrate=64 then
 BASS_Encode_Start(chan, Pointer(PWideString('lame -b 64 - "' + Verzeichnis + '"')), BASS_UNICODE, nil, nil)
...

DeddyH 12. Aug 2010 14:32

AW: An lame.exe Bitratevariable übergeben?
 
Was ist denn, wenn Du mal den kompletten Pfad zu lame.exe angibst?

turboPASCAL 12. Aug 2010 14:37

AW: An lame.exe Bitratevariable übergeben?
 
Mal so nebenbei, es gibt auch eine "lame.dll" und bei einer Variablen Bit-Rate muss man keine Bit-Rate angeben da diese ja
variabel ist. ;)

OrNEC 12. Aug 2010 14:39

AW: An lame.exe Bitratevariable übergeben?
 
Zitat:

Zitat von DeddyH (Beitrag 1041572)
Was ist denn, wenn Du mal den kompletten Pfad zu lame.exe angibst?

Hm.... wie geht das denn noch ma? :?

Delphi-Quellcode:
ProgPath:=ExtractFilePath(ParamStr(0));
Wie beziehe ich das jetzt auf die lame Datei? :gruebel:

DeddyH 12. Aug 2010 14:41

AW: An lame.exe Bitratevariable übergeben?
 
Liegt die im selben Verzeichnis wie Dein Programm? BTW: bist Du sicher, dass Du eine lame.exe hast, die mit Unicode-Dateinamen umgehen kann? Wenn ich das eben richtig gelesen habe, geht das erst in Version 3.99 und dort auch nur experimentell.

OrNEC 12. Aug 2010 15:05

AW: An lame.exe Bitratevariable übergeben?
 
Zitat:

Zitat von DeddyH (Beitrag 1041576)
Liegt die im selben Verzeichnis wie Dein Programm? BTW: bist Du sicher, dass Du eine lame.exe hast, die mit Unicode-Dateinamen umgehen kann? Wenn ich das eben richtig gelesen habe, geht das erst in Version 3.99 und dort auch nur experimentell.

Ja ich hab die 3.99 Version. Also es liegt nicht an der Version. Und es liegt auch im selben Verzeichnis.

DeddyH 12. Aug 2010 15:08

AW: An lame.exe Bitratevariable übergeben?
 
Dann wäre der absolute Pfad dorthin
Delphi-Quellcode:
ExtractFilePath(ParamStr(0)) + 'lame.exe'

OrNEC 12. Aug 2010 15:50

AW: An lame.exe Bitratevariable übergeben?
 
Also das Format %s kann kein Unicode, liegt das vllt daran? :gruebel:
Obwohl ich erst mal nur mit deutschen Strings teste.

Zitat:

Etwas später...
Ich hab's :dancer::bounce2::cheers::hello:

Das lag am Format, hab's durch WideFormat ersetzt und es läuft wie geschmiert.

Delphi-Quellcode:
BASS_Encode_Start(chan, Pointer(PWideString(WideFormat(ExtractFilePath(ParamStr(0)) + 'lame.exe %s - "%s"',[bitrate, DasVerzeichnis]))), BASS_UNICODE, nil, nil);

DeddyH 12. Aug 2010 15:55

AW: An lame.exe Bitratevariable übergeben?
 
Format() kann kein Unicode? Vielleicht hast Du versehentlich die falsche Variante erwischt, versuch es doch mal mit SysUtils.Format. Laut Hilfe ist das immer noch ein String, unter Delphi 2009/2010 müsste es also ein Unicode-String sein. Wenn nicht, weiß ich auch nicht weiter, mein Delphi hat mit Unicode nix am Hut.

OrNEC 12. Aug 2010 16:47

AW: An lame.exe Bitratevariable übergeben?
 
Ich hab Delphi 7PE, da kann das Format noch kein Unicode, mit WideFormat aber schon. :-D


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