Enhanced Ruler – GSoC 2022 Week 3

Happy 4th of July! Progress has gone smoothly this week. I’ve been making changes to the Ruler.cpp and Ruler.h files; you can follow along at my GitHub fork.

The timeline for the project has changed slightly; I am now targeting to finish the implementation of the nonlinear and custom rulers by the end of the 5th week, with the vertical linear dB waveform ruler taking only the 6th week.

Accomplished this week:

  • Reworked Ruler class to be more easily expanded upon with polymorphism.
  • Fixed various minor issues in code to improve clarity.

To accomplish this upcoming week:

  • Finish implementation of the nonlinear options.

Enhanced Ruler – GSoC 2022 Week 2

Hello again! This week has been a little slower than the last due to personal reasons. Still, progress continues; I’ve began implementing the nonlinear ruler options.

Accomplished this week:

  • Identified issues that could motivate later parts of the project. (Advanced two-tone labelling on rulers. refactoring existing data structures, etc.)
  • Began expansion of nonlinear ruler code. Designing code that will allow any function to be passed by the instance of the ruler, so that tick marks can be placed according to that function.
  • Test options by editing existing ruler instances.

To accomplish this upcoming week:

  • Finish implementation of the nonlinear options.
  • If possible, begin work on custom options.

Meet our GSoC 2022 Contributor

Audacity is taking part in Google Summer of Code 2022 and this year we’re joined by a contributor on one project:

Waveform Rulers

This project will add the ability to display a logarithmic ruler for amplitude (measured in decibels) while still drawing the waveform according to a linear scale. This is useful because linear waveform graphs are more intuitive than logarithmic graphs, but audio engineers are accustomed to using decibel units to cover the wide range of amplitudes perceptible to humans. The GSoC project will also modify the timeline ruler, adding the option to use the musical units of beats and measures instead of the regular units of hours, minutes and seconds.

Contributor: Michael Papadopoulos
Mentor: Paul Licameli

You can learn more about Michael’s project by reading his introductory blog post and by following his weekly blog for regular progress updates.

Enhanced Ruler – GSoC 2022 Week 1

Hello everyone! Here are some updates on the current status of my GSoC Project. I have mainly taken this week to gain a better understanding of the Ruler code.

Accomplished this week:

  • Investigated the source code for the Ruler. Created a map of the functions and how they relate to each other.
  • Created a small project to better understand labelling. Separated the font of the label’s value from the units, allowing for more dynamic labelling.
  • Discussed the project with mentors and communicated goals and expectations.

To accomplish this upcoming week:

  • Implement a complete suite of options for a nonlinear ruler.
  • Continue talking to mentors and better understanding the code.

Audacity – Introduction to Enhanced Ruler Display Options

Hello, everyone. My name is Michael Papadopoulos, and I’m a computer science major at Rensselaer Polytechnic Institute. I’m grateful to have been selected to create a project for Audacity through Google Summer of Code. My mentor throughout this endeavor will be Paul Licameli.

The current state of rulers in Audacity

In Audacity, a ruler is any segment of the UI which measures a value on a scale using tick marks. Examples of rulers include the amplitude scale to the left of waveforms and the timeline.

In the current version of Audacity, only two types of rulers are supported: Linear and logarithmic. Developers have previously only been able to create new rulers if they could fall under one of these two categories. However, many long sought-after display options in Audacity need more flexibility than this. A prime example would be a linear decibel scale for the waveform display.

image
The linear dB scale in Audition. This allows users to view their waveforms in decibels while sidestepping the issues presented by a logarithmic scale described here.

Another example of a ruler that would require more customizable infrastructure is a timeline that displays beats / bars. However, creating better infrastructure would allow for powerful new features to be created well in the future.

The goal of the project

The most fundamental goal of the project will be to overhaul Audacity’s ruler infrastructure, allowing for all sorts of linear, nonlinear, and custom rulers. This will be a major benefit to future developers and users of Audacity. The potential for more user-friendly and useful display options that could be unlocked by this project cannot be overstated.

Some key challenges will have to be overcome for this project to be realized. This infrastructure must be very adaptable to fit into the variety of roles that rulers play throughout the software. All changes must be thoroughly tested so that they work in all cases, not just one. Decisions will have to be made when choosing how much old code to keep and how much to remove.

After implementing this, I will move on to creating some of the display options previously listed. I will first produce the linear dB scale and beat / bar timeline, as well as waveform display options described here. These will be incredibly helpful to all Audacity users, especially beginners and musicians who will be more comfortable using these options. Communication with the UI design team will be critical to this phase of the project. Once these options are created, I will continue to discuss and implement new features while time allows.

Once again, thank you to the Audacity team for selecting my project. I will be providing weekly updates throughout the coding period, which begins on June 13th. I will provide links to my project’s progress on GitHub as I go along. I hope to work closely with the community, and would appreciate feedback and suggestions for options as well.

Join Audacity for GSoC 2022!

