Thank you for your donation!


Cloudsmith graciously provides open-source package management and distribution for our project.


long time hobbyist and wannabe audiophile on a budget (Active 2-way build inside)
#1
Hey everyone!

I found moode a few times over the years but came back because it does a great job of just plain working but also the camilla DSP integration. I'd been using that for some active two way speakers and it's amazing.

Now I'm turning them into something useful for my wife who works from home and when I just need some jams.

edit: added my current project down below. Enjoy.
Reply
#2
Welcome ! care to post your config for 2-way active ?
Reply
#3
(03-12-2024, 05:26 AM)DRONE7 Wrote: Welcome !   care to post your config for 2-way active ?

Sure, why not?

   

Drivers:
Adire Extremis 6.8 (long since discontinued but still awesome)
Vifa XT25SC (no faceplate version)
A tiny Dayton H45E elliptical waveguide (also discontinued)
Built into a slotted, vented enclosure

Electronics:
Raspberry Pi 4B 8GB in case
2 mystery 384kHz 32bit USB-C DACs
Originally a Sherwood RD6108 HT receiver (with 6 channel direct inputs--perfect for active crossovers)
Now a Douk Audio M4 4 channel amp
a couple USB-C to USB-A adapters
a couple 3.5mm to 2x RCA adapters
4 channels worth of speaker wire

Software:
Originally Just Camilla DSP and Raspotify
Now moOde Audio (because it has both and more!)

Setup:
You'll need SSH access to the machine moOde is running on. And sudo access.
1. Permanent udev rules so that my DACs are named consistently every time they're plugged into specific ports. 
Code:
### /etc/udev/rules.d/70-alsa-permanent.rules ###
SUBSYSTEM!="sound", GOTO="my_usb_audio_end"
ACTION!="add", GOTO="my_usb_audio_end"

DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.1/1-1.1:1.0/sound/card?", ATTR{id}="AudioHIGH"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2:1.0/sound/card?", ATTR{id}="AudioMID"

LABEL="my_usb_audio_end"
2. A virtual multichannel sound card in ALSA so Camilla can see it as a single device. It doesn't need the loopback section shown in the Camilla DSP config version. It may not need the Jack section either. Note the AudioHIGH and AudioMID lines that correspond to the names in the udev rule!
Code:
### /etc/alsa/conf.d/asound_multicard.conf ###
# create a virtual four-channel device with two sound devices:
# This is in fact two interleaved stereo streams in
# different memory locations, so JACK will complain that it
# cannot get mmap-based access. see below.

pcm.multicard {
       type multi;
       slaves.a.pcm "hw:AudioHIGH";
       slaves.a.channels 2;
       slaves.b.pcm "hw:AudioMID";
       slaves.b.channels 2;
       bindings.0.slave a;
       bindings.0.channel 0;
       bindings.1.slave a;
       bindings.1.channel 1;
       bindings.2.slave b;
       bindings.2.channel 0;
       bindings.3.slave b;
       bindings.3.channel 1;
}


# JACK will be unhappy if there is no mixer to talk to, so we set
# this to card 0. This could be any device but 0 is easy.

ctl.multicard {
       type hw;
       card 3;
}

# This creates a 4 channel interleaved pcm stream based on
# the multi device. JACK will work with this one.

pcm.multicard2 {
       type route;
       slave.pcm "multicard";
       slave.channels 4;
       ttable.0.0 1;
       ttable.1.1 1;
       ttable.2.2 1;
       ttable.3.3 1;
}
# see above.
ctl.multicard2 {
       type hw;
       card 3;
}
3. CamillaDSP config using stdin and my above multicard out. I attached the two FIR filters as attachments  because this post is long enough already!

.zip   firfilters.zip (Size: 248.1 KB / Downloads: 0)
Code:
description: null
devices:
 adjust_period: 10
 capture:
   channels: 2
   extra_samples: 0
   filename: /dev/stdin
   format: S32LE
   read_bytes: 0
   skip_bytes: 0
   type: File
 capture_samplerate: 44100
 chunksize: 1024
 enable_rate_adjust: false
 playback:
   channels: 4
   device: multicard
   format: S32LE
   type: Alsa
 queuelimit: 4
 rate_measure_interval: null
 resampler:
   profile: Balanced
   type: AsyncSinc
 samplerate: 48000
 silence_threshold: null
 silence_timeout: null
 stop_on_rate_change: null
 target_level: null
 volume_ramp_time: null
