![]() |
HulaLoop
Simple cross-platform audio loopback and recording.
|
Aneesh Gokhale, Emanuel Pituch, John McKernan, Neel Patel
There are many technologies for capturing and routing system-wide audio. These technologies vary widely by operating system and can be difficult for developers to interact with and for users to understand. While there are existing technologies that provide a loopback interface for capturing this audio, their features are limited, and none are completely cross-platform. By delivering a library for developers and an easy-to-use UI for average consumers, anyone should be able to visualize, capture, and use their system audio as they see fit.
Our audience includes any computer user who wants to record their system-wide audio or any developer who wants to create software that works with that same audio. Our application should cater to the full spectrum of these users: fully-featured enough to meet the needs of experts but still simple enough for novices.
Several existing options such as jack_capture, Windows Stereo Mix, Virtual Audio Cable, and Soundflower are capable of accessing system-wide audio. These applications serve various purposes: jack_capture can be used on a Linux or Unix based operating systems, Windows Stereo Mix and Virtual Audio Cable are built for Windows, and Soundflower can be used on Mac. All but jack_capture focus on the routing of audio rather than capturing it.
The main limitation with these applications is their inability to provide a consistent and simple cross-platform experience. Many of them work well in their respective environments; we hold, however, that a user should have the freedom to move between environments at will without the setback of learning a new tool. Moreover, some of these tools only provide a command line interface. For users unfamiliar with the command line, this can be a severe limitation. Lastly, all but jack_capture require additional software to record and export audio.
We hope to solve this by crafting a simple, consistent GUI and CLI that are capable of accessing, recording, and exporting system-wide audio on a variety of operating systems.
Since we plan to support a variety of operating systems and configurations, it is necessary that we create a modular design and build system using CMake. We plan to make every effort possible to avoid duplication of work by designing with this in mind. This modular thinking will also simplify the process of assigning and completing work on the team. To enable quick prototyping, modern design, and cross-platform support, our frontend will be written in QML using the QtQuick framework. Our backend will be written in C++ and use the JACK (Linux and OSX) and WASAPI (Windows) APIs to communicate with lower level audio endpoints.
Since the capture program is intended to run in the background while a user performs other tasks, it is imperative that resource usage from our application be as minimal as possible. Compression to the user’s desired bitrate (e.g. 128 kbps) should be applied on-the-fly in order to conserve disk space and extend the maximum possible record duration. Should a recording exceed the maximum file size of 4GB, an additional file should be created and written to, allowing recording to continue.
Since system-wide audio could include sensitive information such as phone calls or private conversations, we must ensure that the user is made aware anytime audio is actively being captured. Though this is not required by desktop operating systems, we aim to present this warning to enforce the good-natured use of our application and ensure the privacy of our users.
We plan to support both a GUI and CLI form of the application. The GUI should be simple and straightforward for all users to navigate and use. The CLI should provide the same set of features and feel comfortable for more advanced users. The install process for both should be intuitive and take less than 3 minutes.
1.8.11