Coding

Coding is an all-time favorite thing that I never grew tired of. It is phenomenal to be able to make a living from it. To cut a long story short, I am a C++ real-time auralisation programmer using geometrical acoustics algorithms and digital signal processing to achieve things like VirtualAcoustics.

History

Since my parents bought their first Personal Computer in maybe 1998, I have been obsessed with this technology. And it holds on until today. It blows my mind how mankind was able to engineer something so incredibly complicated on so many levels. And now, so many processes rely on it. Almost every part of our lives is affected and computers have changed everything in the way we do it.

My first experiences as a coder was with Perl, a powerful and somewhat ugly appearing scripting language. But it had a low entry threshold for dummies requiring only an interpreter and a text editor. And there was a book in the library. As a result, I could read every Regular Expression these days.

After playing around with Perl, the web grew constantly and I tried out HTML, JavaScript, Action scripting for Flash animations. Failing with Perl CGI-Scripting already with installation and configuration, I got PHP running with IIS and later Apache. Now the entire world of dynamic websites was rolled out in front of me and I created website after website for any purpose. Along with PHP, of course, MySQL came quickly into play. I developed some custom CMS which had rudimentary functionality compared to others like Typo3, not a big surprise.

After that, I eventually tried out different other CMS, like WordPress and Joomla. But I always felt a bit restricted especialy when it came to design customization.

However in the first year during my first engagement as a student assistent, I had to use Plone on a Zope application server, (which uses Python) on a dedicated server that was in a horrible state. It was the first CMS that consequently separated scripting, content writing and style. That was cool. Although it was terribly hard work especially on server administration side, I had my moments with Plone and was quite happy with Python since it was so much cleaner than Perl. As a webmaster and administrator I went through all the ups and downs that you can encounter. And after exhaustive nights with LDAP, mail servers and backup problems on a completely outdated system, I did the one thing necessary: reset. I set up the entire system from scratch, merged the websites mostly by copy&paste and swore to never again work as an administrator and webmaster again.

So I quit. I think the server was running for at least three years without an admin. Maybe this is still the case 😉 But it tought me a lot. I will never fear to reset any system (or application design) again no matter the cost … if it will lead to improvement. Cleansing move, if you will.

It was after that period that I finally came in touch with C++, which is still my favorite programming language. I was working for the ITA as a student assistant and developed GUI elements with the Fox-Toolkit and VTK.

Later I was also involved with real-time audio processing, the reason why I am now the lead developer for Virtual Acoustics at ITA. Wherever possible I chose ViSTA VR Toolkit from the RWTH VR Group. It provides a tremendous amount of supporting libraries and is platform independent.

I also came in touch with OpenMesh, TBB, FFTW3, Qt, libsndfileSketchUp, Lua.

As acoustic researcher, you won’t get around Matlab, which I use often. Especially for evaluation, plotting, offline audio processing – and naturally acoustic measurements with the ITA-Toolbox. It is very powerful for prototyping and the quick-and-dirty work you only have to do once.

Recently I discovered the power behind Unity and the C# language. I wrote some wrappers to use C++ libraries like VANet und OpenDAFF in C#.

The requirement to use those libraries within a Python environment lead to several Py-wrappers, e.g. for OpeDAFF and the VA remote control interface.

I looked into the employment of semantic data structures for acoustic simulations while trying to find a suitable data format for Geometrical Acoustics approaches. Here I concentrated on IFC for building and room acoustics and CityGML for outdoors, targeting to formulate a workflow with SketchUp as 3D modeler and open source C++ libraries for geometry handling, which were transformed in the end into an half-edge compatible mesh structure using OpenMesh.

