Skip to content

jwmann/kulu

 
 

Repository files navigation

logo

Kulu GitHub license GitHub release travis-ci

A better audio output switcher for OS X

TL;DR

Kulu helps users to switch between audio outputs by user-defined shortcuts.

A little background

I use 2 audio outputs on my Mac, my speakers, and my headphones. When I'd receive a Skype call or the situation didn't allow loud noises, I would need to quickly switch my audio output to my headphones and then back to my speakers after the call was over.

Initially I was using the SoundSource app made by RogueAmoeba to switch the output from a drop down menu in the top bar. Eventually, that became quite tedious by constantly having to grab my mouse, find the icon amidst all the others, click, find the output I want within the list and then click again.

I decided to create an Applescript to handle this task. Essentially the Applescript was bound to a workflow, which was bound to a key binding. This allowed me to press Cmd + F12 to toggle between my audio outputs. The only drawback was that the code executed slugglishly, sometimes taking up to 5 seconds to switch. It also had trouble detecting the key binding for some reason.

After a few months using the Applescript method, I discovered an app called Kawa. You should check it out if you haven't but essentially this is an open-source app that allows you to switch your keyboard inputs via keyboard bindings. I found this concept so similar to my output issue, with a proper native app framework already in place as well a proper testing suite already configured. I felt compelled to fork this project and modify it to work with audio outputs instead of keyboard inputs.

All original code credit to noraesae and his Kawa app.

Demo

demo

For better quality, there is a video version of this demo on Vimeo.

Install

The prebuilt binaries can be found in Releases.

Unzip Kulu.zip and move Kulu.app to Applications.

Preferences

Preferences can be found in a preference window. The window can be opened by clicking the menubar icon of Kulu or launching Kulu again.

  • General Stuff
    • Show Menubar Icon
      Show the icon of Kulu in the OS X menubar. When you click the icon, a preference window will be opened. If this option is unset, the icon will be hidden and the preference window can be opened when launching Kulu again.
    • Launch Kulu on startup
      Add Kulu to startup items.
  • Shortcut
    • Use an advanced method to switch input sources
      There is a known problem when programminly switching between complex input sources such as CJK layouts. This option enables a workaround to fix the problem. In other words, if you find no problem using Kulu, please ignore this option. To use this option, the global shortcut of Select next source in Input menu should be set to Alt+Command+Space, which may be set by default. Unless the shortcut is set correctly and Kulu works as intended, you can check if the shortcut is set correctly in System Preferences > Keyboard > Shortcuts > Input Sources.

Development

We use Carthage as a dependency manager. You can find the latest releases of Carthage here, or just install it with Homebrew.

$ brew update
$ brew install carthage

To clone the Git repository of Kulu and install dependencies:

$ git clone git@github.com:jwmann/kulu.git
$ carthage bootstrap

To open the Xcode project of Kulu:

$ open kulu.xcodeproj

You can surely open the project from Xcode.

Kulu can be built with the Product menu in Xcode as other Xcode projects are built. If you prefer using command line, just run the build script.

$ ./build.sh

It will build the project and export Kulu.app to the project root.

Help!

The application is quite simple and this README contains quite most of it. When you have a problem using Kulu, I would recommend reading this README again, carefully.

If there's still a problem, please upload it as an issue on Issues.

License

Kulu is released under the MIT License.

About

A better output source switcher for OS X

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Swift 97.8%
  • Objective-C 1.3%
  • Shell 0.9%