My bass management config needs improvemenet

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all

I have been working on a bass management configuration for some time now,
inspired by the "Low-pass filter for subwoofer channel (HOWTO)". I want to
share my experiences and hopefully get some feedback on how to improve it.

The purpose of this configuration is to pass all low frequency information
through the lfe channel. It should work for any number of channels in the
input. The primary reason for removing low frequency information from all
channels, except lfe, is to avoid large cone movement in speakers, thus
improve sound quality when playing loud. The low-pass filter from the howto
uses the identity filter to pass everything through unfiltered, this will
work if you set your lfe low pass filter below speaker roll-off. 

The low pass filter from the howto uses "plug" plugin that should do
automatic conversion, but I never got that to work. I use route and explicit
conversion through lfloat plugin. 

I started using Ubuntu Studio in beta release, and then I could do the
conversion to float before the route pcm. I wanted to do that to avoid
overflow when adding all channels to lfe channel. This doesn't work anymore,
alsa complains about unusable plugin. So I put the route plugin before
conversion. Is there any risk for integer overflow? I have tried using much
lower volume settings in the route plugin, but that sounds really bad, I
guess loss of detail when integers are scaled.

The filter high-passes everything except lfe. Lfe is low-pass filtered. The
high pass frequency is 200 hz, and the low pass is 100. The 100 hz
difference is needed, else the 100-200 hz band sounds too loud. There is not
much thought behind this though, I am shure there is a more scientific value
to use here. 

I have tried to find out how to configure the butterworth filters for 24
db/octave, but found nothing. Anyone? What I really would like to do is
linkewitz-riley filtering. Is that possible with these filters? If so, how
much frequency difference should there be between high-pass and low-pass
filters? 

The whole thing works pretty well. I have only tested playing CDs with this
config, but it should work with films and other media formats also. 

Sometimes the butterworth filter segfaults. VLC and Kaffeine provokes this
bug. Alsa-player not yet. See log at end of email. The config used when the
bug happened is shown in the link below, it is slightly different (other
values for volume in route plugin) from this config. 

pcm.!default {
    type plug
    slave.pcm mix_71
}

pcm.mix_71 {
    type route
    slave.pcm to_float
    slave.channels 8
    ttable {
        # Pass through all channels untouched 
        0.0     1     # front left
        1.1     1     # front right
        2.2     1     # side left
        3.3     1     # side right
        4.4     1     # center
        5.5     1     # subwoofer
        6.6     1     # rear left
        7.7     1     # rear right
        # Copy everything, except lfe, to lfe 
        # Possible integer overflow?
        0.5     0.75     # front left
        1.5     0.75     # front right
        2.5     0.75     # side left
        3.5     0.75     # side right
        4.5     0.75     # center
        6.5     0.75     # rear left
        7.5     0.75     # rear right
    }
}

pcm.to_float {
    type lfloat             # Linear<->Float conversion PCM
    slave.pcm filter
    slave.format FLOAT
}

pcm.filter {
    type ladspa
    slave.pcm to_int
    # lib64 since it is an x64 system, change to "lib" for 32 bit systems
    path "/usr/lib64/ladspa"
    channels 8
    plugins {
      0 {
         id 1904  #butterworth high pass
         policy none
         input.bindings.0 "Input";
         output.bindings.0 "Output";
         input {
            controls [ 200 0.755 ]
         }
      }

      1 {
         id 1904  #butterworth high pass
         policy none
         input.bindings.1 "Input";
         output.bindings.1 "Output";
         input {
            controls [ 200 0.755 ]
         }
      }

      2 {
         id 1904  #butterworth high pass
         policy none
         input.bindings.2 "Input";
         output.bindings.2 "Output";
         input {
            controls [ 200 0.755 ]
         }
      }

      3 {
         id 1904  #butterworth high pass
         policy none
         input.bindings.3 "Input";
         output.bindings.3 "Output";
         input {
            controls [ 200 0.755 ]
         }
      }

      4 {
         id 1904  #butterworth high pass
         policy none
         input.bindings.4 "Input";
         output.bindings.4 "Output";
         input {
            controls [ 200 0.755 ]
         }
      }

      5 {
         id 1903  # Butterworth low-pass filter
         policy none
         input.bindings.5 "Input";
         output.bindings.5 "Output";
         input {
            controls [ 100 0.755 ]
         }
      }

      6 {
         id 1904  #butterworth high pass
         policy none
         input.bindings.6 "Input";
         output.bindings.6 "Output";
         input {
            controls [ 200 0.755 ]
         }
      }

      7 {
         id 1904  #butterworth high pass
         policy none
         input.bindings.7 "Input";
         output.bindings.7 "Output";
         input {
            controls [ 200 0.755 ]
         }
      }

   }
}

