Skip to content

Google Summer of Code 2012

stefanha edited this page Mar 1, 2012 · 2 revisions

We are applying for Google Summer of Code 2012!

Interested students must get in touch via IRC or email the mentor before the GSoC application deadline. We feel it is essential to chat about your project idea and get to know you before selecting students.

Links

Project Ideas

VST plugin mode

Audio software under Windows often supports the VST plugin interface. VST can be used to send audio to one or more plugins which get a chance to process it.

VST plugin mode would allow Wahjam to run as a plugin inside another program. This makes it possible to use Wahjam in a Digital Audio Workstation (DAW) or with effects software like GuitarRig. VST plugin mode also makes it possible for Wahjam to work together with virtual instruments and DJing software.

This project must use the VeSTige header files and not the official Steinberg SDK due to licensing restrictions. Please do not download, install, or accept the Steinberg SDK license. Instead, look at the VeSTige header files and open source applications which make use of them.

Note that this project is mainly aimed at the Windows platform. Linux typically uses JACK instead.

Enhanced metronome bar with chord progression display

The metronome bar shows each beat and allows users to visually orient themselves. This concept can be improved by displaying chords along with the beats. This will require developing a custom Qt widget.

When a user posts something that looks like a chord progression in the chat, the metronome bar should automatically display the chords. The chat parser should also recognize time signatures such as 4/4 and 3/4, if specified, so that chord durations can be calculated correctly.

Ikkei Shimomura has developed a HTML5 demo to demonstrate this concept, see the link below.

Scriptable GUI and extensions support

The current Wahjam Qt GUI client is written entirely in C++. It does not make use of declarative GUI design languages or support extensions.

In order to open up the possibilities of Wahjam and attract a wider developer community, a new client architecture has been discussed for Wahjam 2.0. The idea is to push out as much client functionality as makes sense into declarative languages and scripting. The core of Wahjam would be a set of classes exposed to Javascript which model the client and network protocol. The GUI would make use of this API and extension scripts would be possible to add menus, chat features, and so on.

This is a challenging project that aims to shape the future of the Wahjam client. Prior experience with Javascript, especially Firefox or Chrome extensions, is preferred. Experience with Qt is also a plus.

The goal is a next-generation Qt client that reimplements the GUI using declarative and scripting languages - with a basic API to show that extension development is possible. Since Summer of Code is only 12 weeks we do not expect a full reimplementation of the Wahjam Qt client, but you should aim to produce a solid subset of client functionality.

Time synchronization with third-party software

Wahjam works well on its own but currently has no way to synchronize tempo with external audio software such as Digital Audio Workstations (DAW) or DJing software. As a result, it often takes several tries to synchronize drum loops or samples with Wahjam's metronome.

There are several mechanisms to synchronize time between audio applications, depending on the audio API. Wahjam uses PortAudio for cross-platform audio. PortAudio provides time stamps internally but no way to synchronize with external applications.

Your task is to investigate how to solve this problem, preferrably in a cross-platform way. Perhaps adding MIDI support to Wahjam will make it possible to use MIDI timing information and work with a wide variety of audio applications. Alternatively it may be possible to contribute patches to the PortAudio library and work together with their community to extend the API. Finally, audio APIs such as JACK offer time synchronization support and it may be possible to bypass PortAudio in some cases.