filters:
 Bass:
   description: null
   parameters:
     freq: 85
     gain: 0
     q: 0.9
     type: Lowshelf
   type: Biquad
 Midrange Lowpass:
   description: null
   parameters:
     filename: /usr/share/camilladsp/coeffs/woofer01_filters.txt
     format: TEXT
     read_bytes_lines: 0
     skip_bytes_lines: 0
     type: Raw
   type: Conv
 Subsonic:
   description: null
   parameters:
     freq: 5
     order: 8
     type: LinkwitzRileyHighpass
   type: BiquadCombo
 Treble:
   description: null
   parameters:
     freq: 6500
     gain: 0
     q: 0.7
     type: Highshelf
   type: Biquad
 Tweeter Highpass:
   description: null
   parameters:
     filename: /usr/share/camilladsp/coeffs/tweeter01_filters.txt
     format: TEXT
     read_bytes_lines: 0
     skip_bytes_lines: 0
     type: Raw
   type: Conv
mixers:
 to4chan:
   channels:
     in: 2
     out: 4
   description: null
   mapping:
   - dest: 0
     mute: false
     sources:
     - channel: 0
       gain: 0
       inverted: false
       mute: false
       scale: null
   - dest: 1
     mute: false
     sources:
     - channel: 1
       gain: 0
       inverted: false
       mute: false
       scale: null
   - dest: 2
     mute: false
     sources:
     - channel: 0
       gain: 8
       inverted: false
       mute: false
       scale: null
   - dest: 3
     mute: false
     sources:
     - channel: 1
       gain: 8
       inverted: false
       mute: false
       scale: null
pipeline:
- bypassed: null
 channel: 0
 description: null
 names:
 - Subsonic
 type: Filter
- bypassed: null
 channel: 1
 description: null
 names:
 - Subsonic
 type: Filter
- bypassed: null
 description: null
 name: to4chan
 type: Mixer
- bypassed: null
 channel: 0
 description: null
 names:
 - Tweeter Highpass
 type: Filter
- bypassed: null
 channel: 1
 description: null
 names:
 - Tweeter Highpass
 type: Filter
- bypassed: null
 channel: 2
 description: null
 names:
 - Midrange Lowpass
 type: Filter
- bypassed: null
 channel: 3
 description: null
 names:
 - Midrange Lowpass
 type: Filter
processors: null
title: null

4. Moode config: 
  • CONFIGURE: CAMILLADSP: Pipeline editor section: status and expert both enabled--hit save at the top of the page!). After saving: General: Default device OFF. Save again.
  • CONFIGURE: AUDIO: Audio Output section: volume control changed to camilladsp. output device doesn't matter. ALSA Options: loopback OFF
  • Ignore all the quick convolution filter and file manager stuff here 
  • Ignore Equalizers at the bottom of the audio section.
  • Head to the CamillaDSP pipeline editor at http://moode.local/cdsp-configeditor.php (get to the CamillaDSP settings through the CONFIGURE menu or at the bottom of the Audio settings) and then click on the Pipeline Editor [OPEN] button. 
  • Your can set all the above options there or you can upload a yaml (e.g. my newfir.yml) directly in the file manager. This applies whether you run moOde or just CamillaDSP.
  • I ALWAYS test signal level output on something before final hookups. Except when I don't and break stuff!
     
5. Other stuff:
From here I just configure all my renderers (bluetooth, spotify, etc.) and NFS music library.
Plug in everything. one USB DAC does high outputs red = right tweeter, white = left tweeter. The other USB DAC does mid output. red = right mid, white = left mid. 
Again, I put the udev rules in place so that the top blue USB port (next to the LAN port) is tweeters and the lower is midrange. All my USB DACs have the same vendor and product ID and serial so I have to do it based on port instead.

6. Play Music!

I know this is long but it felt like a writeup was a long time coming anyway. 

Big Grin
Reply
#4
@fixjunk

Thanks for sharing. I doubt I’ll follow in your footsteps (woodworking and I have a stormy relationship) but this was an interesting read.

Your last point under “4. moOde config” made me laugh out loud. Been there; done that.!

Regards,
Kent
Reply


Forum Jump: