LWN.net Logo

Audacity gets new functionality via Google Summer of Code

By Forrest Cook
September 17, 2008
Audacity is a popular and award winning multi-track open-source and cross-platform audio editor project that is built on the wxWidgets GUI library. LWN looked at Audacity in 2006. The Audacity project announced its participation in the 2008 Google Summer of Code student code writing event on April 21, 2008. GSoC 2008 is wrapping up and the Audacity site notes the progress made this summer:

Four students participating with Audacity in Google Summer of Code successfully completed their projects, and their code will be in future versions of Audacity. The four projects were: FFmpeg support, to greatly increase the range of file formats that can be imported and exported. New GUI classes for future use in displaying audio tracks. On-demand/level-of-detail file loading, for near-instant loading and editing of uncompressed files. Sticky labels that stay with the audio through cut and paste.

The Audacity GSoC projects page details the goals and achievements made by the students, we'll examine the results.

[Audacity]

Руслан Ижбулатов worked on adding FFmpeg support to Audacity in order to allow importing and exporting of a wider variety of audio file types. From the FFmpeg site: "FFmpeg is a complete solution to record, convert and stream audio and video. It includes libavcodec, the leading audio/video codec library. FFmpeg is developed under Linux, but it can compiled under most operating systems, including Windows." Audacity natively supports the WAV AIFF, MP3, Ogg Vorbis, and FLAC formats, the FFmpeg library supports those, and adds support for the GSM WAV, MP2, M4A (AAC), AMR, WMA, and many more formats. The Project Progress page has details on how to access this new functionality. The page also includes the full list of FFmpeg supported formats. The FFmpeg library can linked and loaded dynamically at run time, this allows it to be distributed as a separate package and removes any CODEC licensing issues from Audacity.

Johannes Kulick added two new wxWidgets GUI classes and used those in Audacity to improve the display of audio tracks. His project abstract states: "Audacitys main user interface is the track panel. Its GUI architecture is written from scratch by the audacity team and as the team noticed the TrackPanel.cpp is a horrendous mess which is neither easy to maintain nor to extend. There are the wxWidgets classes wxGridSizer and wxFlexGridSizer which fit well in the requirements of the track panel. They arrange its content in a table. While in wxGridSizer all rows have the same height and all columns have the same width, in wxFlexGridSizer classes each row can have its own height and each column can have its own width. This is the way the Track panel is arranged, too, but there is one more thing which is important: the ability to drag and drop each track and drag the height of each track as well. And here is the big disadvantage of the wxWidgets classes: they lack the ability of being dragable. If there were classes which have these ability this would be a big step to get a cleaner track panel architecture for Audacity. So the project idea is that I will implement two classes wxDragGridSizer and wxDragFlexGridSizer which have the ability to do exactly these things." The Project Progress tracks the steps that were done to achieve the end results and the additional report covers extra work that was done to extend support for the wxAUI (Advanced User Interface) toolbar and window docking library.

Michael Chinen's project involved on-demand/level-of-detail file loading for near-instant loading and editing of uncompressed files. The Project Progress explains: "The QuickLoad project added near-instant loading of PCM uncompressed files without waiting for waveform calculation to complete. Playing and editing is now possible on demand at any point in the track while the waveform image is still being calculated in the background." The Description section further clarifies the new capability: "Previously, it might be necessary to wait several minutes for the file to load and be useable while the waveform computation was completed. The waveform image will draw itself automatically during computation, but users can move the point in the file from which computation takes place, thus allowing them to view and edit any point in the file instantly. " This project also allowed for further improvements to Audacity: "One of the reasons the Quickload project was approved was because the OD framework will provide a method in which other tasks, such as loading non-wav formats, processing effects, and exporting, can be made multithreaded. The current implementation of the OD framework is written generally so that this is possible, which means that future implementations of OD tasks will be done writing a minimum of code. Taking advantage of polymorphism, this kind of thing should get easier and easier as more tasks are made to support OD."

Mark Deutsch worked on adding sticky labels that stay with the audio through cut and paste operations. The Project Progress explains: "Label Track Enhancements removed a long-standing limitation that Audacity's labels did not stick to the audio track and move and edit with them." Further: "The biggest single addition from this project was the concept of linking tracks. Two or more linked tracks form a group. When an action is performed in one track, the other tracks in the group mirror that action. For example, if a group consists of one audio track and one label track, deleting part of the audio track will also delete that part of the label track. This linking is done implicitly, and depends on the layout of the tracks. A group is defined as a set of contiguous audio tracks followed by a contiguous set of label tracks." The sticky labels addition also improves the way Audacity handles insertions and other operations: "This functionality doesn't only handle deletes, though. Inserting audio, whether through pasting or using the "Generate" functions also shifts the grouped tracks correspondingly. The "Change" functions (Change Speed/Tempo/Pitch) are also supported. Slowing down a track will insert silence into linked tracks to keep all the tracks sync'd. Similarly, speeding up a track inserts silence into that track to achieve the same result."

Lars Luthman was unable to finish the fifth project, Support for the LV2 plugin architecture, but he did organize the problem space and produce some code that should be useful for future work. The Project Progress report shows what was accomplished, and the main Audacity projects document explains how it ended: "The project which did not pass still had plenty of good coding work and skill behind it, indeed believed to be fully working on the linux platform. It was communication, possibly to modify the goals shortly after mid term, that really let it down."

The 2008 GSoC projects added a number of useful new capabilities to Audacity. The wxWidgets project also benefited from the work with some enhancements that can be used by other projects. Once again, GSoC proves itself as a program that can focus in on areas of open-source applications that need improvements, and produce useful results in a short time span. GSoC is successful in bringing the guidance of experienced mentors together with the coding muscle of inspired students.


(Log in to post comments)

Audacity gets new functionality via Google Summer of Code

Posted Sep 18, 2008 6:24 UTC (Thu) by jwoithe (subscriber, #10521) [Link]

A nitpick: in a few locations within this post, "Ardour" has been used instead of "Audacity". It's minor, but might create confusion for people, especially since both Audacity and Ardour are in the audio editing game.

The locations I noticed were in the third paragraph, and in the paragraph dealing with the fifth project.

Audacity gets new functionality via Google Summer of Code

Posted Sep 19, 2008 10:52 UTC (Fri) by jpetso (guest, #36230) [Link]

Also...

"(...) FFmpeg library supports those, and ads support for (...)"
ads -> adds

"The FFmpeg library can linked and loaded dynamically at run time, (...)"
can linked -> can be linked

Audacity gets new functionality via Google Summer of Code

Posted Sep 23, 2008 16:45 UTC (Tue) by cook (subscriber, #4) [Link]

>A nitpick: in a few locations within this post, "Ardour" has been used >instead of "Audacity".
-Fixed, sorry about that.

Audacity gets new functionality via Google Summer of Code

Posted Sep 18, 2008 18:42 UTC (Thu) by dwheeler (guest, #1216) [Link]

FYI, according to this site: http://stevemorse.org/russian/rus2eng.html

The Cyrrillic name can be transliterated to "Ruslan Izhbulatov".

Copyright © 2008, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds