User Tools

Site Tools


extending_the_effects_engine_report_w7

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Last revision Both sides next revision
extending_the_effects_engine_report_w7 [2014/07/07 04:42]
badescunicu
extending_the_effects_engine_report_w7 [2014/07/07 04:44]
badescunicu
Line 8: Line 8:
 The second part of my GSoC project is adding LV2 support to Mixxx. I started with testing Calf[2] plug inside Audacity and Ardour. Audacity 2.0.5 which is the last released version does not support them, so I had to compile Audacity 2.0.6 from sources. After installing and uninstalling libraries, resolving conflicts between packages I managed to get it up and running. Afterwards I found two Jack hosts for LV2: //​calfjackhost//​ (comes with calf plug ins) and //jalv// (written by the creator of LV2). I installed //jack//, //​qjackctl//​ and after fixing an issue with jack server not being able to start, I was able to route Mixxx'​s sound through LV2 plug ins and then back to speakers. I tested //jack// on Windows too and it seems to work as expected which is good news for us. This made me and Daniel consider another approach to adding LV2 support to Mixxx. Rather than making Mixxx an LV2 host, use an existing one to process the sound. Roughly, Mixxx will feature an effect which routes the sound samples to a Jack host, get them back modified and output them to Mixxx'​s master output. This approach has the advantage of being more stable and less error prone. The second part of my GSoC project is adding LV2 support to Mixxx. I started with testing Calf[2] plug inside Audacity and Ardour. Audacity 2.0.5 which is the last released version does not support them, so I had to compile Audacity 2.0.6 from sources. After installing and uninstalling libraries, resolving conflicts between packages I managed to get it up and running. Afterwards I found two Jack hosts for LV2: //​calfjackhost//​ (comes with calf plug ins) and //jalv// (written by the creator of LV2). I installed //jack//, //​qjackctl//​ and after fixing an issue with jack server not being able to start, I was able to route Mixxx'​s sound through LV2 plug ins and then back to speakers. I tested //jack// on Windows too and it seems to work as expected which is good news for us. This made me and Daniel consider another approach to adding LV2 support to Mixxx. Rather than making Mixxx an LV2 host, use an existing one to process the sound. Roughly, Mixxx will feature an effect which routes the sound samples to a Jack host, get them back modified and output them to Mixxx'​s master output. This approach has the advantage of being more stable and less error prone.
  
-As a side task I took on the quest to implement a FFT Graphic Equalizer for Mixxx, based on Audacity'​s Equalization[3]. After days of reading about the Fourier transform, FFT windowing[4] and overlapping[5],​ I was disappointed to conclude that is not worth having such an Equalizer. Audacity has a window size of ~16000 samples and it is filtering samples in chunks to use the overlap add method. However, since Mixxx is doing real time equalization,​ we don't have access to many samples (I did some tests and I got 8192 samples when choosing ​the largest audio buffer from preferences). This implied to set the window size to our buffer size and further divide this buffer into chunks. Consequently we applied FFT on a small number of samples which gave us poor frequency range (FFT_sample_len / 2 frequency bins were accessible). This[6] post gives some arguments against frequency domain equalizers. As we were aiming for an efficient equalizer, here is a quote from that blog post which is proving the contrary: //The FFT, though efficient compared to the DFT (which is the FFT without the "​fast"​ part), performs worse than linear time, and we need to do both the FFT and it's inverse, which is computationally similar. EQing with the FFT is therefore generally very inefficient compared to comparable time-domain filters.//+As a side task I took on the quest to implement a FFT Graphic Equalizer for Mixxx, based on Audacity'​s Equalization[3]. After days of reading about the Fourier transform, FFT windowing[4] and overlapping[5],​ I was disappointed to conclude that is not worth having such an Equalizer. Audacity has a window size of ~16000 samples and it is filtering samples in chunks to use the overlap add method. However, since Mixxx is doing real time equalization,​ we don't have access to many samples (I did some tests and I got 8192 samples when I chose the largest audio buffer from preferences). This implied to set the window size to our buffer size and further divide this buffer into chunks. Consequently we applied FFT on a small number of samples which gave us poor frequency range (FFT_sample_len / 2 frequency bins were accessible). This[6] post gives some arguments against frequency domain equalizers. As we were aiming for an efficient equalizer, here is a quote from that blog post which is proving the contrary: //The FFT, though efficient compared to the DFT (which is the FFT without the "​fast"​ part), performs worse than linear time, and we need to do both the FFT and it's inverse, which is computationally similar. EQing with the FFT is therefore generally very inefficient compared to comparable time-domain filters.//
  
 I was confused by the terms PortAudio, PulseAudio, Jack, ALSA and so on. Playing with //jack//, Mixxx preferences and talking with a few guys on IRC made me learn new and interesting things about Linux sound architecture. I found out that PortAudio is a cross-platform library for controlling various lower level components such as PulseAudio, Jack, Alsa, etc. PulseAudio is similar with Jack. They do their job through ALSA or another low level piece of software like the older OSS. I was confused by the terms PortAudio, PulseAudio, Jack, ALSA and so on. Playing with //jack//, Mixxx preferences and talking with a few guys on IRC made me learn new and interesting things about Linux sound architecture. I found out that PortAudio is a cross-platform library for controlling various lower level components such as PulseAudio, Jack, Alsa, etc. PulseAudio is similar with Jack. They do their job through ALSA or another low level piece of software like the older OSS.
extending_the_effects_engine_report_w7.txt ยท Last modified: 2014/07/27 18:09 by badescunicu