Ich möchte damit eine Reihe eigener .flac Dateien mit Tags versehen.
Ein Test mit dem Terminal funktioniert. Den entsprechenden Terminalaufruf habe ich im Democode als Debugausgabe zum raus kopieren generiert.
Das Problem ist, das exakt der gleiche Aufruf über RunProgram() zwar durchgeht, aber die Tag-Daten pro Tag immer nur bis zum ersten Leerzeichen eingetragen werden. ZB: Anstelle "Pink Floyd" wird nur "Pink getaggt. Das Gleiche auch bei den anderen Tags.
Liegt sicherlich nicht an PB, sondern an die Art des Kommando Aufrufs.
Ich seh da aber nix, wo es da klemmen könnte - eigtl. muß das gehen...
Hab dafür einen Demo-Code gebaut, der das veranschaulicht. Zum Testen ist allerdings eine .flac-Datei und das Paket 'flac' notwendig.
Code: Alles auswählen
;metaflac-test, um eine .flac-Datei zu taggen
;das tool 'metaflac' ist bestandteil des pakets 'flac' und in den offiz. paketquellen vorhanden
EnableExplicit ;deklarierungszwang
Global.s pfd,ku,ti,al
Procedure.s ruf_auf(pn.s,pr.s,f.i)
;startet ein script oder programm & gibt ggf. den ausgabe & exitcode zurück /
;pn= programm-name
;pr= parameter für program-name(kann auch der name/pfad eines weiteren programms/scripts sein(zb. bei sudo)) |
;f= flag: 1=datenausgabe wird benötigt, 2=Exitcode wird benötigt, 0=nichts wird benötigt
Protected pnr.i,ec.i,aus.s
aus = "" ;für kommandozeilenausgabe
pnr = RunProgram(pn, pr, "", #PB_Program_Open | #PB_Program_Read)
If pnr ;wenn programm erfolgreich gestartet
While ProgramRunning(pnr) ; wenn programm noch läuft
If f = 1 And AvailableProgramOutput(pnr) ;wenn das programm daten ausgibt und diese auch benötigt werden (f=1)
aus + ReadProgramString(pnr) + Chr(13) ;programmausgabe (wenn vorhanden) in aus sammeln
EndIf
Wend
ec = ProgramExitCode(pnr) ;exitcode des programms
CloseProgram(pnr) ; Schließt die Verbindung zum Programm
EndIf
Select f ;flag für programmausgabedaten auswerten
Case 1 ;wenn ausgabedaten benötigt
ProcedureReturn aus
Case 2 ;wenn exitcode benötigt
ProcedureReturn Str(ec)
EndSelect
EndProcedure
; -----------------------------------------------------------------------
If ruf_auf("which","metaflac",1) = "" ;prüfen ob das kommandotool 'metaflac' installiert ist // dann wird der Pfad zurückgegeben, sonst leerstring
MessageRequester("metaflc fehlt","Lösung: sudo install flac")
End
EndIf
;pfad zur test.flac datei
pfd = GetHomeDirectory() + "Musik/test.flac" ;ggf. anpassen
; tag-daten:
ku = "Cooler Interpret"
ti = "Super Titel"
al = "Mein Album"
;string zum testen im terminal (einfach aus dem debugger ins terminal kopieren))
Debug "funktioniert im terminal, wie erwartet:"
Debug "metaflac --remove-all-tags --no-utf8-convert --set-tag Artist=" + Chr(34) + ku + Chr(34) + " --set-tag Title=" + Chr(34) + ti + Chr(34) + " --set-tag Album=" + Chr(34) + al + Chr(34) + " " + pfd
;der exakt gleiche aufruf via RunProgramm über ruf_auf() //parameter siehe dort:
ruf_auf("metaflac"," --remove-all-tags --no-utf8-convert --set-tag Artist=" + Chr(34) + ku + Chr(34) + " --set-tag Title=" + Chr(34) + ti + Chr(34) + " --set-tag Album=" + Chr(34) + al + Chr(34) + " " + pfd,0)
;ergebnis: die tag-daten werden je nur bis zum ersten leerzeichen hinzugefügt