Short presentation of us and aims of this project

We, Nils & Victor, were two tweens who are studying computer science and has this project as part of our Bachelor training. Our aims was to improve independent work and specification analysis and to collect more experience within larger software projects.

First Steps

The first thing we did was to check out our given resources, which was mainly the standard documentation of the ITU 1770-4 specification. Then we set up our workspace and chose our tools (Atom + Terminal seems perfectly good for fast prototyping)

Prototyping in Python

Python was perfect for fast prototyping because there was nothing like compiling time and Numpy offered a excellent library for fast problem solving. To keep it as simple as possible our Python version missed out a few requirements we had to the LoudnessModel (e.g. support of other sample rates then 48k samples per second). We also had a very inefficient version (which was improved later in our C++ version).

Python to C++

The main problem was to transfer the very useful NumPy library functions to C++. Most things were easily to rebuild to Juce functions but the whole workflow changed caused by the changed data structure. Since we already specified our public access methods we only did internal changes so nobody had to worry about our refactoring.

Problems

The main problem was our missing experience in Juce development (or even C++) which made it hard for us to reach a good project structure or to know the best way to solve something. (Pointers are pretty though too :P). Later we refactored our code to a better structure but at first our project had a very messy one.

Another problem we had was the missing UI. Since we separated tasks of the major project to small groups, we had no visualization of our calculated values or even the possibility to execute our algorithm. Later we decided to see the LoudnessModel and the True-Peak Meter more as a data structure then a real plugin and we only wrote a wrapper to build it as an VST plugin to use the ‘Plugin Host’ of Juce to debug our code and we missed out to develop a usable VST plugin for other tools.

One of the largest problems was the requirement of different sample rates because the official specifications only has filter coefficients for the sample rate of 48k samples per second. We though about converting the input to the required sample rate but this doesn’t seem very practical to us.
Later (after dozens of Google requests) we found another dude with an open source project similar to us and we finally found universal filter coefficients for the required filters. We used his coefficients since he had used a very pleasantly license and everything worked perfect.
Thanks to him and his project

Testing

For testing purposes we mainly used another tool which also calculates LUFS and true peak and we compared the results of our test files. Later we filled out a few tests with generated audio samples specified in the another document.

Summary

In the end there was so much we learned: not just a lot about the new languages and the Juce library but also tons of impressions and experience about teamwork, time management and work presentation.

Best greetings from the LoudnessModel Team