We are delighted to announce that Audacity is participating as an open source organization in Google Summer of Code (GSoC) 2022. For those who are unaware, GSoC is an annual program where new contributors are paid a stipend by Google to write code for various organizations in open source.

Google Summer of Code logo
Google Summer of Code

Last year, two highly talented students successfully completed projects with us here at Audacity. This year, you don’t have to be a student to take part (students are still welcome though!) and there are a few other changes that potential candidates need to be aware of. Please see this page for more information about the program and how to apply to join Audacity as a GSoC contributor.

Audacity 3.1.3 released

Audacity 3.1.3 has been released. It features the following improvements:

  • Made it harder to accidentally create loop regions when attempting to use Timeline Quick Play
  • Added snap guides when resizing clips
  • Added new default shortcuts Shift+L (set loop to selection) and Alt+Shift+L (Clear Loop)
  • Re-added selection and quick play indicators in the timeline
  • Improved performance, especially when loading in projects, up to 50x compared to 3.1.0
  • Fixed various crashes and other bugs. Details can be found in the release notes.

Between this release and 3.1.0 have been two hotfix releases which fixed critical bugs and crashes, but didn’t impact features (details: 3.1.1, 3.1.2).

You can download Audacity at audacityteam.org/download.

Rethinking the Manual

Hello

In this post, I want to introduce our plans to create a new online manual, which we intend to replace the current one found here.

First, it is worth explaining why we want to replace the existing manual, which has been meticulously kept up-to-date by a handful of dedicated contributors. The existing system is built on MediaWiki, which unfortunately comes with a lot of trouble attached that limits its overall usefulness: For example, due to spam problems, it has not been open to contributions from the public for a long time. As a result, the number of active editors has been very small (around 3 or 4 people). Consequently, it has also not been translated in quite a long time, which we feel is a big disadvantage.

Secondly, the manual was being packaged with the installer, which meant that it needed to be completely up-to-date prior to a release. Apart from being an unnecessary release blocker, this also meant that any corrections or optimisations to the manual could only be published whenever a new version of Audacity was released.

Thirdly, it was written to serve a dual-purpose: being both a developer reference as well as a user manual, which made it quite complicated – a problem exacerbated by not having a search function. As a result, around 90% of Audacity users were using web search engines such as Google to get help with Audacity, where more user-focused content from third parties massively out-performed our manual (the average manual page gets about 180 clicks per month). This is significantly lower than what we expect from an app as widely used as Audacity is. 

For the above reasons, we have decided that our resources are overwhelmingly better spent on creating a new manual that attempts to get users up to speed as easily as possible. This new manual will be called Audacity Support. 

With that in mind, we want to accomplish the following goals with Audacity Support: 

  • It should be user-focused. That means it should be easy to read and friendly, giving as much information as necessary to achieve a given task, without being either too vague or too detailed. It also should be search optimized, helping users to find what they’re looking for quickly.
  • It should be continuously editable by anyone and not be a release-blocker anymore. Although this means that pages will sometimes be ‘out of date’ at the time of a new release (although we’ll seek to avoid that as much as possible), we feel it is a price worth paying to achieve the goal of a vibrant community of contributors and translators.
  • In addition to written content, the manual should prominently be accompanied by video tutorials when appropriate. We intend to encourage the already large video tutorial community to create content that fits in with the task-focused structure of the manual. This would be a perfectly symbiotic relationship, since the manual will provide them an additional source of views.
  • Crucially, Audacity Support will also be translatable. Mediawiki can do this with great effort, but we’d like to have a system that supports translations more easily.
  • Readers should be able to search for content in Audacity Support itself, and be able to download a PDF version of it should they need access to an offline copy.

The current plan is to host Audacity Support on Gitbook. Gitbook has inherent benefits over MediaWiki for our purposes in several areas: 

For Contributors, Gitbook has a nice visual editor (as opposed to MediaWiki’s plain-text/wiki-syntax editor). It also can sync to Github, so if you prefer working with a local markdown or text editor, you can do that, too. This Github integration also will enable translations down the line (several translation tools integrate with it easily), but since we’re starting fresh, we’ll hold off on translations until the English version has reached a somewhat decent level of maturity. Video tutorial creators will be able to easily embed their content on relevant pages.

There may be individual pages from the old manual which make sense to be ported over to Audacity Support, but generally, we want a fresh start, with the developer reference bits of the old manual not getting ported over. Speaking of which, the old manual would stay as-is and will not get updated or included in the installer past 3.1.x.

As a preview, you can view the Gitbook page on https://audacity.gitbook.io/audacity/. Please bear in mind that we have only just started the process of populating it with content and it still contains a lot of unfinished material. While we are not yet calling for contributions, you can get editor access on https://audacityteam.org/gitbook-access. We will welcome anyone who wants to take part in defining the overall structure and style.

We would be very interested to hear your suggestions on how we can make further improvements to this plan. You can send them in our Forum, or in our new discord server.