--- /dev/null
+Include.pcm_split.File "/common/pcm/split.conf"
+
+Macro [
+ {
+ SplitPCM {
+ Name "fast_track_ultra_stereo_out"
+ Direction Playback
+ Channels 2
+ HWChannels 8
+ HWChannelPos0 FL
+ HWChannelPos1 FR
+ HWChannelPos2 FL
+ HWChannelPos3 FR
+ HWChannelPos4 FL
+ HWChannelPos5 FR
+ HWChannelPos6 FL
+ HWChannelPos7 FR
+ }
+ }
+ {
+ SplitPCM {
+ Name "fast_track_ultra_mixed_in"
+ Direction Capture
+ Channels 1
+ HWChannels 8
+ HWChannelPos0 MONO
+ HWChannelPos1 MONO
+ HWChannelPos2 MONO
+ HWChannelPos3 MONO
+ HWChannelPos4 FL
+ HWChannelPos5 FR
+ HWChannelPos6 FL
+ HWChannelPos7 FR
+ }
+ }
+]
+
+SectionVerb {
+ EnableSequence [
+ # Fast Track Ultra is also a mixer.
+ # When every volume 100%, it sends everything
+ # everywhere, including through the effect
+ # processor. So we need to zero everything we
+ # do not use.
+ #
+ # Note that 'AInX - OutY Capture' are not
+ # really capture, but input monitoring.
+ # There is no hardware volume control for the captures
+ # other than the physical potentiometers on the device.
+
+ cset "name='AIn1 - Out1 Capture Volume' 0%"
+ cset "name='AIn2 - Out1 Capture Volume' 0%"
+ cset "name='AIn3 - Out1 Capture Volume' 0%"
+ cset "name='AIn4 - Out1 Capture Volume' 0%"
+ cset "name='AIn5 - Out1 Capture Volume' 0%"
+ cset "name='AIn6 - Out1 Capture Volume' 0%"
+ cset "name='AIn7 - Out1 Capture Volume' 0%"
+ cset "name='AIn8 - Out1 Capture Volume' 0%"
+
+ cset "name='AIn1 - Out2 Capture Volume' 0%"
+ cset "name='AIn2 - Out2 Capture Volume' 0%"
+ cset "name='AIn3 - Out2 Capture Volume' 0%"
+ cset "name='AIn4 - Out2 Capture Volume' 0%"
+ cset "name='AIn5 - Out2 Capture Volume' 0%"
+ cset "name='AIn6 - Out2 Capture Volume' 0%"
+ cset "name='AIn7 - Out2 Capture Volume' 0%"
+ cset "name='AIn8 - Out2 Capture Volume' 0%"
+
+ cset "name='AIn1 - Out3 Capture Volume' 0%"
+ cset "name='AIn2 - Out3 Capture Volume' 0%"
+ cset "name='AIn3 - Out3 Capture Volume' 0%"
+ cset "name='AIn4 - Out3 Capture Volume' 0%"
+ cset "name='AIn5 - Out3 Capture Volume' 0%"
+ cset "name='AIn6 - Out3 Capture Volume' 0%"
+ cset "name='AIn7 - Out3 Capture Volume' 0%"
+ cset "name='AIn8 - Out3 Capture Volume' 0%"
+
+ cset "name='AIn1 - Out4 Capture Volume' 0%"
+ cset "name='AIn2 - Out4 Capture Volume' 0%"
+ cset "name='AIn3 - Out4 Capture Volume' 0%"
+ cset "name='AIn4 - Out4 Capture Volume' 0%"
+ cset "name='AIn5 - Out4 Capture Volume' 0%"
+ cset "name='AIn6 - Out4 Capture Volume' 0%"
+ cset "name='AIn7 - Out4 Capture Volume' 0%"
+ cset "name='AIn8 - Out4 Capture Volume' 0%"
+
+ cset "name='AIn1 - Out5 Capture Volume' 0%"
+ cset "name='AIn2 - Out5 Capture Volume' 0%"
+ cset "name='AIn3 - Out5 Capture Volume' 0%"
+ cset "name='AIn4 - Out5 Capture Volume' 0%"
+ cset "name='AIn5 - Out5 Capture Volume' 0%"
+ cset "name='AIn6 - Out5 Capture Volume' 0%"
+ cset "name='AIn7 - Out5 Capture Volume' 0%"
+ cset "name='AIn8 - Out5 Capture Volume' 0%"
+
+ cset "name='AIn1 - Out6 Capture Volume' 0%"
+ cset "name='AIn2 - Out6 Capture Volume' 0%"
+ cset "name='AIn3 - Out6 Capture Volume' 0%"
+ cset "name='AIn4 - Out6 Capture Volume' 0%"
+ cset "name='AIn5 - Out6 Capture Volume' 0%"
+ cset "name='AIn6 - Out6 Capture Volume' 0%"
+ cset "name='AIn7 - Out6 Capture Volume' 0%"
+ cset "name='AIn8 - Out6 Capture Volume' 0%"
+
+ cset "name='AIn1 - Out7 Capture Volume' 0%"
+ cset "name='AIn2 - Out7 Capture Volume' 0%"
+ cset "name='AIn3 - Out7 Capture Volume' 0%"
+ cset "name='AIn4 - Out7 Capture Volume' 0%"
+ cset "name='AIn5 - Out7 Capture Volume' 0%"
+ cset "name='AIn6 - Out7 Capture Volume' 0%"
+ cset "name='AIn7 - Out7 Capture Volume' 0%"
+ cset "name='AIn8 - Out7 Capture Volume' 0%"
+
+ cset "name='AIn1 - Out8 Capture Volume' 0%"
+ cset "name='AIn2 - Out8 Capture Volume' 0%"
+ cset "name='AIn3 - Out8 Capture Volume' 0%"
+ cset "name='AIn4 - Out8 Capture Volume' 0%"
+ cset "name='AIn5 - Out8 Capture Volume' 0%"
+ cset "name='AIn6 - Out8 Capture Volume' 0%"
+ cset "name='AIn7 - Out8 Capture Volume' 0%"
+ cset "name='AIn8 - Out8 Capture Volume' 0%"
+
+ cset "name='DIn1 - Out2 Playback Volume' 0%"
+ cset "name='DIn1 - Out3 Playback Volume' 0%"
+ cset "name='DIn1 - Out4 Playback Volume' 0%"
+ cset "name='DIn1 - Out5 Playback Volume' 0%"
+ cset "name='DIn1 - Out6 Playback Volume' 0%"
+ cset "name='DIn1 - Out7 Playback Volume' 0%"
+ cset "name='DIn1 - Out8 Playback Volume' 0%"
+
+ cset "name='DIn2 - Out1 Playback Volume' 0%"
+ cset "name='DIn2 - Out3 Playback Volume' 0%"
+ cset "name='DIn2 - Out4 Playback Volume' 0%"
+ cset "name='DIn2 - Out5 Playback Volume' 0%"
+ cset "name='DIn2 - Out6 Playback Volume' 0%"
+ cset "name='DIn2 - Out7 Playback Volume' 0%"
+ cset "name='DIn2 - Out8 Playback Volume' 0%"
+
+ cset "name='DIn3 - Out1 Playback Volume' 0%"
+ cset "name='DIn3 - Out2 Playback Volume' 0%"
+ cset "name='DIn3 - Out4 Playback Volume' 0%"
+ cset "name='DIn3 - Out5 Playback Volume' 0%"
+ cset "name='DIn3 - Out6 Playback Volume' 0%"
+ cset "name='DIn3 - Out7 Playback Volume' 0%"
+ cset "name='DIn3 - Out8 Playback Volume' 0%"
+
+ cset "name='DIn4 - Out1 Playback Volume' 0%"
+ cset "name='DIn4 - Out2 Playback Volume' 0%"
+ cset "name='DIn4 - Out3 Playback Volume' 0%"
+ cset "name='DIn4 - Out5 Playback Volume' 0%"
+ cset "name='DIn4 - Out6 Playback Volume' 0%"
+ cset "name='DIn4 - Out7 Playback Volume' 0%"
+ cset "name='DIn4 - Out8 Playback Volume' 0%"
+
+ cset "name='DIn5 - Out1 Playback Volume' 0%"
+ cset "name='DIn5 - Out2 Playback Volume' 0%"
+ cset "name='DIn5 - Out3 Playback Volume' 0%"
+ cset "name='DIn5 - Out4 Playback Volume' 0%"
+ cset "name='DIn5 - Out6 Playback Volume' 0%"
+ cset "name='DIn5 - Out7 Playback Volume' 0%"
+ cset "name='DIn5 - Out8 Playback Volume' 0%"
+
+ cset "name='DIn6 - Out1 Playback Volume' 0%"
+ cset "name='DIn6 - Out2 Playback Volume' 0%"
+ cset "name='DIn6 - Out3 Playback Volume' 0%"
+ cset "name='DIn6 - Out4 Playback Volume' 0%"
+ cset "name='DIn6 - Out5 Playback Volume' 0%"
+ cset "name='DIn6 - Out7 Playback Volume' 0%"
+ cset "name='DIn6 - Out8 Playback Volume' 0%"
+
+ cset "name='DIn7 - Out1 Playback Volume' 0%"
+ cset "name='DIn7 - Out2 Playback Volume' 0%"
+ cset "name='DIn7 - Out3 Playback Volume' 0%"
+ cset "name='DIn7 - Out4 Playback Volume' 0%"
+ cset "name='DIn7 - Out5 Playback Volume' 0%"
+ cset "name='DIn7 - Out6 Playback Volume' 0%"
+ cset "name='DIn7 - Out8 Playback Volume' 0%"
+
+ cset "name='DIn8 - Out1 Playback Volume' 0%"
+ cset "name='DIn8 - Out2 Playback Volume' 0%"
+ cset "name='DIn8 - Out3 Playback Volume' 0%"
+ cset "name='DIn8 - Out4 Playback Volume' 0%"
+ cset "name='DIn8 - Out5 Playback Volume' 0%"
+ cset "name='DIn8 - Out6 Playback Volume' 0%"
+ cset "name='DIn8 - Out7 Playback Volume' 0%"
+
+ cset "name='Effect Send AIn1 Volume' 0%"
+ cset "name='Effect Send AIn2 Volume' 0%"
+ cset "name='Effect Send AIn3 Volume' 0%"
+ cset "name='Effect Send AIn4 Volume' 0%"
+ cset "name='Effect Send AIn5 Volume' 0%"
+ cset "name='Effect Send AIn6 Volume' 0%"
+ cset "name='Effect Send AIn7 Volume' 0%"
+ cset "name='Effect Send AIn8 Volume' 0%"
+
+ cset "name='Effect Send DIn1 Volume' 0%"
+ cset "name='Effect Send DIn2 Volume' 0%"
+ cset "name='Effect Send DIn3 Volume' 0%"
+ cset "name='Effect Send DIn4 Volume' 0%"
+ cset "name='Effect Send DIn5 Volume' 0%"
+ cset "name='Effect Send DIn6 Volume' 0%"
+ cset "name='Effect Send DIn7 Volume' 0%"
+ cset "name='Effect Send DIn8 Volume' 0%"
+
+ cset "name='Effect Return 1 Volume' 0%"
+ cset "name='Effect Return 2 Volume' 0%"
+ cset "name='Effect Return 3 Volume' 0%"
+ cset "name='Effect Return 4 Volume' 0%"
+ ]
+}
+
+LibraryConfig.remap.Config {
+ ctl.default.map."name='Line1 Playback Volume'" {
+ "name='DIn1 - Out1 Playback Volume'".vindex.0 0
+ "name='DIn2 - Out2 Playback Volume'".vindex.1 0
+ }
+}
+
+LibraryConfig.remap.Config {
+ ctl.default.map."name='Line2 Playback Volume'" {
+ "name='DIn3 - Out3 Playback Volume'".vindex.0 0
+ "name='DIn4 - Out4 Playback Volume'".vindex.1 0
+ }
+}
+
+LibraryConfig.remap.Config {
+ ctl.default.map."name='Line3 Playback Volume'" {
+ "name='DIn5 - Out5 Playback Volume'".vindex.0 0
+ "name='DIn6 - Out6 Playback Volume'".vindex.1 0
+ }
+}
+
+LibraryConfig.remap.Config {
+ ctl.default.map."name='Line4 Playback Volume'" {
+ "name='DIn7 - Out7 Playback Volume'".vindex.0 0
+ "name='DIn8 - Out8 Playback Volume'".vindex.1 0
+ }
+}
+
+SectionDevice."Line1" {
+ Comment "Stereo Output 1/2 (Main - Headphones 1)"
+
+ Macro.pcm_split.SplitPCMDevice {
+ Name "fasttrackultra_stereo_out"
+ Direction Playback
+ HWChannels 8
+ Channels 2
+ Channel0 0
+ Channel1 1
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+ Value {
+ PlaybackMixer "default:${CardId}"
+ PlaybackMixerElem "Line1"
+ }
+}
+
+SectionDevice."Line2" {
+ Comment "Stereo Output 3/4 (Headphones 2)"
+
+ Macro.pcm_split.SplitPCMDevice {
+ Name "fast_track_ultra_stereo_out"
+ Direction Playback
+ HWChannels 8
+ Channels 2
+ Channel0 2
+ Channel1 3
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+ Value {
+ PlaybackMixer "default:${CardId}"
+ PlaybackMixerElem "Line2"
+ }
+}
+
+SectionDevice."Line3" {
+ Comment "Stereo Output 5/6"
+
+ Macro.pcm_split.SplitPCMDevice {
+ Name "fast_track_ultra_stereo_out"
+ Direction Playback
+ HWChannels 8
+ Channels 2
+ Channel0 4
+ Channel1 5
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+ Value {
+ PlaybackMixer "default:${CardId}"
+ PlaybackMixerElem "Line3"
+ }
+}
+
+SectionDevice."Line4" {
+ Comment "Stereo Output 7/8 (S/PDIF)"
+
+ Macro.pcm_split.SplitPCMDevice {
+ Name "fast_track_ultra_stereo_out"
+ Direction Playback
+ HWChannels 8
+ Channels 2
+ Channel0 6
+ Channel1 7
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+ Value {
+ PlaybackMixer "default:${CardId}"
+ PlaybackMixerElem "Line4"
+ }
+}
+
+# A typical use case is the use 4 front facing inputs as mono inputs
+# and then use 5/6 from the TRS input from the back (probably stereo).
+# 7/8 is only connected to S/PDIF so almost always stereo.
+
+SectionDevice."Mic1" {
+ Comment "Input 1"
+
+ Macro.pcm_split.SplitPCMDevice {
+ Name "fast_track_ultra_mixed_in"
+ Direction Capture
+ HWChannels 8
+ Channels 1
+ Channel0 0
+ ChannelPos0 MONO
+ }
+}
+
+SectionDevice."Mic2" {
+ Comment "Input 2"
+
+ Macro.pcm_split.SplitPCMDevice {
+ Name "fast_track_ultra_mixed_in"
+ Direction Capture
+ HWChannels 8
+ Channels 1
+ Channel0 1
+ ChannelPos0 MONO
+ }
+}
+
+SectionDevice."Mic3" {
+ Comment "Input 3"
+
+ Macro.pcm_split.SplitPCMDevice {
+ Name "fast_track_ultra_mixed_in"
+ Direction Capture
+ HWChannels 8
+ Channels 1
+ Channel0 2
+ ChannelPos0 MONO
+ }
+}
+
+SectionDevice."Mic4" {
+ Comment "Input 4"
+
+ Macro.pcm_split.SplitPCMDevice {
+ Name "fast_track_ultra_mixed_in"
+ Direction Capture
+ HWChannels 8
+ Channels 1
+ Channel0 3
+ ChannelPos0 MONO
+ }
+}
+
+SectionDevice."Line56" {
+ Comment "Input 5/6"
+
+ Macro.pcm_split.SplitPCMDevice {
+ Name "fast_track_ultra_mixed_in"
+ Direction Capture
+ HWChannels 8
+ Channels 2
+ Channel0 4
+ Channel1 5
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}
+
+SectionDevice."SPDIF78" {
+ Comment "Input 7/8 (S/PDIF)"
+
+ Macro.pcm_split.SplitPCMDevice {
+ Name "fast_track_ultra_mixed_in"
+ Direction Capture
+ HWChannels 8
+ Channels 2
+ Channel0 6
+ Channel1 7
+ ChannelPos0 FL
+ ChannelPos1 FR
+ }
+}