--- /dev/null
+Include.pcm_split.File "/common/pcm/split.conf"
+
+Macro [
+ {
+ SplitPCM {
+ Name "beacn_mic_stereo_out"
+ Direction Playback
+ Channels 2
+ HWChannels 3
+ HWChannelPos0 FL
+ HWChannelPos1 FR
+ HWChannelPos2 MONO
+ }
+ }
+ {
+ SplitPCM {
+ Name "beacn_mic_stereo_in"
+ Direction Capture
+ Channels 2
+ HWChannels 4
+ HWChannelPos0 FL
+ HWChannelPos1 FR
+ HWChannelPos2 MONO # Dry Mic
+ HWChannelPos3 MONO # Dry + Expander
+ }
+ }
+]
+
+SectionDevice."Headphones" {
+ Comment "Headphones"
+
+ Value {
+ PlaybackPriority 200
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_mic_stereo_out"
+ Direction Playback
+ HWChannels 3
+ Channels 2
+ Channel0 0
+ Channel1 1
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Mic" {
+ Comment "Microphone"
+
+ Value {
+ CapturePriority 200
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_mic_stereo_in"
+ Direction Capture
+ HWChannels 4
+ Channels 2
+ Channel0 0
+ Channel1 1
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
--- /dev/null
+Comment "Beacn Mic USB"
+
+SectionUseCase."HiFi" {
+ Comment "Default Alsa Profile"
+ File "/USB-Audio/Beacn/Beacn-Mic-HiFi.conf"
+}
+
+Define.DirectPlaybackChannels 3
+Define.DirectCaptureChannels 4
+
+Include.dhw.File "/common/direct.conf"
--- /dev/null
+Include.pcm_split.File "/common/pcm/split.conf"
+
+Macro.playback.SplitPCM {
+ Name "beacn_studio_stereo_out"
+ Direction Playback
+ Channels 2
+ HWChannels 11
+ HWChannelPos0 FL # Headphone Left
+ HWChannelPos1 FR # Headphone Right
+ HWChannelPos2 MONO # Unused Channel
+ HWChannelPos3 FL # Link 1 Out Left
+ HWChannelPos4 FR # Link 1 Out Right
+ HWChannelPos5 FL # Link 2 Out Left
+ HWChannelPos6 FR # Link 2 Out Right
+ HWChannelPos7 FL # Link 3 Out Left
+ HWChannelPos8 FR # Link 3 Out Right
+ HWChannelPos9 FL # Link 4 Out Left
+ HWChannelPos10 FR # Link 4 Out Right
+}
+
+Macro.capture.SplitPCM {
+ Name "beacn_studio_stereo_in"
+ Direction Capture
+ Channels 2
+ HWChannels 12
+
+ HWChannelPos0 FL # Microphone Left
+ HWChannelPos1 FR # Microphone Right
+
+ HWChannelPos2 MONO # UNKNOWN (Possible Dry Mic)
+ HWChannelPos3 MONO # UNKNOWN (Possible Dry + Expander)
+
+ HWChannelPos4 FL # Link 1 In Left
+ HWChannelPos5 FR # Link 1 In Right
+ HWChannelPos6 FL # Link 2 In Left
+ HWChannelPos7 FR # Link 2 In Right
+ HWChannelPos8 FL # Link 3 In Left
+ HWChannelPos9 FR # Link 3 In Right
+ HWChannelPos10 FL # Link 4 In Left
+ HWChannelPos11 FR # Link 4 In Right
+}
--- /dev/null
+SectionDevice."Headphones" {
+ Comment "Headphones"
+
+ Value {
+ PlaybackPriority 100
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_out"
+ Direction Playback
+ HWChannels 11
+ Channels 2
+ Channel0 0
+ Channel1 1
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Mic" {
+ Comment "Microphone"
+
+ Value {
+ CapturePriority 100
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_in"
+ Direction Capture
+ HWChannels 12
+ Channels 2
+ Channel0 0
+ Channel1 1
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
--- /dev/null
+SectionDevice."Line1" {
+ Comment "Link 4"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_out"
+ Direction Playback
+ HWChannels 11
+ Channels 2
+ Channel0 9
+ Channel1 10
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Line2" {
+ Comment "Link 3"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_out"
+ Direction Playback
+ HWChannels 11
+ Channels 2
+ Channel0 7
+ Channel1 8
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Line3" {
+ Comment "Link 2"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_out"
+ Direction Playback
+ HWChannels 11
+ Channels 2
+ Channel0 5
+ Channel1 6
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Line4" {
+ Comment "Link 1"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_out"
+ Direction Playback
+ HWChannels 11
+ Channels 2
+ Channel0 3
+ Channel1 4
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Headphones" {
+ Comment "Headphones"
+
+ Value {
+ PlaybackPriority 100
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_out"
+ Direction Playback
+ HWChannels 11
+ Channels 2
+ Channel0 0
+ Channel1 1
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Line5" {
+ Comment "Link 4"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_in"
+ Direction Capture
+ HWChannels 12
+ Channels 2
+ Channel0 10
+ Channel1 11
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Line6" {
+ Comment "Link 3"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_in"
+ Direction Capture
+ HWChannels 12
+ Channels 2
+ Channel0 8
+ Channel1 9
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Line7" {
+ Comment "Link 2"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_in"
+ Direction Capture
+ HWChannels 12
+ Channels 2
+ Channel0 6
+ Channel1 7
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Line8" {
+ Comment "Link 1"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_in"
+ Direction Capture
+ HWChannels 12
+ Channels 2
+ Channel0 4
+ Channel1 5
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Mic" {
+ Comment "Microphone"
+
+ Value {
+ CapturePriority 100
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_in"
+ Direction Capture
+ HWChannels 12
+ Channels 2
+ Channel0 0
+ Channel1 1
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
--- /dev/null
+Include.pcm_split.File "/common/pcm/split.conf"
+
+Macro.playback.SplitPCM {
+ Name "beacn_studio_stereo_out"
+ Direction Playback
+ Channels 2
+ HWChannels 8
+ HWChannelPos0 FL
+ HWChannelPos1 FR
+ HWChannelPos2 FL
+ HWChannelPos3 FR
+ HWChannelPos4 FL
+ HWChannelPos5 FR
+ HWChannelPos6 FL
+ HWChannelPos7 FR
+}
+
+Macro.capture.SplitPCM {
+ Name "beacn_studio_stereo_in"
+ Direction Capture
+ Channels 2
+ HWChannels 8
+ HWChannelPos0 FL
+ HWChannelPos1 FR
+ HWChannelPos2 FL
+ HWChannelPos3 FR
+ HWChannelPos4 FL
+ HWChannelPos5 FR
+ HWChannelPos6 FL
+ HWChannelPos7 FR
+}
+
+SectionDevice."Line1" {
+ Comment "Link 4"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_out"
+ Direction Playback
+ HWChannels 8
+ Channels 2
+ Channel0 6
+ Channel1 7
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Line2" {
+ Comment "Link 3"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_out"
+ Direction Playback
+ HWChannels 8
+ Channels 2
+ Channel0 4
+ Channel1 5
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Line3" {
+ Comment "Link 2"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_out"
+ Direction Playback
+ HWChannels 8
+ Channels 2
+ Channel0 2
+ Channel1 3
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Line4" {
+ Comment "Link 1"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_out"
+ Direction Playback
+ HWChannels 8
+ Channels 2
+ Channel0 0
+ Channel1 1
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Line5" {
+ Comment "Link 4"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_in"
+ Direction Capture
+ HWChannels 8
+ Channels 2
+ Channel0 6
+ Channel1 7
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Line6" {
+ Comment "Link 3"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_in"
+ Direction Capture
+ HWChannels 8
+ Channels 2
+ Channel0 4
+ Channel1 5
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Line7" {
+ Comment "Link 2"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_in"
+ Direction Capture
+ HWChannels 8
+ Channels 2
+ Channel0 2
+ Channel1 3
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."Line8" {
+ Comment "Link 1"
+
+ Value {
+ PlaybackPriority 400
+ }
+ Macro.pcm_split.SplitPCMDevice {
+ Name "beacn_studio_stereo_in"
+ Direction Capture
+ HWChannels 8
+ Channels 2
+ Channel0 0
+ Channel1 1
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
--- /dev/null
+# The Beacn Studio has two USB ports which both present different PIDs, so we do
+# individual checks, and load the appropriate configs for the port connected.
+
+Comment "Beacn Studio USB"
+If.usb1 {
+ Condition {
+ Type String
+ Haystack "${CardComponents}"
+ Needle "USB33ae:0003"
+ }
+ True {
+ # Channel configuration is common between all the profiles, so we'll include it here
+ Include.pcm_split.File "/USB-Audio/Beacn/Beacn-Studio-USB1-Channels.conf"
+
+ # If the user isn't using the 'Dual PC' feature of the Beacn Studio, there isn't really
+ # much point presenting them with an additional 4 unusable inputs and outputs, so we'll
+ # offer two profile options so those channels can be hidden.
+ SectionUseCase."Basic" {
+ Comment "Beacn Studio"
+ File "/USB-Audio/Beacn/Beacn-Studio-USB1-HiFi.conf"
+ }
+
+ SectionUseCase."Link" {
+ Comment "Beacn Studio with Link"
+ File "/USB-Audio/Beacn/Beacn-Studio-USB1-Link-HiFi.conf"
+ }
+ }
+}
+
+If.usb2 {
+ Condition {
+ Type String
+ Haystack "${CardComponents}"
+ Needle "USB33ae:4003"
+ }
+ True {
+ SectionUseCase."Link" {
+ Comment "Beacn Studio Link"
+ File "/USB-Audio/Beacn/Beacn-Studio-USB2-HiFi.conf"
+ }
+ }
+}
ProfileName "SolidStateLabs/SSL2Plus"
}
}
+If.beacn-mic {
+ Condition {
+ Type String
+ Haystack "${CardComponents}"
+ Needle "USB33ae:0001"
+ }
+ True.Define.ProfileName "Beacn/Beacn-Mic"
+}
+If.beacn-studio {
+ Condition {
+ Type RegexMatch
+ String "${CardComponents}"
+ Regex "USB33ae:[04]003"
+ }
+ True.Define.ProfileName "Beacn/Beacn-Studio"
+}
If.mixremap {
Condition {
Type String