All in between, the probably most exciting project I was involved with (and in a way still am) is VirtualAcoustics, or short VA, which has a website available under www.virtualacoustics.org. It is an advanced open-source auralisation framework distributed under the flag of te Institute of Technical Acoustics (ITA) with a C++ API, platform-independent remote controle support via TCP/IP, various bindings (C#, Python, Matlab) and a modular rendering and reproduction structure making it a versatile tool for prototyping. It has been used in countless studies that require dynamic auralisation (i.e. with head tracking) and Virtual Reality applications, like demo programs running in the aixCAVE of the RWTH Aachen University.

Licensing

At some point during discussions in the research community about code and content licensing, I decided for myself that it is unfair to receive money from a public research council and keep the tools that were developed for a project closed source. Although the ultimate scientific product is a publication, I think also publishing the work that lead to those results might be of value for someone – and it eases reproducibility. Also, it’s a good practice to avoid conflicts when code should be included for commercial products. So everything I do is usually license under Apache License or Creative Commons.

Coding projects

File Formats

OpenDAFF

OpenDAFF is a free and open-source directional audio file format, intended to store directional data such as directivies of sound sources and head-related transfer functions / impulse responses in a single file with the context of high performance, like room acoustics simulation and real-time auralization.

Programming language: C++

License: Apache License Version 2.0

Project website: http://www.opendaff.org

Repositor: https://sourceforge.net/projects/opendaff

Virtual Reality

ViSTA VR Toolkit

ViSTA is a powerful library collection with tools for virtual acoustics and general usability support. It is platform independent and supports a lot of drivers that are helpful for VR applications.

Programming language: C++

License: Lesser GPL

Project website

Repository: https://sourceforge.net/projects/vistavrtoolkit

Acoustic measurement and audio signal processing

ITA-Toolbox

The ITA-Toolbox is a Matlab toolbox that provides classes to store acoustic data, such as audio snippets, transfer functions, impulse responses and larger datasets like HRTFs. I predominently manage the applications around VA with the itaVA prefix, which are samples how to use the Matlab bindings for VA (see below). Also, OpenDAFF (see above) is integrated into the ITA-Toolbox to read and write DAFF content or to convert from itaHRTF.

Programming language: Matlab, partly C and C++

License: Apache compatible (MIT style)

Project website: http://www.ita-toolbox.org

Repository: http://git.rwth-aachen.de/ita/toolbox

ITACoreLibs

The ITA core libs is a collection of C++ libraries for audio signal processing, audio streaming and general sample manipulation. It creates a toolkit-fashioned foundation for applications in the fields of virtual acoustics, but can also be used for acoustic measurement and other audio streaming projects.

Programming language: C++

License: Apache License Version 2.0

Repository: https://git.rwth-aachen.de/ita/ITACoreLibs

Virtual Acoustics

ITAGeometricalAcoustics

The ITA geometrical acoustics collection of C++ libraries is the basis for acoustic propagation simulation based on the geometrical acoustics approach. It can be used for image source algorithms, ray and particle tracing, diffraction detour simulation and transmission propagation. It heavily relies on OpenMESH and supports SketchUp content for input and also output (i.e. in combination with ITAAcousticVisualization, see below).

Programming language: C++

License: Apache License Version 2.0

Repository: https://git.rwth-aachen.de/ita/ITAGeometricalAcoustics

ITAAcousticVisualization

ITA acoustic visualization is a collection of C++ libraries for visualizing acoustic phenomena or algorithms such as sound transmission paths in the sense of geometrical acoustics. It provides useful export support for OpenMESH and SketchUp file formats.

Programming language: C++

License: Apache License Version 2.0

Repository: https://git.rwth-aachen.de/ita/ITAAcousticVisualization

VirtualAcoustics (VA)

VA is a real-time auralization software developed at ITA, RWTH Aachen University. It’s main focus lies in the enhancement of Virtual Reality applications with physics-based audio. However, it is also heavily used for auralization prototyping as well as listening experiments, especially if dynamic situations are considered or individualization of input parameters is required. The source code for the core functionality (VACore) is not available, but parts of it, like the control API for C++ (VABase), the remote control library using TCP/IP (VANet) and the bindings (VAMatlab, VAPython, VACS) are licensed under Apache License Version 2.0. VAUnity, a plugin-like script collection to use VA withi the Unity virtual reality environment is also Apache licensed.

Programming language: C++, Matlab, Python, C#

License: Control and remote API (C++, TCP/IP) and bindings (Matlab, C#, Py) are Apache License Version 2.0, the VACore is shared under GPL conditions due to the linked external libraries.

Project website: http://www.virtualacoustics.org

Repository: https://git.rwth-aachen.de/ita/VA