Skip to content

Instantly share code, notes, and snippets.

@lhammond
Forked from italic-r/.asoundrc
Created April 12, 2021 23:56
Show Gist options
  • Save lhammond/36a401d44b0cc9eff08566b6235d9d42 to your computer and use it in GitHub Desktop.
Save lhammond/36a401d44b0cc9eff08566b6235d9d42 to your computer and use it in GitHub Desktop.
ALSA - Signalink USB
# Use this file for a user-configurable ALSA soundcard setup.
# Place in the user's home folder (/home/ham/.asoundrc).
# This file is built for a Tigertronics Signalink USB, a USB
# soundcard designed to interface a computer with an amateur
# radio transceiver for digital mode operation. This
# configuration allows multiple programs to access the same
# sound device simultaneously without blocking the device.
# This configuration is built on a custom modprobe
# configuration file (/etc/modprobe.d/alsa-base.conf) to
# force consistent device labeling. While adjusting parameters,
# it is not necessary to reboot or log out to see changes.
# Simply save this file, restart the programs using the card
# and select the device in the software (if naming changed).
# Some notes about the Signalink USB:
# Different programs require different sampling rates, ie
# WSJT-X _requires_ 48 kHz sampling (thanks to K9YC for the tip!),
# while fldigi allows custom sampling rates (given the device
# supports them). The native sampling rate for the SLUSB is
# 44.1 kHz, but it supports up to 48 kHz. For this config,
# I used 48 kHz to satisfy WSJT-X, then adjusted fldigi to match.
# Other software requires various numbers of channels, ie qsstv.
# While the device has only 1 channel for each input and output,
# ALSA may split or join streams with plugins.
#####################################################################
# Software settings:
#####################################################################
# Fldigi:
# Mono or stereo io
# In stereo mode, tx audio is on right channel, so will require
# channels to be swapped in audio settings.
# WSJT-X:
# Mono or stereo io
# In stereo mode, tx audio is on right channel only.
# Rx audio may use either channel but not both or mono.
# QSSTV:
# Stereo-only io
# Rx audio pulls from one channel only, so splitting the stream to
# stereo mode results in audio in all cases.
# Tx audio is only one channel, likely right, so must be swapped in
# audio settings.
# Direwolf:
# Mono or stereo io, depending on the number of modems to run.
# Each modem requires its own tx and rx channel, so channel count
# must match.
# ARDOP:
# Modem requires a special 12ks/s rate, but is able to use mono or
# stereo io.
pcm.SIG {
type hw
card "SIGNALINK"
rate 48000
channels 1
nonblock 1
hint.show on
hint.description "Signalink USB"
}
ctl.SIG {
type hw
card "SIGNALINK"
nonblock 1
}
# Playback (Tx audio)
# Mix multiple audio streams into the final output stream sent to
# the device. This lets multiple programs transmit simultaneously.
# Most software is able to use smaller buffers, but ARDOP requires
# large buffers.
pcm.TX {
type dmix
ipc_key 1024
slave {
pcm "SIG"
channels 2
rate 48000
buffer_size 32768
}
bindings {
0 0
1 0
}
hint.show on
hint.description "Transmitter audio"
}
ctl.TX {
card 0
device 0
}
# Capture (Rx audio)
# Split receive channel into multiple streams. This
# allows multiple programs to monitor the sound device
# simultaneously (ie WSJT-X, fldigi and packet).
# Waterfall displays may run slowly with small buffers.
# Most software is able to use smaller buffers, but ARDOP requires
# large buffers.
pcm.RX {
type dsnoop
ipc_key 2048
ipc_key_add_uid on
slave {
pcm "SIG"
channels 2
rate 48000
buffer_size 32768
}
bindings {
0 0
1 0
}
hint.show on
hint.description "Receiver audio"
}
ctl.RX {
card 0
device 0
}
# Half-duplex IO device
# Present new stream mixers as a single device. Some software
# only recognizes a single device as the IO device, rather than
# allowing the user to select different input and output devices.
# DireWolf is one such program.
pcm.XCVR {
type asym
playback.pcm "TX"
capture.pcm "RX"
}
ctl.XCVR {
card 0
device 0
}
# ARDOP device
# ARDOP only supports 12ks/s so must use rate conversion module.
# Software that accesses this PCM is able to set a custom rate.
pcm.TX_ARDOP {
type rate
slave {
pcm "SIG"
rate 48000
}
hint.show on
hint.description "TX audio device for ARDOP"
}
pcm.RX_ARDOP {
type rate
slave {
pcm "SIG"
rate 48000
}
hint.show on
hint.description "RX audio device for ARDOP"
}
# SDR Loopback device
# This device consumes audio from SDR_IN and spits it out SDR_OUT.
# This allows local software to consume audio exactly as if it were
# coming from a physical card. As with the Signalink, use dmix and
# dsnoop plugins to allow multiple clients to use the device. Since
# there is no transmit capability in most SDRs, only one consumer
# is needed and no transmit audio is needed.
pcm.SDR_IN {
type hw
card "SDRLB"
device 0
subdevice 0
nonblock 1
format "S16_LE"
channels 1
rate 48000
hint.show on
hint.description "Send nc packets here"
}
pcm.SDR_OUT {
type hw
card "SDRLB"
device 1
subdevice 0
}
pcm.SDR_OUT_TX {
type dmix
ipc_key 4090
ipc_key_add_uid on
slave {
pcm "SDR_OUT"
channels 2
rate 48000
# buffer_size 4096
}
bindings {
0 0
1 0
}
hint.show on
hint.description "SDR transmit feed"
}
pcm.SDR_OUT_RX {
type dsnoop
ipc_key 8190
ipc_key_add_uid on
slave {
pcm "SDR_OUT"
channels 2
rate 48000
# buffer_size 4096
}
bindings {
0 0
1 0
}
hint.show on
hint.description "SDR receive feed"
}
pcm.SDR_OUT_RX_ARDOP {
type rate
slave {
pcm "SDR_OUT_RX"
rate 48000
}
hint.show on
hint.description "SDR device for ARDOP"
}
pcm.SDR_OUT_TX_ARDOP {
type rate
slave {
pcm "SDR_OUT_TX"
rate 48000
}
hint.show on
hint.description "SDR device for ARDOP"
}
pcm.XONAR {
type hw
card "U5"
nonblock 1
rate 192000
hint.show on
hint.description "Xonar U5"
}
ctl.XONAR {
type hw
card "U5"
nonblock 1
}
# udev rules for soundcard names. This file does nothing but make
# sound device names more human-readable. Place in:
# /etc/udev/rules.d/70-alsa-permanent.rules
SUBSYSTEM!="sound", GOTO="usb_audio"
ACTION!="add", GOTO="usb_audio"
ATTRS{idVendor}=="08bb", ATTRS{idProduct}=="2904", ATTR{id}="SIGNALINK"
ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0a1f", ATTR{id}="G930"
ATTRS{idVendor}=="046d", ATTRS{idProduct}=="081a", ATTR{id}="WEBCAM"
LABEL="usb_audio"
# This is a configuration file for modprobe (/etc/modprobe.d/alsa-base.conf)
# to force specific device ordering and indexing. This then exposes the devices
# to ALSA in the proper order regardless of the number of devices plugged in or
# the order they were connected.
# 0: HDMI
# 1: G930: 046d:0a1f
# 2: SIGNALINK: 08bb:2904
# 3: WEBCAM: 046d:081a
# Force snd-usb-audio to be second loaded sound module in modprobe
options snd slots=,snd-usb-audio
# Force index order of specific sound cards for predictable ordering and indexing
options snd-usb-audio index=1,2,3 vid=0x046d,0x08bb,0x046d pid=0x0a1f,0x2904,0x081a
# Hide on-board Intel audio chip (I don't use it)
options snd-hda-intel probe_mask=0xffff
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment