Enhanced Ruler – GSoC 2022 Week 7

Hi everyone, small update this week. I know that I’m a bit off-schedule from making the update every Monday, so the next update will come Tuesday-Wednesday and I will be on-track for the rest of the coding period from there.

Accomplished this week:

  • Fixed issues with Linear Decibel ruler, up to point where design team consultation is needed.
  • Began work on SetUpdaterData and polymorphism.
  • Cleaned up old commits and code.

To accomplish this upcoming week:

  • Finish SetUpdaterData to create Updaters that are truly separate from Rulers using polymorphism.
  • Fix known bugs.
  • Work towards cleaning out the backlog of all changes to the ruler so the bars & meters time ruler can be pursued.

Enhanced Ruler – GSoC 2022 Week 6

Hi everyone! I wanted to withhold this week’s post until the midterm evaluation for Google Summer of Code, which we passed! I’m very excited for the second half of the project 🙂

I want to post a few images to demonstrate how far the project has come!

The dialogue box to change to the Linear Decibel ruler
The Linear Decibel ruler, which uses Custom Ruler infrastructure
The updated preferences menu

Accomplished this week:

  • Developed the Linear Decibel ruler for waveforms.
  • Fleshed out Custom Ruler options.
  • Merged changes from Week 1 that separated units from text on labels into current code.

To accomplish this upcoming week:

  • Fix known issues with Linear Decibel ruler (doesn’t work at non-default decibel ranges)
  • Increase polymorphism of rulers through the create of a SetUpdaterData function that will pass whatever kind of context an updater needs to perform its function. This will reduce the dependence of Updater on Ruler even further.
  • Clean up comments and past Git history, and improve code quality through name-changes and usage of constants.

Enhanced Ruler – GSoC 2022 Week 5

Hello everyone! Sorry for the late post; this week is the biggest yet for the project! Check out the current working branch here!

Accomplished this week:

  • Completely reworked Updater class to be simpler and easier to utilize.
  • Separated Ruler information that is needed by the Updater from that which isn’t.
  • Moved and refined a variety of functions.

To accomplish this upcoming week:

  • Custom rulers will be available by Saturday.
  • A vertical linear dB ruler will be available for testing by Monday!

Enhanced Ruler – GSoC 2022 Week 4

Hi everyone! I’ve made lots of progress in developing infrastructure for both the nonlinear and custom rulers. I’m looking forward to begin testing and showing off the changes I make through these blog posts!

Accomplished this week:

  • Broke the Ruler class into separate Updater files.
  • Substantially rewrote existing ruler code to follow new polymorphic Updater standards.
  • Cleaned up scoping inside Ruler and Updater to be more secure.

To accomplish this upcoming week:

  • Implement invalidation for Updaters with runtime type identification.
  • Debug and test polymorphism.
  • Develop the nonlinear and custom options.

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.