Peroxide

From Audacity Wiki
Jump to: navigation, search
Bulb icon This is an earlier version of what became Advanced Docs Project
Planning:
The main task for this page is to plan out the diagrams in more detail.


What is Peroxide?

Peroxide is the code name for a project providing content for learning about audio algorithms, through Audacity. The goal is to strengthen Audacity's position in education, particularly CS education, and ultimately to bring in more developers.

The content will be hosted at:

  peroxide.audacityteam.org

Where does the name 'Peroxide' come from?

DOxygen is a documentation system for code. Peroxide will be a more powerful version, in which the code browsing and tutorial content is more interactive. Preparing the code for peroxidation will be considerably more work than for DOxygen. We will have interactive diagrams that show how libraries and classes fit together.

AOSA Diagrams

We can onward develop content from Architecture of Open Source (AOSA) - Audacity, with attribution, since that is creative commons licensed. In particular we can make diagrams that are interactive and that connect into the code.

  • Library Structure - We can go into more detail than in the AOSA book, and drill down into the library dependency structure and connect into the code.
  • Dataflow Structure - We can connect the diagram to actual code, and also make it interactive, for example showing the volumes of data, as animations, so that the large-infrequent disk writes vs the small-frequent-reads sound card impedance matching is shown visually.
  • Block-File structure - Animations of how this works, with optionally much more detail than in the AOSA book, as to the different types of block file, and connecting into the code.
  • ShuttleGUi Trees - We can show the connection between the tree, the code and the dialog.
  • Clickable UI Diagram - Instead of connecting into the manual, the peroxide version of the manual's front page can connect to the relevant code.

Better DOxygenation

Some of the tasks here can be automated, by code that like dOxygen looks at the Audacity source code.

We can:

  • Complete the existing class descriptions.
  • Tag function with certain useful tags by property.
  • Scatter-Gather - bring related functions, e.g. the effect processing functions that actually do the work, together.
  • Code metrics - Bring large functions or functions with deep nesting to the top.
  • Make the code searchable online, so we can find instances of use of functions and classes.

Code Topics

In planning these, the key points are

a) Design helpful ideally interactive diagrams.
b) Connect in to the actual code.
  • How do you draw your graphs so fast? (we collect min and max and only then plot)
  • Why is ‘dither’ used? (show the extra bit-depth recovered)
  • Why ‘shaped’ dither?
  • Matroska dolls.
  • Basics of FFT (3D animation of frequency and waveform plots - rotation) - Lots of internet variants on this. We can do better!
  • Noise Reduction
  • Spectral Reassignment
  • Truncate Silence
  • Inside Nyquist

Background Topics

  • Latency vs Bandwidth
  • How is sound represented in a computer? - the manual has a very good start. Let's take this to the next level with interactive diagrams.
  • What are overtones? (show sines adding up)
  • What can and can’t we hear?
  • Amplify and Echo.
  • Mp3 Compression - Hearing response curve, masking.
  • Lossless compression - Why you can’t compress twice!


Tool Topics

In the course of peroxidation I intend to improve the wiki articles on the social aspects of coding, and the tools, and raise these topics from wiki content to something more like a blog post.

  • Autoconf - Overview
  • Bugzilla - Overview
  • Git / GitHub - Overview

Terminology

The glossary in the manual is a super place to start for terminology. Some of these terms could be grouped and worked up into tutorials for the background topics.

Some topics where interactive diagrams could specially help:

  • Clipping
  • Decibels



Inspiration

On the talk page, please add links to existing tutorial content that is relevant.