Week 6

This week I created a interface class for PortAudio (cross-platform audio device handling library). It’s easy to use, just reimplement the abstract callback function, select how many channels, sample frequency and which device you wanna use. Based on this class I created the first version of my PortAudioSource for adsp.xconvolver. I also extended the room correction dialog (see the following screenshot) with spin controls to select the sample frequency and the audio device.
RoomCorrection dialog prototype_2

This weekend I managed to get my prototype working and I did the first measurements, which were saved in wave files:

Original signal in time- and frequency domain:




Loopback signal in time- and frequency domain:



You can see that high frequencies are damped by the soundcards analog digital converter. 😛


Nearfield measurement in time- and frequency domain:



I know it’s a cery cheap speaker and frequency response is very bad, but that’s my speaker system for development. 😉


Here are some photos from my measurement equipment:

Microphone&Amp IMG_8083_Speaker


If all is stable and working I will repeat the measurement with my Denon X2000 and Teufel 5.1 speaker system.

 … Read the rest

Week 5

This week I received the GSoC welcome package many thanks to Google. All includes stuff shows the following picture.


The scetch book and the biro is really cool and I will use it for my notes.

This week I managed to get library.kodi.audioengine running and all issues are solved. I’m now able to create audio streams for ActiveAE from our AudioDSP Add-ons, which allows me to play any audio signal. I also added support for creating audio streams that bypass the AudioDSP system, which can be used to create clean audio signals (this is really needed for chirp signals and room impulse measurements).

For testing and prototyping I created a small class interface that creates a new thread, opens an audio stream and plays a audio signal from an wave file. At the moment I only tried a chirp signal, which is read from an wave file with libsndfile. The only thing that is left, is stopping the thread immediately. At the moment there is some delay if I try to stop the thread.

Furthermore I extended my signal processing library (asplib) with asplib_utils. It includes the following classes:

  • a cross-platform CPUTimer class
  • template buffer classes (frame buffer, frame ring buffer and a normal ring buffer)
  • exception class interface
  • interleaver function templates, which can transform non interleaved (aaaa… bbbbb…) into interleaved samples (ababab…)
  • operating system header files, which can be used to transform specific defines into a common defines (e.g. __func__ from GCC and __FUNCTION__ from Visual Studio will be defined as __ASPLIB_FUNCTION__)

I will use some classes from asplib_utils for creating the capture device interface.

Next week I will try to develop a first version of the capture device interface, which I will use to measure the room impulse response. During the whole GSoC time I will use a Behringer ECM8000 with an Stage Line MPA-102 amplifier.… Read the rest

Week 4

This week I simplified and improved the signal flow graph for measuring room impulse responses.

V2__measurementsI also improved and simplified the software architecture for adsp.xconvolver.


In the next step I fixed and improved library.kodi.audioengine, which is necessary to send audio samples towards Kodi’s Audio Engine (ActiveAE). This allows me to open audio streams with any format (data format, sample frequency and speaker layout) like DVDPlayer or PAPlayer.

After that I created the first version of the CaptureDevice class hierarchy. It’s not final and I will discuss it with my mentors during the next week.

Capturing_Class_OverviewRead the rest

Week 3

  • I ported adsp.xconvolver and LibXConvolver to Linux
  • I tested the new addon library kodi.library.audioengine
  • I created a exponential sine sweep wave file with Audacity and wrote a class that can load this wave file and send it through library.kodi.audioengine which sends it through ActiveAE
Read the rest