Thread wurde vom System oder vom Community-Team geschlossen.

GarageBand Export via Applescript kann nicht auf Menü zugreifen

Ich versuche gerade mit applescript das exportieren von GarageBand Projekten zu automatisieren. Meine Systemsprache ist aktuell Englisch und ich bin auch MacOS 14.1.2 mit der neusten Version von GarageBand.


Mein Problem ist, dass ich eine Fehlermeldung bekomme, wenn ich versuche das Menü für den Export mit folgendem Code zu erreichen.


Code:

tell application "System Events"

tell process "GarageBand"

tell menu bar 1

tell menu bar item "Share"

tell menu "Share"

tell menu item "Export Song to Disk ..."

click

end tell

end tell

end tell

end tell

end tell


Fehlermeldung:

error "System Events got an error: Can’t get menu item \"Export Song to Disk ...\" of menu \"Share\" of menu bar item \"Share\" of menu bar 1 of process \"GarageBand\"." number -1728 from menu item "Export Song to Disk ..." of menu "Share" of menu bar item "Share" of menu bar 1 of process "GarageBand"



Ich bin nicht sonderlich gut in applescript und mir ist bewusst, dass das nicht die eleganteste Lösung ist aber ich hatte gehofft, dass es die fehlerfreiste ist. Hat jemand eine Idee was das Problem ist?

MacBook Pro 14″, macOS 14.1

Gepostet am 03. Dez. 2023 14:04

Antworten
Frage gekennzeichnet als Höchstrangige Antwort

Gepostet am 03. Dez. 2023 15:28

Hallo Zaphod-Beeblebrox


Es ist großartig, dass du dich daran machst, mit AppleScript die Automatisierung des Exportierens von GarageBand-Projekten zu realisieren. Die Fehlermeldung deutet darauf hin, dass das Menüelement möglicherweise nicht auf die erwartete Weise erreicht wird. Dein Ansatz ist bereits solide, aber ich schlage vor, die Hierarchie zu vereinfachen und sicherzustellen, dass das Menüelement tatsächlich existiert, bevor darauf zugegriffen wird.


Hier sind einige mögliche Verbesserungen für deinen AppleScript-Code:


tell application "System Events"
    tell process "GarageBand"
        -- Erstelle eine Variable für das Menü "Share", um die Hierarchie zu vereinfachen
        set shareMenu to menu "Share" of menu bar item "Share" of menu bar 1
        
        -- Überprüfe, ob das Menü "Export Song to Disk ..." existiert, bevor du darauf zugreifst
        if exists menu item "Export Song to Disk ..." of shareMenu then
            click menu item "Export Song to Disk ..." of shareMenu
        else
            display dialog "Export Song to Disk ... not found in Share menu."
        end if
    end tell
end tell 


Diese Überarbeitung verwendet eine Variable (shareMenu), um die Hierarchie des Menüs zu vereinfachen. Zudem wird vor dem Klicken des Menüelements überprüft, ob es überhaupt existiert, um Fehler zu vermeiden.


Wenn das Problem weiterhin besteht, könnte es hilfreich sein, die genaue Menüstruktur von GarageBand zu überprüfen, indem du beispielsweise das "UI Browser" Tool in den "Entwicklertools" von Xcode verwendest. Dadurch kannst du die genauen Bezeichnungen der Menüpunkte ermitteln. Alternativ verwende meinen Hinweis im Benutzer Tipp Portal:GUI Funktionen unter macOS individualisieren / neu erstellen - von PreCognition


Bitte denk daran, dass AppleScript sehr abhängig von der genauen Benutzeroberfläche des Programms ist, und Änderungen in zukünftigen Versionen können das Skript beeinflussen.


Ich hoffe, das war hilfreich. Falls du noch weitere Fragen hast, stehe ich dir gerne zur Verfügung. Ansonsten lass uns wissen, ob deine Anfrage ausreichend beantwortet wurde. Vielen Dank und beste Grüße!