pcm.to_int {
    type lfloat             # Linear<->Float conversion PCM
    slave.pcm surround71
    slave.format S32_LE
}

My alsa config:
http://www.alsa-project.org/db/?f=41878a60e92d2bc3439293d9eec51251cf52c33e

# tail -n 24 messages
Nov  7 18:37:35 htpc kernel: [ 4992.267216] __ratelimit: 60 callbacks
suppressed Nov  7 18:37:35 htpc kernel: [ 4992.267221] gamix[7469]: segfault
at 0 ip 000000000040a665 sp 00007fff6ab37f70 error 4 in gamix[400000+11000]
Nov  7 18:39:06 htpc kernel: [ 5083.614336] sr 2:0:0:0: [sr0] Result:
hostbyte=DID_OK driverbyte=DRIVER_SENSE Nov  7 18:39:06 htpc kernel: [
5083.614346] sr 2:0:0:0: [sr0] Sense Key : Illegal Request [current] Nov  7
18:39:06 htpc kernel: [ 5083.614355] Info fld=0x0 Nov  7 18:39:06 htpc
kernel: [ 5083.614358] sr 2:0:0:0: [sr0] Add. Sense: Illegal mode for this
track Nov  7 18:39:06 htpc kernel: [ 5083.628229] sr 2:0:0:0: [sr0] Result:
hostbyte=DID_OK driverbyte=DRIVER_SENSE Nov  7 18:39:06 htpc kernel: [
5083.628240] sr 2:0:0:0: [sr0] Sense Key : Illegal Request [current] Nov  7
18:39:06 htpc kernel: [ 5083.628248] Info fld=0x0 Nov  7 18:39:06 htpc
kernel: [ 5083.628252] sr 2:0:0:0: [sr0] Add. Sense: Illegal mode for this
track Nov  7 18:39:06 htpc kernel: [ 5083.707839] sr 2:0:0:0: [sr0] Result:
hostbyte=DID_OK driverbyte=DRIVER_SENSE Nov  7 18:39:06 htpc kernel: [
5083.707849] sr 2:0:0:0: [sr0] Sense Key : Illegal Request [current] Nov  7
18:39:06 htpc kernel: [ 5083.707858] Info fld=0x0 Nov  7 18:39:06 htpc
kernel: [ 5083.707861] sr 2:0:0:0: [sr0] Add. Sense: Illegal mode for this
track Nov  7 18:39:06 htpc kernel: [ 5083.714229] sr 2:0:0:0: [sr0] Result:
hostbyte=DID_OK driverbyte=DRIVER_SENSE Nov  7 18:39:06 htpc kernel: [
5083.714236] sr 2:0:0:0: [sr0] Sense Key : Illegal Request [current] Nov  7
18:39:06 htpc kernel: [ 5083.714243] Info fld=0x0 Nov  7 18:39:06 htpc
kernel: [ 5083.714246] sr 2:0:0:0: [sr0] Add. Sense: Illegal mode for this
track Nov  7 18:39:06 htpc kernel: [ 5083.721411] sr 2:0:0:0: [sr0] Result:
hostbyte=DID_OK driverbyte=DRIVER_SENSE Nov  7 18:39:06 htpc kernel: [
5083.721420] sr 2:0:0:0: [sr0] Sense Key : Illegal Request [current] Nov  7
18:39:06 htpc kernel: [ 5083.721428] Info fld=0x0 Nov  7 18:39:06 htpc
kernel: [ 5083.721431] sr 2:0:0:0: [sr0] Add. Sense: Illegal mode for this
track Nov  7 18:40:42 htpc kernel: [ 5179.932568] __ratelimit: 30 callbacks
suppressed Nov  7 18:40:42 htpc kernel: [ 5179.932577] vlc[8345]: segfault
at 100000001 ip 00007f06c598e8eb sp 00007f06c5889f30 error 4 in
butterworth_1902.so[7f06c598b000+6000]


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Alsa-user mailing list
Alsa-user@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/alsa-user

[Index of Archives]     [ALSA Devel]     [Linux Audio Users]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]

  Powered by Linux