![]() |
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:
Den Parameter "-h" will ich durch die Variable "bitrate" ersetzen, und da komm ich nicht weiter.
//var bitrate: String;
begin //bitrate:='-b 128'; BASS_Encode_Start(chan, Pointer(PWideString('lame -h - "' + Verzeichnis + '"')), BASS_UNICODE, nil, nil); end; Hab schon so versucht und zig anders... also klappt nichts. Wer hilft mir da weiter?
Delphi-Quellcode:
... 'lame "'bitrate'" ...
|
AW: An lame.exe Bitratevariable übergeben?
![]() Zitat:
|
AW: An lame.exe Bitratevariable übergeben?
Hm.... :gruebel:
hilft mir irgendwie nicht weiter, -b192 ist doch keine Variable und die will ich grade. :gruebel: |
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); |
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'; |
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); |
AW: An lame.exe Bitratevariable übergeben?
:shock: :roteyes:
Geht das nicht einfacher? Ok danke, ich schau ma was es sich machen lässt. |
AW: An lame.exe Bitratevariable übergeben?
Klar geht das auch einfacher.
Delphi-Quellcode:
Ist halt nicht so schön strukturiert ;)
var bitrate: integer;
... if bitrate > 0 then brString := '-b ' + IntToStr(bitrate) else brString := '-h'; |
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. |
AW: An lame.exe Bitratevariable übergeben?
Mit Format(), wie oben geschrieben.
|
AW: An lame.exe Bitratevariable übergeben?
Sag ma wieso hast du oben "%d %s" und unten dann zwei mal nur %s? :gruebel:
|
AW: An lame.exe Bitratevariable übergeben?
Weil der erste Parameter im ersten Beispiel eine Zahl ist und im zweiten ein String.
|
AW: An lame.exe Bitratevariable übergeben?
Hab das jetzt wie folgt und ohne Fehlermeldungen, will aber nicht aufnehmen:
Delphi-Quellcode:
Irgendwie stehe ich auf dem Schlauch. :pale:
BASS_Encode_Start(chan, Pointer(PWideString(Format('lame %s - "%s"',[bitrate, Verzeichnis]))), BASS_UNICODE, nil, nil);
|
AW: An lame.exe Bitratevariable übergeben?
Bist Du sicher, dass das Leerzeichen dahingehört (vor die Verzeichnisangabe)?
|
AW: An lame.exe Bitratevariable übergeben?
Zitat:
|
AW: An lame.exe Bitratevariable übergeben?
Ich hab von BASS keine Ahnung. Wie sieht denn die Signatur von BASS_Encode_Start aus?
|
AW: An lame.exe Bitratevariable übergeben?
Zitat:
Delphi-Quellcode:
HENCODE BASS_Encode_Start(
DWORD handle, char *cmdline, DWORD flags, ENCODEPROC *proc, void *user ); |
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);
|
AW: An lame.exe Bitratevariable übergeben?
Zitat:
|
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: ![]() |
AW: An lame.exe Bitratevariable übergeben?
Hab jetzt die Frage im bass Forum gestellt, mal schauen, ob mir jemand helfen kann.
|
AW: An lame.exe Bitratevariable übergeben?
Erscheint mir sinnvoll ;)
|
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) ... |
AW: An lame.exe Bitratevariable übergeben?
Was ist denn, wenn Du mal den kompletten Pfad zu lame.exe angibst?
|
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. ;) |
AW: An lame.exe Bitratevariable übergeben?
Zitat:
Delphi-Quellcode:
Wie beziehe ich das jetzt auf die lame Datei? :gruebel:
ProgPath:=ExtractFilePath(ParamStr(0));
|
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.
|
AW: An lame.exe Bitratevariable übergeben?
Zitat:
|
AW: An lame.exe Bitratevariable übergeben?
Dann wäre der absolute Pfad dorthin
Delphi-Quellcode:
ExtractFilePath(ParamStr(0)) + 'lame.exe'
|
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:
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);
|
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.
|
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