Ähnliche Fragen

3 Antworten
Frage gekennzeichnet als Höchstrangige Antwort

03. Dez. 2023 15:28 als Antwort auf Zaphod-Beeblebrox

Hallo Zaphod-Beeblebrox


Es ist großartig, dass du dich daran machst, mit AppleScript die Automatisierung des Exportierens von GarageBand-Projekten zu realisieren. Die Fehlermeldung deutet darauf hin, dass das Menüelement möglicherweise nicht auf die erwartete Weise erreicht wird. Dein Ansatz ist bereits solide, aber ich schlage vor, die Hierarchie zu vereinfachen und sicherzustellen, dass das Menüelement tatsächlich existiert, bevor darauf zugegriffen wird.


Hier sind einige mögliche Verbesserungen für deinen AppleScript-Code:


tell application "System Events"
    tell process "GarageBand"
        -- Erstelle eine Variable für das Menü "Share", um die Hierarchie zu vereinfachen
        set shareMenu to menu "Share" of menu bar item "Share" of menu bar 1
        
        -- Überprüfe, ob das Menü "Export Song to Disk ..." existiert, bevor du darauf zugreifst
        if exists menu item "Export Song to Disk ..." of shareMenu then
            click menu item "Export Song to Disk ..." of shareMenu
        else
            display dialog "Export Song to Disk ... not found in Share menu."
        end if
    end tell
end tell 


Diese Überarbeitung verwendet eine Variable (shareMenu), um die Hierarchie des Menüs zu vereinfachen. Zudem wird vor dem Klicken des Menüelements überprüft, ob es überhaupt existiert, um Fehler zu vermeiden.


Wenn das Problem weiterhin besteht, könnte es hilfreich sein, die genaue Menüstruktur von GarageBand zu überprüfen, indem du beispielsweise das "UI Browser" Tool in den "Entwicklertools" von Xcode verwendest. Dadurch kannst du die genauen Bezeichnungen der Menüpunkte ermitteln. Alternativ verwende meinen Hinweis im Benutzer Tipp Portal:GUI Funktionen unter macOS individualisieren / neu erstellen - von PreCognition


Bitte denk daran, dass AppleScript sehr abhängig von der genauen Benutzeroberfläche des Programms ist, und Änderungen in zukünftigen Versionen können das Skript beeinflussen.


Ich hoffe, das war hilfreich. Falls du noch weitere Fragen hast, stehe ich dir gerne zur Verfügung. Ansonsten lass uns wissen, ob deine Anfrage ausreichend beantwortet wurde. Vielen Dank und beste Grüße!


03. Dez. 2023 15:43 als Antwort auf PreCognition

Vielen Dank für die schnelle und ausfürhliche Antwort. Deine Verbesserung löst natürlich das Problem, dass die Fehlermeldung erscheint, jedoch wird "Export Song to Disk ..." immer noch nicht gefunden. Ich hab es auch schon ohne das Leerzeichen vor den Punkten versucht. Der Code läuft jetzt zwar durch, exportiert aber keins der Projekte. Ich füge mal noch meinen restlichen Code an, vielleicht liegt der Fehler auch wo anders.



-- Set the source folder where GarageBand projects are located
set sourceFolderPath to "/Volumes/xxx"

-- Set the destination folder where the exported WAV files will be saved
set destinationFolderPath to "/Volumes/xxx/audios"

-- Get a list of GarageBand projects in the source folder
tell application "System Events"
	set garageBandFiles to name of every file of folder sourceFolderPath whose name extension is "band"
end tell

