P A N
P A N

Reputation: 5922

AppleScript for QuickTime recording: "AppleEvent handler failed"

I am using this AppleScript, that intends to activate QuickTime on OS X and automatically start recording audio.

When running the debug in Automator, the script seems to suddenly stop at the line "set lastLength to duration of x", and throws the error:

"AppleEvent handler failed".

What may be wrong with the script?

on run {input, parameters}

    tell application "QuickTime Player"
        activate
        set x to new audio recording
        start x
        delay 1
        set lastLength to duration of x
        delay 1
        set newLength to duration of x
        try
            repeat while lastLength is not equal to newLength
                delay 1
                set lastLength to newLength
                set newLength to duration of x
            end repeat
        end try --  display alert name of document 1
        set v to file of front document
        set audioNotePath to "/Users/me/Dropbox/Inbox/- Voice Memos"
        set thePath to POSIX path of audioNotePath
        set dateVariable to do shell script "date '+%m.%d.%y'"
        set timeVariable to do shell script "date +'%l.%M %p'"
        tell x to activate
        delay 1
        tell application "System Events"
            keystroke "w" using {command down}
            delay 1
            keystroke thePath
            delay 1
            keystroke return
            delay 1
            keystroke "AudioNote "
            keystroke dateVariable
            keystroke " "
            keystroke timeVariable
            delay 1
            click pop up button "Format:" of group 1 of sheet 1 of window "Untitled" of application process "QuickTime Player" of application "System Events"
            delay 1
            key code 125
            delay 1
            keystroke return
            delay 1
            keystroke return
            delay 1
            open thePath
        end tell

        return input
    end tell
end run

Upvotes: 0

Views: 817

Answers (1)

Jon
Jon

Reputation: 1489

If you save the following as a stay open application in Script Editor, when you run the application, it will create a new audio recording and keep checking to see if you have manually stopped the recording. Once you do stop the recording, it will export the file, open it, and quit. If you really want it as an Automator action, just have the Automator action open the script application.

property savePath : "Desktop:" --update e.g.,: "Dropbox:Inbox:- Voice Memos:"
property defaultName : "AudioNote"

my start_recording()

on start_recording()
    tell application "QuickTime Player"
        activate
        tell (new audio recording) to start
    end tell
end start_recording

on export_recording()
    set homeFolder to (path to home folder) as string
    set dateTimeStamp to do shell script "date '+%m%d%y-%H%M%S'"
    set audioNotePath to (homeFolder & savePath & defaultName & " " & dateTimeStamp & ".m4a")
    tell application "QuickTime Player"
        tell document 1
            export in file audioNotePath using settings preset "Audio Only"
            close saving no
        end tell
    end tell
    return audioNotePath
end export_recording

on open_recording(audioNotePath)
    tell application "QuickTime Player" --you could change this if you wanted to open the file in another app
        repeat --keep trying until the file is exported and ready to be opened
            try
                delay 1
                open file audioNotePath
                exit repeat
            end try
        end repeat
    end tell
end open_recording

on idle
    try
        tell application "QuickTime Player" to set documentName to name of document 1
        if (documentName ≠ "Audio Recording") then
            set audioNotePath to my export_recording()
            my open_recording(audioNotePath)
            quit
        end if
    end try
    return 1
end idle

Upvotes: 1

Related Questions