(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!
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.