Developer News Archive
From Audacity Wiki
|This is an archive of Developer News, our weekly digest of recent development activities.
- A fairly quiet week, although GSoC 2008 Mentors have been busy writing their evaluation surveys on our students. Google extended the Mentor and Student evaluation deadline by one day to 19:00 UTC on 2nd September.
- Michael persevered in tracing and fixing an asynchronous race condition in on-demand on Macs. An asynchronous condition only affects a certain class of computers running at a certain speed and usage level. Leland made some fixes to keep Release Builds compiling with USE_FFMPEG defined and not defined. A problem was identified with Linux builds not compiling --with -midi if the user does not have the necessary macros for autoconf to generate a proper configure script.
- As new features are added to Audacity, the Preferences panel inevitably becomes more crowded. James and Gale discussed options for providing clickable context-sensitive help within Preferences, so as to allow shorter in-situ text to be used.
- Dawson Written has submitted a number of patches recently, including one for memory leaks in effect previews, and others to prevent copying pointers to constant characters to pointers of non-constant characters (so retaining the const-ness of the data).
- Audacity's GSoC 2008 came to an end with tagging of the final GSoC alpha (1.3.6a6) on 18 August. Mentors and Students must now complete their evaluation surveys by 19:00 UTC on 1st September. Students passing evaluation will then provide a copy of their code to Google.
- Although it won't be counted as part of their final evaluations, Michael fixed a crash due to his recent memory leak fixes, and addressed a problem only appearing in Mac Release builds where On Demand stalled without executing; Ruslan added sample rate checking for WMA exports.
- Martyn fixed a crash only appearing in Debug builds where an assertion put in to check if the cursor was valid, then cause a crash if not, itself caused a crash. Greg Williams made some improvements to MIDI import and export routines, and made the selection color over note tracks near-identical to that for audio tracks.
- Our GSoC students did final code polishing and bug fixing prior to the imminent "pencils down" date:
- Michael made the "unsaved changes" flag during summarising a fixed 36 blocks, inserted the old dummy waveform into the stripey background, and added files to allow future FLAC support. Some threading and memory leak issues fixed. He added a point-to-point average class profiler to test the speed of OD loading against the pre-GSoC method. It turns out that OD is slightly quicker for individual large files, and slightly slower for multiple files at once (probably due to the threading fixes).
- Mark fixed one more cross-pasting bug and allowed pasting from a label track if audio tracks are selected as well as the label track. A problem remains with not all audio tracks being pasted into if a Time Track or Note Track is present.
- FFmpeg exporter: Ruslan fixed a quality calculation bug in M4A exports (however M4A files renamed to MOV still can't be played in iTunes or QuckTime on Windows, and rates below 44100 Hz are incorrectly exported due to a FFmpeg bug). FFmpeg support for GSM was removed due to compatibility problems on Windows, but replaced with a new libsndfile GSM 6.10 (WAV) filter. Some fixes for PCM filters and options, metadata support and save/delete presets in the custom exporter.
- Lars added support (currently OS X/Linux only) for LV2 plug-ins to have scale point labels, grouped controls and i18n translations, and for LV2 synthesizer plug-ins to be used as tone generators.
- Johannes' GridSizer Project: 15s puzzle now has picture (GSoC logo) in place of 1-15. Klotski dragging now enabled under windows. Flicker much reduced when dragging. More bugs identified and fixed.
- We welcomed back David Sky to devel-list after his break from developing Nyquist plug-ins. We're discussing ways of letting Nyquist plug-ins save their current parameters rather than using their default parameters each new session. This might be done by re-enabling file writing within Nyquist, but needs careful handling of permissions issues and file overwriting.
- Paul Livesey updated the Mac Nightly Builds to use wxWidgets 2.8.8.
- Latest GSoC developments as our students enter the final week of coding:
- Michael added support for project saving during on-demand: projects containing incompletely summarised tracks now open properly and resume summary calculation. A few bugs were fixed with the mouseover Status Bar display; the dummy waveform was reverted for now to a stripey background.
- Mark made improvements to cross-pasting different track types. Audio is now pasted instead of silence when pasting into more tracks than are in the clipboard.
- Ruslan's FFmpeg exporter: project rate is now checked at export time for compatibility with the chosen format options, and alternative rates offered if necessary. Some further tweaks to AAC export options. Presets for custom FFmpeg export are now loaded from an XML file.
- Johannes' GridSizer Project: the Track Panel in the test application now shows the three standard static, neighbour and proportional resizing algorithms, and there have been many bug fixes.
- Greg Williams added the libscorealign library for Note Track to source code (though ultimately it may become a dynamically loadable module). MIDI files can now be exported from Audacity alpha builds.
- We discussed and are testing a reported bug where pure silence can be exported in dithered stereo WAV files as potentially audible noise if the audio is subsequently normalised.
- 1.3.6 alpha 5 was tagged on 1st August. GSoC developments:
- Michael tried out a simple animated dummy waveform instead of stripey background, and a text-based Status Bar indication instead of embedded progress bar. Status Bar indication needs some tweaks. Problems were identified with project saving during on-demand (crashes when cancelling a "copied-in" save, and "orphaned blockfiles" when re-opening projects).
- Mark fixed a synchronisation bug when speed-changing an entire track, and disallowed pasting from one type of track into another (some instances of paste may need reinstating for usability reasons).
- The code for Johannes's GridSizer project is now in Audacity-Extra. The Klotski game (demonstrating dragging of spanned cells) now works, and resize arrows and events have been improved.
- Ruslan's FFmpeg exporter: many changes made after alpha 5 await testing:
- removed separate FFmpeg export filters for native Audacity formats like MP3; removed export support for AAC (raw) and Real Audio (FFmpeg can't produce compatible files)
- now a single AAC export filter (M4A using LC profile) with a slider to choose numerical quality settings; sample rate options now removed from all filters
- added support for load/save/remove format presets in the custom FFmpeg exporter (currently in audacity.cfg)
- metadata import/export support reworked to address Unicode problems
- Adrian Knoth submitted a patch to ignore ID3 tags in older FLAC files which can create import problems.
- Last week's problems were resolved where Google-provided advertisements on our main site were occasionally showing sites we normally block.
- GSoC developments:
- Michael added on-demand support for undo/redo and split and merge of stereo tracks, and made a number of other improvements/bug fixes. On-demand loading now occurs only with files which are 30 seconds or longer.
- Mark added support for pasting (multiple labels, region labels and labels with audio, all with correct label text) and for change tempo and pitch, plus fixes and improvements.
- Ruslan's FFmpeg exporter: There was considerable discussion about whether sample rates should be included in the AAC options dialog (thus breaking normal Audacity procedure), or whether compatibility problems will dictate one or two limited options or even fixed presets. There is a current problem with lower AAC sample rates being doubled in the exported file.
- It was decided that for future development of Note Track (MIDI), note track data should be saved internally as separate files in the project _data folder, pointed to in the .aup file. This mirrors the current procedure for storing and accessing audio files, and avoids possible parsing difficulties if XML files were used.
- Martyn fixed problems where previewing more than once in Equalization previewed the audio unmodified, where projects at sample rates in excess of 100000 Hz were not imported properly, and improved the DTMF generator.
- We're looking into some problems with the Google-provided advertisements on our main site incorrectly showing a few sites we normally block. SourceForge hosts the main site and Audacity downloads, and since March 2007 we've been sharing our advertising income with them. However, donations to support our development effort are always welcomed.
- 1.3.6 alpha 4 was tagged on 15th July. All five of our GSoC students passed their mid-term evaluation, and we thank them for their work so far.
- Michael added full on-demand support (clicking on an unloaded part of the waveform now moves loading to start from there). Support for backwards loading and larger files was improved.
- Mark has been researching how to implement label shifting with the two SoundTouch effects (Change Pitch and Change Tempo).
- Ruslan added a new M4A filter to his FFmpeg exporter to improve iTunes compatibility. Calculation of maximum AAC bit rate was improved by basing it on half the sample rate. It's become apparent many players will only support AAC's LC profile, and RealAudio support has had to be temporarily removed.
- Chris Cannam mentioned he will be fixing a current limitation in VAMP analysis plug-ins that labels can only be created as point- rather than selection-markers. Audacity CVS HEAD already has VAMP support enabled by default.
- Daniel Royer of the LibriVox community discussed some ideas to make Audacity easier for recording audio books from computer texts. Suggestions ranged from marking mistakes for later editing, to trimming back and re-recording them at the time of the error. Some way to have Audacity respect system-wide hotkeys would be needed.
- Julien Vanague asked if there was a good reason that Audacity's Plot Spectrum is limited to 1048576 samples (23.77 seconds at 44100 Hz). Roger replied that spectrum calculation is memory- and processor-intensive, and analysing a long selection of rapidly changing content might give too generalised a result. However, averaging a sequence of short spectra in a longer selection might be an Audacity feature worth investigating.
- Mid-term evaluations have been under way for our GSoC students. In changes they made this week:
- Michael tweaked screen refresh to work properly on Windows, now updating every 0.6 seconds on all platforms.
- Mark fixed bugs with label shifting wrongly inserting when generating in a selection region, and deletions not being made inside label regions.
- Ruslan fixed bugs in his FFmpeg exporter for 16 bit PCM WAV and for correct profiles in AAC export. Problems remain with GSM WAV and Real not being recognised by players that should do so.
- Lars added the libraries required for LV2 support to Audaclty's lib-src directory. The libraries build on Linux and Mac, but the slv2 library does not yet build on Windows.
- We replaced the older Allegro library for Note Track support with the newer Portsmf library. Portsmf can be enabled by defining USE_MIDI in config*, but does not yet build on Windows so for now has been turned off by default in CVS HEAD.
- We've been trying for a while to register our #audacity IRC channel on Freenode to ourselves. This would help IRC users by allowing developers and regular contributors to identify themselves as "chanop" or "voice". However Vaughan reported that as yet Freenode has still not responded to us.
- In some bug fixes:
- We made available a rebuilt 1.3.5 Mac release to cure problems with menus greyed out after cancelling effects, and then with Audacity not launching in non-English languages. We fixed a problem so that all 41 non-English languages we currently support now build properly on all platforms.
- We changed the typedef for sampleCount and converted to use of sampleCount instead of longSampleCount in our code. This lets us fix a problem where generating silence or tones in excess of 2 ^ 31 samples (some 13.5 hours at 44100 Hz) did not work.
- 1.3.6 alpha 3 was tagged on 1st July. The Linux compile problems with experimental Note Track were solved, but we decided to disable it by default in CVS HEAD (it can be defined in config* if required). Experimental "Default View" was turned on, giving a new preference for the type of waveform used for new tracks.
- Much of the week was spent polishing the new GSoC features introduced last week:
- Michael fixed a problem with on-demand loading that caused the progress bar to appear when time-shifting. We discussed whether on-demand (currently restricted to PCM WAV and AIFF) could be extended to compressed formats. This presents particular problems with MP3, where file seeking is relatively complex.
- Mark added support for shifting labels when changing speed and generating. Linking was turned on by default and now depends on existence of a label track. Bugs when deleting in label tracks or multiple tracks were fixed, and the length of silence inserted when speed changing was made sample-accurate.
- Ruslan tweaked his FFmpeg exporter so that exported MP4s now play in iTunes on Windows, but they still need renaming to M4A on Mac. Exported RealAudio files are not yet properly recognised. It was agreed support for AMR export would be retained, although it can only legally be provided if users build FFmpeg themselves.
- Lars committed his first version of LV2 plug-in support. It's Linux only for now, requiring that libslv2 is installed on the system.
- Inácio Barroso reported a bug reopening projects with tracks above 100000 Hz, and there was another report of clicks added to Audacity Beta recordings on Windows. Aaron Epstein supplied us with a patch for a crash when opening Audio Device Info on Vista with no connected playback or recording device. Jan managed to build Audacity on , which is not officially supported by us and has not been done for quite some time.
- Everyone is busy with testing in the run-up to the next 1.3.6 alpha on 1 July. In latest GSoC developments:
- Michael produced an experimental "progress bar" for on-demand loading which is embedded in the waveform until the file is fully loaded
- Mark trialled an alternative way to establish linking of audio and label tracks based on vertical position of the audio track
- Johannes made progress with his two new draggable classes, and wrote a draft report on the feasibility of transitioning Audacity to the wxAUI GUI framework.
- Jonathan Wolthe submitted a patch for a simple CD burning interface using . This raises again a subject which has been extensively discussed in the past, and which many users are interested in. However, our majority view is currently that developing and maintaining a sufficiently full-featured CD-burning interface for Audacity is far more work than the alternative solution of bridging to an already existent third-party burning application. Neither solution is something we can take on in the immediate future, given our current resources.
- Greg Williams checked in the first of some experimental changes to Note Track (which currently can only display a MIDI track). This will support longer term work on aligning waveforms with note tracks. Better MIDI support is another feature users often ask for. The current changes allow cut, copy and paste in note tracks using the Edit toolbar, but there are some assertion failures reported, and the new code (enabled by default in CVS HEAD) does not yet compile on Linux.
- Bug-fixing continues of course. Leland fixed problems on Mac and Linux with menus greying out after effects were used or previewed, and he also fixed a strange problem apparently confined to Windows 2000 where file dialogs had empty windows. Such are the joys of supporting not only three major platforms, but multiple versions of each.
- We surmounted last week's problems which had prevented our latest GSoC FFmpeg code compiling on all three platforms. This gave us time to introduce more changes, Martyn committing his new Transport Menu (giving alternative access to play/record commands and some recording preferences), and Ruslan committing his experimental FFmpeg exporter (which allows Audacity to export a wider range of proprietary formats).
- Our new feedback email address for reporting issues not requiring one-to-one support has already proved valuable. (Update: The feedback email address has now been superseded by the Audacity Forum). A user in Germany told us of a hard-to-find problem where Audacity can misread the peak sample in a longer selection region if it contains a relatively small number of peaks which stand out among the surrounding audio. We're figuring this is an issue where the selection crosses over a block boundary, but it would be more of a problem in some genres (such as classical) than in others. Another user reminded us that the metadata tags in common use for MP3 files include a tag called "Negerpunk" which is not a recognised genre and is potentially offensive. We reacted by removing this tag from the genre list which we use for exported metadata.
- Leland fixed a "release blocker" bug on Mac which caused menus to grey out after using some effects, and we discussed enabling code already in place to give users a preference for default view for new tracks (waveform, spectrum or pitch choices). Once again, long delays receiving -devel list emails caused us some problems.
- We were in the run-up this week to a new alpha internal release, so mostly concerned with fine-tuning and bug-fixing first implementations of our GSoC students' projects. We did not quite get them compiling on all three major platforms, so for now just tagged where we got to as 1.3.6a2:
- Label Track Enhancements: now lets labels move when audio is cut or inserted; one problem identified is that label tracks lose their linkage with audio tracks if Undo is used
- QuickLoad: tweaked to improve speed and refresh of background loading, and to allow files to be copied into a project at normal speed
- FFmpeg integration: the optional FFmpeg importer works well after fixing problems with progess bar; we won't be able to distribute FFmpeg binaries with Audacity due to potential licensing issues, but FFmpeg "Find Library" and "Download" buttons were added to Preferences
- LV2 Support: Effect menu categories and sub-categories were discussed and further tweaked; support was committed for LRDF (LADSPA plug-in metadata) on Linux
- We continued to discuss where the Windows installer should place the essential runtimes and wxWidgets DLLs. Consensus now seems to favour the same folder as the Audacity executable. This avoids problems if runtimes are placed in the system path and then overwrite older runtimes which other older applications might still require.
- Audacity is extensively used in educational establishments for language and music teaching. We considered a recent request by a teacher in the US for us to voluntarily register Audacity under . However from what we could gather, only applications to be purchased/used by United States government agencies, or ones they expose to public usage, must comply with Section 508. That said, Audacity is already one of the few multi-track audio editors providing accessibility for visually impaired users in most of its features, and it's our aspiration to continue this.
- First versions of feature improvements by GSoC students were committed and tested on all three platforms: hierarchical plug-in categories by Lars, and Ruslan's FFmpeg importer. As with all experimental features, these can be turned off in (or using instructions in) Experimental.h, so that any instability does not prevent development and testing elsewhere. Leland made improvement to the Xcode project file for developers/GSoC students committing on Mac, and converted many effect and other dialogs to use ShuttleGui. This allows us to standardize on a single easy to use method of writing dialogs.
- Reports by -devel list subscribers of possible bugs, with a scenario to reproduce them, are always welcome. Jan reported a number of possible issues including a crash in Nyquist generator functions if (seq....) parameters were reversed; said he would investigate. Ben Stanley reported no output in Audacity when playing 32 bit signed little endian PCM WAV files created by an application using .
- Some recording functions and frequently changed recording preferences are recognised as not sufficiently accessible/discoverable. Martyn suggested a new menu to include these, and suitable names for the menu and its items were extensively discussed.
- Gale reported there seemed no hope of repairing the long broken -users and -feedback mailing lists. Our -users subscribers will be invited to register with the of the list, hopefully with direct email subscription being added soon. A new no-subscription but limited response email address will be provided to replace -feedback, so that users not needing one-to-one help can easily give us problem reports and general comments. As another concern, messages sent to -devel list and -cvs list over the current weekend were not delivered until the following Monday/Tuesday.
- Significant issues resulting from the new modular structure were identified with modal dialogs and screen-reader accessibility. 1.3.6a1 was therefore not released publicly and was "tagged" to allow a safe fallback position while working on fixes. To this end Leland did great work producing a patch for our local copies of . This both cured some crashes with screen readers and let us fix many modal and Escape key problems. We decided to revert Audacity's default theme to the previous color scheme, whilst retaining the Theme preferences.
- Discussions are often needed about file and folder organisation. Leland produced an alternative Windows .sln file re-organising Visual Studio (VS) Solution Explorer. This would have grouped all lib-src projects in one folder, greatly facilitating maintenance of the VS project files, but test-compiling revealed that free VS Express editions did not support folder nesting. There were different opinions on where to put the wxWidgets and FFmpeg dll's Audacity will need. It was recognised a zip distribution would still be needed for Windows users in laboratory or portable environments, so that all files were in one folder.
- In other discussions, we agreed the need for a correctly phrased copyright declaration in all distributed files (not just in source code). We drew up guidelines for use of Experimental.h to enable/disable the many experimental features our GSoC students will be working on this Summer.
- We welcomed to -devel list. Roger and Dominic Mazzoni were the original co-authors of Audacity. Roger will be improving Audacity's currently very limited MIDI support. Ruslan provided some code that uses wxLogMessage() to add a new Help > Show Log... debugging window.
- A working Modular Release build of Audacity was produced (Leland adding his skills to the joint effort), giving us two working modular configurations. Everyone agreed with James's suggestion that continuing support for static-linked Windows builds was un-necessary. We will therefore trim down to four configurations, all modular: Debug, Release, Unicode Debug and Unicode Release. This means continuing support for (non-Unicode) Windows 98 and ME, which are no longer supported by Microsoft but still have a significant user base. We now turn to fine-tuning these configurations and producing 1.3.6a as an internal release.
- At the same time Leland established that the concept of "modular plug-in Audacity" via scripting (hitherto only proved on Windows) was viable on Mac and Linux too.
- Experimental features were turned on in CVS builds, most noticeably giving Audacity a new dark "theme" (editable via Preferences in an image editor). It was recognised this currently lacks sufficient contrast, so will probably become an optional theme, reverting to Audacity's previous color scheme as default theme. Experimental features also enabled Martyn's "Smart Recording", which turns recording on and off according to input level.
- We found time to fix some bugs arising on the way. This included fixing some Linux build and project rate initialisation problems. On Mac, we reworked our Xcode project flle for Release Builds to fix a problem where libraries with endianness issues didn't work properly on both PPC and Intel.
- We're continuing to work towards modular builds of Audacity for 1.3.6. Vaughan and Martyn have been able to build a debug wx284 build "out of the box" linking to wxWidgets 2.8.7, and Vaughan is ironing out problems with a Release DLL build (which we will call more correctly "Modular Release").
- After discussions, it was felt that we'll continue to use Release Checklist for bug-tracking (revamped to use a clearer P1 to P5 priority system) rather than . To use Bugzilla efficiently, we'd have to make time to install and host the latest version, and configure it more closely to our needs.
- One of our GSoC 2008 Projects, Ruslan's FFmpeg integration, got an "excited" mention in for its potential benefits in allowing Audacity to import/export a wider range of formats. We also noted for our developers/testers on Windows, there seem to be no GUI tools that would allow simple "point and click" application of patches provided by our GSoC students.
- We discussed a possible longer term move to an online community-based translation system using tools like or , rather than the current system where translators submit files by email for manual upload to our server.
- It was decided to renew our claim to ownership of the #audacity IRC channel. This would let us give "operator" and "voice" status to developers and support workers, so users could easily identify whom to ask for help.
- Final preparations were made for release of 1.3.5 Beta on 8 May. A provisional fix was made for a wxWidgets problem that prevented dialogs being escaped, and fixes made for two problems in the project rate list box. Especial thanks to Vaughan for his efforts here as time pressed.
- Discussions reaffirmed we should make the significant changes needed for 1.3.6a1 to appear at the end of May as our first ever modular .dll release. 1.3.6 will also be a "first" in using wxWidgets 2.8.7. This will be the first of a number of 1.3.6 "alpha" releases this summer as new features are progressively added by our Google Summer of Code 2008 (GSoC) students.
- Strings for website translations are still not being consistently created when we make changes to our . Richard is on the case and thinks we should move some of the documentation to our file release system to make space.
- There have been some good discussions on Audacity's "select all audio if none selected" behaviour, and on Mark's GSoC project for Label Track Enhancements. The liveliest discussion of all has been about Jorge Rodriguez' idea to implement non-destructive effects stacks. He has now produced a proof of concept patch for evaluation.
- We were busy tracking down various accessibility bugs in preparation for a 1.3.5 release candidate, while Michael Schwendt gave us a patch to fix a sym-link security issue.
- Paul Livesey started creating nightly Mac builds, uploading to Leland's server; he is looking into providing nightly Windows builds.
- Website translations have not been properly appearing, but some progress was made re-instating them. We were still working with Sourceforge to get our -users and -feedback mailing lists working again.