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.
Руслан Ижбулатов
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)