GSoC 2009 - D1-1/GSoC Progress

From Audacity Wiki
Revision as of 22:00, 21 June 2009 by D1-1 (talk | contribs) (Status update)
Jump to: navigation, search

General Information

See User:D1-1/GSoC_Information for an overview of the project.

Progress Charts

This page has the latest charts and status reports: External Progress Page

In particular, see the Gantt chart for the approximate order in which I propose to tackle things.

Weeks 3 & 4 Status

A bit of a lull due to exams. Discovered reason for an exit crash in windows (due to my configuration) and fixed an assert problem with the batch chains GUI. Some planning/design regarding how to proceed with fitting scripting into the system for menu commands.

Mailing-list post:

Sourceforge archive

Gmane archive

Week 2 Status

Now the main thread can send responses back to the script thread via a new ResponseQueue class. This also prevents crashing if new commands are received whilst the previous one is still executing, since now the next commands are not read until the response has been returned.

Mailing-list post:

Sourceforge archive

Gmane archive

Commit messages: 1 2 3 4 5 6 7 8

Week 1 Status

This week I've been working on allowing commands coming from a script to be executed in the main thread, to avoid crashes when accessing the GUI. I've also tried to introduce some abstraction which leaves open the possibility of some refactoring of the BatchCommands system.

The relevant mailing-list post is here:

Sourceforge archive

Gmane archive

Commit messages are here: 1 23 4

See the mailing list post for further information.

Details of Planned Work

Here is a summary of the work I intend to carry out (not necessarily in chronological order).

Scripting Module

  • Provide a way for the script thread to delegate certain GUI actions (including display of error and progress dialogs) to the main thread
  • Provide a way for error messages to be returned to the script when necessary.

JC: Mentors have confirmed that if this project goes ahead they do want this and by the mid term deliverables date.

Track Views/Find Notes

  • Refactor TrackArtist so that different WaveTrack views are drawn by separate classes, and provide a composite view which allows alternative views of the same track to be shown alongside one another.
  • Optimise track drawing methods - for example, ensuring that buffered drawing is used and that analysis data is cached where it is beneficial - with the aim of making the more computationally intensive track views usable on less powerful machines.
  • Improve the Find Notes algorithm to make it useful for the purpose of musical transcription. It should work well enough to be able to identify notes and chords in a solo piano recording with reasonable accuracy, and to display this to the user clearly. Amongst other things, it will need to be able to vary the number of notes detected adaptively.
  • Fix the related bugs on the release checklist (e.g. P4 - Minimum and Maximum frequency settings don't work for Spectrum log(f) view)


  • P3 Jack problems
  • P3 Opening a second file while the first is playing
  • P4 Linux build fails with EXPERIMENTAL_SCOREALIGN defined
  • P3 Preferences dialog - clicking OK can sometimes cause a crash
  • Some failed assertions I encountered, including
    • Track.cpp(209) when deleting a label track
    • A wxWidgets problem in BatchProcessDialog
  • P3 Desynchronisation problem when pasting with audio and a label track
  • P2 Labels should move appropriately when timeline-changing effects are applied
  • P3 Ensure tooltips are updated when language is changed in preferences

JC: One of the GSoC requirements is (at the end) to submit a 'tarball' of code written. Please keep a folder with all your patches somewhere to make this step easy.

JC: If bugs on this list are solved by someone else, please note and add a bug of similar difficulty to the end of the list.

Optional Extras

  • Solve more of the issues from the release checklist or the 'not aiming' list.
  • Further extend the capabilities of the scripting module, for example to allow automatic taking of screenshots.
  • Refactor or optimise other areas of the code, if it becomes apparent that this would be useful.
  • Allow transfer of detected notes to a MIDI track, export of note names, or of a MIDI file.
  • Provide a general way of allowing alternative colourings to be used in spectrum view and other places.

Midterm Status

Due to the time constraints imposed by my exams, the bulk of the work would necessarily be completed in the period after the midterm evaluation. My main deliverable for the midterm period would be enhancements to the scripting module. I would provide code for a module which works on at least the windows platform and allows a perl script to control import and export of wav files as well as application of effects, and returns an error message to the script if a command was not recognised. In addition I would provide fixes for at least three items from the release checklist.

Preliminary Work

The two main patches I submitted were:

  • A modification to TimeTextCtrl to ensure that the first non-zero digit is focused initially, rather than the first digit
  • A larger patch which refactored the generator effects and resolved a problem when the duration was zero

Additional Comments

My primary development platform is Arch Linux, but I can also test/develop on Windows XP if necessary. I have no way of tackling any Mac-only bugs, or other issues which I cannot reproduce for whatever reason.