-- Export each GarageBand project as a WAV file
repeat with projectName in garageBandFiles
	set projectPath to sourceFolderPath & "/" & projectName
	set exportName to text 1 thru -6 of projectName -- Remove the ".band" extension

	tell application "Finder"
		open POSIX file projectPath as string
		delay 7 
	end tell

	tell application "System Events"
		tell process "GarageBand"
			-- Erstelle eine Variable für das Menü "Share", um die Hierarchie zu vereinfachen
			set shareMenu to menu "Share" of menu bar item "Share" of menu bar 1

			-- Überprüfe, ob das Menü "Export Song to Disk ..." existiert, bevor du darauf zugreifst
			if exists menu item "Export Song to Disk..." of shareMenu then
				click menu item "Export Song to Disk..." of shareMenu
			else
				display dialog "Export Song to Disk ... not found in Share menu."
			end if
			delay 2
			keystroke exportName as string -- fill title of the document in save window
			delay 2
			keystroke "g" using {command down, shift down} -- open goto dialog
			delay 2
			keystroke destinationFolderPath -- path from Documents folder
			delay 2
			keystroke return -- close go to dialog with enter key
			delay 2
			click button "Exportieren" of sheet 1 of window 1
			delay 2

		end tell
	end tell

	delay 45


	tell application "System Events"
		if exists window 1 of process "GarageBand" then
			tell application "GarageBand" to quit saving no
		end if
	end tell

	display notification "Export of " & projectName & " completed." with title "GarageBand Export"
end repeat

03. Dez. 2023 18:06 als Antwort auf Zaphod-Beeblebrox

Hallo Zaphod-Beeblebrox


hier sind einige mögliche (ungetestete) Verbesserungen und Anpassungen für einen erfolgreichen Exportvorgang:

-- Set the source folder where GarageBand projects are located
set sourceFolderPath to "/Volumes/xxx"

-- Set the destination folder where the exported WAV files will be saved
set destinationFolderPath to "/Volumes/xxx/audios"

-- Get a list of GarageBand projects in the source folder
tell application "System Events"
    set garageBandFiles to name of every file of folder sourceFolderPath whose name extension is "band"
end tell

-- Export each GarageBand project as a WAV file
repeat with projectName in garageBandFiles
    set projectPath to sourceFolderPath & "/" & projectName
    set exportName to text 1 thru -6 of projectName -- Remove the ".band" extension

    tell application "GarageBand"
        activate
        open projectPath
        delay 5 -- Adjust delay based on your system's performance

        tell application "System Events"
            tell process "GarageBand"
                set shareMenu to menu "Share" of menu bar item "Share" of menu bar 1
                
                -- Check if the menu item "Export Song to Disk..." exists before accessing it
                if exists menu item "Export Song to Disk..." of shareMenu then
                    click menu item "Export Song to Disk..." of shareMenu
                else
                    display dialog "Export Song to Disk ... not found in Share menu."
                end if
                
                delay 2
                keystroke exportName
                delay 2
                keystroke "g" using {command down, shift down}
                delay 2
                keystroke destinationFolderPath
                delay 2
                keystroke return
                delay 2
                click button "Export" of sheet 1 of window 1
                delay 2
            end tell
        end tell

        delay 45

        tell application "System Events"
            if exists window 1 of process "GarageBand" then
                tell application "GarageBand" to quit saving no
            end if
        end tell
    end tell

    display notification "Export of " & projectName & " completed." with title "GarageBand Export"
end repeat


Dennoch unterschätze nicht die Möglichkeiten vom UI Browser der vor Jahren noch sehr viel Geld / hunderte Euro gekostet hat und inzwischen frei erhältlich ist, zumal das Tool auch fertige Teillösungen für dein Script erzeugt.


Ich werde nicht immer online sein, sende Dir hiermit die besten Grüße & weiterhin viel Erfolg! 🌺

GarageBand Export via Applescript kann nicht auf Menü zugreifen

Willkommen in der Apple Support Community
Ein Forum, in dem Apple-Kunden sich gegenseitig mit ihren Produkten helfen. Melde dich mit deinem Apple Account an, um Mitglied zu werden.