Moving ALSA digital crossover from Volumio 2 to 3

I am using the two channels on my DAC to independently drive the drivers in my speaker through a custom ALSA filter or a digital crossover.

Volumio 3 seems to override the ALSA config file on startup and the only documentation I can find to overcome this is to write a plugin for my ALSA digital crossover.

This is something unique to my installation and I see little value in mastering the Volumio plugin SDK just to get my ALSA filters working again.

Is there a way to include my ALSA snippet into my installation without development?

Thanks!

I’ve tried moving my old ALSA config over to a plugin but the best I can get it to still gives the following error in mpd:

Jul 03 17:09 : client: [0] opened from local
ALSA lib pcm_params.c:2226:(snd1_pcm_hw_refine_slave) Slave PCM not usable
ALSA lib /home/pi/volumio-alsa-plugin/src/pcm_volumioswitch.c:174:(_snd_pcm_volumioswitch_hw_params) PCM volumioMultiRoomServer failed to read the hardware parameters for pcm loki

mpd: pcm.c:710: snd_pcm_name: Assertion `pcm' failed.

My ALSA snippet looks like this:

# SEAS Loki - Start
# Create a plug for the crossover
pcm.loki {
    type plug
    slave {
      pcm "loki-makemono"
      format "unchanged" 
      channels "unchanged"
    }
}


# Digital Crossover for SEAS Loki
pcm.loki-makemono {
    type route
    slave.pcm "loki-filter"
    ttable {
        0.0 1    # in-channel 0, out-channel 0, 100% volume
        1.0 1    # in-channel 1, out-channel 0, 100% volume
    }
}

pcm.loki-filter {
     type ladspa
     slave.pcm "loki-speaker"
     path "/usr/lib/ladspa"
     channels 2
     plugins
     {
          0 {
               label RTlr4lowpass
               policy none
               input.bindings.0 "Input"
               output.bindings.1 "Output"
               input { controls [ 2900 ] }   # low left [ frequency (-6 dB XO point)]
          }
          1 {
               label RTlr4hipass
               policy none
               input.bindings.0 "Input"
               output.bindings.0 "Output"
               input { controls [ 2900 ] }   # high left (match freq above)
          }

     }
}


pcm.loki-speaker {
    type plug
    slave {
     pcm "loki-t-table"
     channels 2
     rate "unchanged"
    }
}

pcm.loki-t-table  {
    type route
    slave.pcm "loki-complete"
    ttable {
      0.0   0.8175
      1.1   1
    }
}


pcm.loki-complete {
  type copy
  slave.pcm "lokiout"
}

# SEAS Loki - End crossover.

Removing pcm.loki-filter from the ALSA chain removes the error but defies the point of the exercise.

Any help would be appreciated.

hello!
not sure to help but to my understanding…
your alsa does :

  • join L and R for mono output
  • send to left freq >2900Hz with an attenuation 0.8175
  • send to right freq <2900Hz
    Am I right?

Hi!

Yes, that is correct.

The tweeter is connected to the left channel and the mid woofer to the right channel on this driver.

Thanks

I understand, but do you know you can achieve this with FusionDsp?

Thank you, I think I got it working (for now, I had to address the hardware directly which is technically not allowed in Volumio plugins).

My implementation: https://github.com/dirkackerman/volumio-plugins-sources