Advertisement

Skype call recording with bookmarked, mind-mapped notes

I've been perfecting a very specific efficiency aspect of my workflow: taking notes during Skype calls. I use a Skype-in number as my primary phone number, and -- with permission -- record client calls for future reference. I can't tell you how many times this has come in handy. On long calls, though, going back and finding a specific point where something was mentioned can be a time-consuming hassle. What I wanted was the ability to record a Skype call while taking notes, and to then be able to reference my (abbreviated) notes back to the exact point where they were taken in the conversation.

I've played around extensively with doing this in Pear Note and Transcriva, and both work very well once you get the audio routing right (Soundflower is gold). However, I love taking my notes in a mind map format, and usually create a MindManager map before I start a call. This is especially valuable with long, long calls where keeping things organized and grouped on the fly as the conversation meanders and backtracks can be vital. So I donned my AppleScript hat and started seeing what I could do.

I'm using Audio Hijack Pro and Mindjet MindManager 7 Mac in these scripts. I had these readily available and they both have excellent AppleScript dictionaries, thus were conducive to satisfying my requirements. A little hacking could make these work with a variety of other applications. To set this up in Audio Hijack, I used the default Skype session and had my scripts check to see if we were recording, starting it up if we weren't. From that point, I could add quick bookmarks to my MindManager topics during the conversation. When I read back through my notes, I can instantly play back the associated part of the conversation. Read on to find out how I did it!

Record a bookmark

The following code will add a callout to the current topic in Mindjet MindManager. Assigned to a hotkey in something like FastScripts or Spark, it allows rapid bookmarking of the audio while taking notes. The basic elements are just a check to see if we're hijacking and recording Skype in Audio Hijack Pro, start doing so if we're not, and then grabbing the current recording time. The rest of the script is MindManager-specific, but could be altered to work with most note-taking applications which allow scripting. You just need to add the marker in a way that will be readable when you want to play the bookmark back. Inline notes in TextMate or VoodooPad could be accomplished as long as you can read the current line and extract the marker format. Here's the script for Audio Hijack and MindManager:

tell application "System Events" to set _frontapp to item 1 of ¬ ((name of processes where frontmost is true) as list) if _frontapp is not equal to "Mindjet MindManager" then tell application "Audio Hijack Pro" to activate tell application "Mindjet MindManager" to activate end if tell application "Audio Hijack Pro" set _ses to session "Skype" if hijacked of _ses is false then start hijacking _ses if recording of _ses is false then start recording _ses set _time to get current recording time of _ses if _time > 0 then tell application "Mindjet MindManager" tell document 1 set _topic to item 1 of (get selection) if _topic is central topic then set _newTopic to make new subtopic for _topic make new callout for _newTopic with properties {name:_time} select {_newTopic} else make new callout for _topic with properties {name:_time} end if end tell end tell end if end tell

Read a bookmark

Now we've got a map full of little "timecode" bookmarks, shown as callout topics (which you can hide from the View->Show & Hide menu, if you want). What we want to do is press a hotkey while a certain topic is selected and play back the appropriate portion of the audio file. I should mention that the last thing I do after I stop recording is to take the final audio file and drag it from Audio Hijack Pro to the central topic of the notes map, allowing it to create a new node with a hyperlink to the file. Right now, I'm doing this manually, but thanks to Audio Hijack's post processing script capabilities, you could easily automate this last step. When I open the notes back up, I just click the hyperlink to load the audio into Quicktime Player, which I then control with my bookmark-reading hotkey, as well as some basic controls mapped to function keys.

Here's the script, which I'm triggering with control-n (^N) from a selected topic in MindManager.

property preroll : 5 property postroll : 5 tell application "Mindjet MindManager" tell document 1 set _topic to item 1 of (get selection) set _colist to callouts of _topic if (count of _colist) > 1 then set _floor to 9999999 set _ceiling to 0 repeat with _co in _colist set _int to (name of _co as integer) if _int < _floor then set _floor to _int if _int > _ceiling then set _ceiling to _int end repeat tell application "QuickTime Player" tell document 1 set selection start to ((_floor - preroll) * (time scale)) set selection end to ((_ceiling + postroll) * (time scale)) set play selection only to true set current time to selection start play end tell end tell else set _co to name of item 1 of _colist as integer tell application "QuickTime Player" tell document 1 set play selection only to false clear set current time to ((_co - preroll) * (time scale)) play end tell end tell end if end tell end tell

We set up some properties (preroll and postroll) which determine how much padding we'll play when jumping to a selection. This is handy for me since I rarely start a note and bookmark it at the exact moment someone begins saying something; I'm not sure that's within the realm of human possibility, barring prescient abilities. The bulkiest part of the script is actually a handler if more than one bookmark is found on a single note, in which case it finds the earliest and latest timestamps and creates a selection in the audio file (with the padding) and plays back the full range. Otherwise, it just finds the timestamp, locates that spot in the audio file and starts playing.

This is working well for now, but will probably see some refinement over time. If you take the script and improve it, or modify it to work with other applications, I'd love to hear back from you!