#!/bin/sh # # Copyright (c) 2004-2005 Mikael Magnusson # bindir=@bindir@ LO10K1=${bindir}/lo10k1 ## Default configuration # DECODER=SIMPLE51 #DECODER=PROLOGIC #DECODER=BOTH # Inputs FXIN_PCM_89=1 EXTIN_AC97=1 EXTIN_SPDIF_CD=1 #EXTIN_ZOOM=1 #EXTIN_TOSLINK=1 #EXTIN_LINE1=1 #EXTIN_COAX_SPDIF=1 #EXTIN_LINE2=1 # Outputs EXTOUT_ANALOG_FRONT=1 EXTOUT_ANALOG_REAR=1 EXTOUT_ANALOG_CENTER=1 EXTOUT_ANALOG_LFE=1 #EXTOUT_IEC958=1 #EXTOUT_REAR=1 #EXTOUT_CENTER=1 #EXTOUT_LFE=1 EXTOUT_HEADPHONE=1 if [ -r /etc/default/ld10k1 ]; then . /etc/default/ld10k1 fi #LO10K1="valgrind --num-callers=6 ../lo10k1" DEBUG=0 std_playback=playback #std_playback=playback_noswitch std_capture=capture #std_capture=capture_noswitch log () { local level=$1 shift if [ $DEBUG -gt $level ]; then echo "$@" fi } runlo10k1 () { log 2 $LO10K1 "$@" $LO10K1 "$@" res=$? if [ $res -ne 0 ]; then echo Failed $LO10K1 "$@" exit 1 fi } rename () { port=$1 name=$2 log 1 "rename $port = $name" runlo10k1 --renam "$port=$name" } connect () { from=$1 op=$2 to=$3 log 1 "connect $from $op $to" runlo10k1 --conadd "$from$op$to" } copy () { local name=$1 local port=$2 log 0 "copy \"$name\" $port" # Copy runlo10k1 -n --patch_name "$name Copy" -a copy_2.emu10k1 # Input connect "PIN($name Copy)" '=' "$port" } volume () { local name=$1 local port=$2 local default=$3 local index=${4:-0} log 1 "volume \"$name\" $port default=$default" # Volume runlo10k1 -n --ctrl "c-Left,Right:$name Volume,t-$name Volume:1,s-$name Volume:$default,i-$name Volume:${index}" --patch_name "$name Volume" -a vol_2.emu10k1 # Input connect "PIN($name Volume)" '=' "$port" } master_volume () { local name=$1 local port=$2 local default=$3 local index=$4 log 1 "master volume \"$name\" $port default=$default" # Master runlo10k1 -n --ctrl "c-VolM:$name Volume,t-$name Volume:1,s-$name Volume:$default,i-$name Volume:$index" --patch_name "$name Volume" -a vol_master.emu10k1 # Input connect "$port" '=' "PIN($name Volume)" } switch () { local name=$1 local port=$2 local default=$3 log 1 "switch \"$name\" $port default=$default" # Switch #runlo10k1 -n --ctrl "c-switchL,switchR:$name Switch,t-$name Switch:4,s-$name Switch:$default" --patch_name "$name Switch" -a switch_2.emu10k1 runlo10k1 -n --ctrl "c-switch:$name Switch,t-$name Switch:4,s-$name Switch:$default" --patch_name "$name Switch" -a mono_switch_2.emu10k1 # Input connect "PIN($name Switch)" '>' "$port" } switch_2x2 () { local name=$1 local port1=$2 local port2=$3 local default=$4 log 1 "switch 2x2 \"$name\" $port1 $port2 default=$default" # Switch runlo10k1 -n --ctrl "c-switchL,switchR:$name Switch,t-$name Switch:4,s-$name Switch:$default" --patch_name "$name Switch" -a switch_2x2.emu10k1 # Input connect "PIN($name Switch,0,1)" '>' "$port1" connect "PIN($name Switch,2,3)" '>' "$port2" } switch_5x2 () { local name=$1 local port1=$2 local port2=$3 local default=$4 log 1 "switch 5x2 \"$name\" $port1 $port2 default=$default" # Switch runlo10k1 -n --ctrl "c-switch:$name Switch,t-$name Switch:4,s-$name Switch:$default" --patch_name "$name Switch" -a switch_5x2.emu10k1 # Input connect "PIN($name Switch,0,1,2,3,4)" '>' "$port1" connect "PIN($name Switch,5,6,7,8,9)" '>' "$port2" } master_switch () { local name=$1 local port=$2 local default=$3 local index=$4 log 1 "master_switch \"$name\" $port default=$default" # Master switch runlo10k1 -n --ctrl "c-switch:$name Switch,t-$name Switch:4,s-$name Switch:$default,i-$name Switch:$index" --patch_name "$name Switch" -a switch_6.emu10k1 # Input connect "PIN($name Switch)" '=' "$port" } playback () { name=$1 port=$2 log 0 "playback \"$name\" $port" # Switch switch "$name Playback" "$port" "1#1" volume "$name Playback" "POUT($name Playback Switch)" "0#0" # Output add_output "POUT($name Playback Volume)" } playback_noswitch () { name=$1 port=$2 log 0 "playback_noswitch \"$name\" $port" # Switch volume "$name Playback" "$port" "0#0" # Output add_output "POUT($name Playback Volume)" } capture () { name=$1 port=$2 log 0 "capture \"$name\" $port" # Capture switch switch "$name Capture" "$port" "0#0" volume "$name Capture" "POUT($name Capture Switch)" "100#100" # Output connect "POUT($name Capture Volume)" '>' "OUT(OUT_PCM_Capture_Left,OUT_PCM_Capture_Right)" } capture_noswitch () { name=$1 port=$2 log 0 "capture_noswitch \"$name\" $port" # Capture switch volume "$name Capture" "$port" "100#100" # Output connect "POUT($name Capture Volume)" '>' "OUT(OUT_PCM_Capture_Left,OUT_PCM_Capture_Right)" } master () { local name=$1 local port=$2 local index=$3 log 0 "master \"$name\" $port" # Switch master_volume "$name Playback" "$port" 100 $index master_switch "$name Playback" "POUT($name Playback Volume)" 1 $index } dump_patches () { max=$(( ${1} - 1 )) line=$(seq -s ' ' 0 $max) for i in ${line}; do p=$(( $i + 100)) runlo10k1 --debug $p done exit } add_output () { local port=$1 $add_output_func "$port" } add_output_tone_2 () { local port=$1 connect "$port" '>' "PIN(Tone Control,0,1)" } add_output_simple_2 () { local port=$1 connect "$port" '>' "PIN(Wave Simple Stereo To 51,0,1)" } add_output_prologic_2 () { local port=$1 connect "$port" '>' "PIN(Wave Prologic,0,1)" } add_output_switched_2 () { local port=$1 add_output_simple_2 "$port" add_output_prologic_2 "$port" } simple_stereo_to_51 () { local name=$1 local control=$2 local port=$3 log 0 "simple_stereo_to_51 \"$name\" $port" # Simple Stereo to 5.1 runlo10k1 -n --ctrl "c-Left,Right:${control}Front Playback Volume,t-${control}Front Playback Volume:1,s-${control}Front Playback Volume:100#100,c-LeftSurr,RightSurr:${control}Surround Playback Volume,t-${control}Surround Playback Volume:1,c-Center:${control}Center Playback Volume,t-${control}Center Playback Volume:1,c-LFE:${control}LFE Playback Volume,t-${control}LFE Playback Volume:1" --patch_name "$name Simple Stereo To 51" -a sto51.emu10k1 # Input if [ "$port" != "" ]; then connect "$port" '>' "PIN($name Simple Stereo To 51,0,1)" fi } prologic () { local name=$1 local control=$2 local port=$3 log 0 "prologic \"$name\" $port" # Stereo to 5.1 runlo10k1 -n --ctrl "" --patch_name "$name Prologic" -a prologic.emu10k1 # Input if [ "$port" != "" ]; then connect "PIN($name Prologic,0,1)" '>' "$port" fi # PCM Multi runlo10k1 -n --ctrl "c-Left,Right:${control}Front Playback Volume,t-${control}Front Playback Volume:1,c-LeftSurr,RightSurr:${control}Surround Playback Volume,t-${control}Surround Playback Volume:1,c-Center:${control}Center Playback Volume,t-${control}Center Playback Volume:1,c-LFE:${control}LFE Playback Volume,t-${control}LFE Playback Volume:1" --patch_name "$name Multi Volume" -a simple.emu10k1 # Input connect "POUT($name Prologic)" '=' "PIN($name Multi Volume,0,1,2,3,4,5)" } tone () { local name=$1 local port=$2 log 0 "tone \"$name\" $port" # # Tone # runlo10k1 -n --ctrl "c-bass0,bass1,bass2,bass3,bass4:$name - Bass,t-$name - Bass:2,v-$name - Bass:1,c-treble0,treble1,treble2,treble3,treble4:$name - Treble,t-$name - Treble:3,v-$name - Treble:1,c-toneonoff:$name - Switch,t-$name - Switch:4" --patch_name "${name}" -a tone.emu10k1 } multi_playback () { local name=$1 local port=$2 if [ "$name" != "" ]; then name="$name " fi log 0 "multi_playback \"$name\" $port" # PCM Multi runlo10k1 -n --ctrl "c-Left,Right:${name}Front Playback Volume,t-${name}Front Playback Volume:1,c-LeftSurr,RightSurr:${name}Surround Playback Volume,t-${name}Surround Playback Volume:1,c-Center:${name}Center Playback Volume,t-${name}Center Playback Volume:1,c-LFE:${name}LFE Playback Volume,t-${name}LFE Playback Volume:1" --patch_name "$name Multi Volume" -a simple.emu10k1 # Input connect "PIN($name Multi Volume)" '>' "$port" # Output connect "POUT($name Multi Volume)" '>' "PIN(Tone Control)" } fxbus () { local name=$1 local enable_pcm_fx89=$2 log 0 "fxbus \"$name\"" $enable_pcm_fx89 runlo10k1 --patch_name "$name" -a fxbus.emu10k1 connect "PIN($name)" '=' "FX(FX_PCM_Left,FX_PCM_Right,FX_PCM_Surr_Left,FX_PCM_Surr_Right,FX_MIDI_Left,FX_MIDI_Right,FX_Center,FX_LFE,8,9)" if [ $enable_pcm_fx89 ]; then local front="8,9" else local front="0,1" fi fx_pcm="POUT($name,0,1)" fx_front="POUT($name,$front)" fx_rear="POUT($name,2,3)" fx_midi="POUT($name,4,5)" fx_multi="POUT($name,$front,2,3,6,7)" } #dump_patches 16 # Clear runlo10k1 -s rename "FX(8)" "FX_PCM_Front_Left" rename "FX(9)" "FX_PCM_Front_Right" tone "Tone Control" fxbus "FX Bus" $FXIN_PCM_89 if [ "$DECODER" = "PROLOGIC" ]; then prologic "Wave" connect "POUT(Wave Multi Volume,0,1,2,3,4,5)" '>' "PIN(Tone Control,0,1,2,3,4,5)" add_output_func=add_output_prologic_2 elif [ "$DECODER" = "BOTH" ]; then prologic "Wave" simple_stereo_to_51 "Wave" switch_5x2 "Wave Prologic" "POUT(Wave Prologic,0,1,2,3,4)" "POUT(Wave Simple Stereo To 51,0,1,2,3,4)" 0 add_output_func=add_output_switched_2 else simple_stereo_to_51 "Wave" #"$fx_pcm" connect "POUT(Wave Simple Stereo To 51,0,1,2,3,4,5)" '>' "PIN(Tone Control,0,1,2,3,4,5)" add_output_func=add_output_simple_2 fi # # FXBUS # $std_playback "Wave" "$fx_pcm" $std_capture "Wave" "$fx_pcm" multi_playback "PCM" "$fx_multi" $std_capture "PCM Front" "$fx_front" $std_capture "PCM Surround" "$fx_rear" $std_playback "Music" "$fx_midi" $std_capture "Music" "$fx_midi" # # INPUTS # if [ "$EXTIN_AC97" = "1" ]; then $std_playback "AC97" "IN(IN_AC97_Left,IN_AC97_Right)" capture_noswitch "AC97" "IN(IN_AC97_Left,IN_AC97_Right)" fi if [ "$EXTIN_SPDIF_CD" = "1" ]; then $std_playback "IEC958 TTL" "IN(IN_TTL_IEC958_Left,IN_TTL_IEC958_Right)" $std_capture "IEC958 TTL" "IN(IN_TTL_IEC958_Left,IN_TTL_IEC958_Right)" fi if [ "$EXTIN_ZOOM" = "1" ]; then $std_playback "Zoom Video" "IN(IN_Zoom_Video_Left,IN_Zoom_Video_Right)" $std_capture "Zoom Video" "IN(IN_Zoom_Video_Left,IN_Zoom_Video_Right)" fi if [ "$EXTIN_TOSLINK" = "1" ]; then $std_playback "IEC958 LiveDrive" "IN(IN_Optical_IEC958_Left,IN_Optical_IEC958_Right)" $std_capture "IEC958 LiveDrive" "IN(IN_Optical_IEC958_Left,IN_Optical_IEC958_Right)" fi if [ "$EXTIN_LINE1" = "1" ]; then $std_playback "Line LiveDrive" "IN(IN_Line_Mic_1_Left,IN_Line_Mic_1_Right)" $std_capture "Line LiveDrive" "IN(IN_Line_Mic_1_Left,IN_Line_Mic_1_Right)" fi if [ "$EXTIN_COAX_SPDIF" = "1" ]; then $std_playback "IEC958 Coaxial" "IN(IN_Coax_IEC958_Left,IN_Coax_IEC958_Right)" $std_capture "IEC958 Coaxial" "IN(IN_Coax_IEC958_Left,IN_Coax_IEC958_Right)" fi if [ "$EXTIN_LINE2" = "1" ]; then $std_playback "Line2 LiveDrive" "IN(IN_Line_Mic_2_Left,IN_Line_Mic_2_Right)" $std_capture "Line2 LiveDrive" "IN(IN_Line_Mic_2_Left,IN_Line_Mic_2_Right)" fi master_name="Master Digital" master_volume="$master_name Playback Volume" master_switch="$master_name Playback Switch" master "$master_name" "POUT(Tone Control)" 0 if [ "$EXTOUT_ANALOG_FRONT" = "1" ]; then log 0 "out Analog Front" connect "POUT($master_switch,0,1)" '>' "OUT(OUT_AC97_Left,OUT_AC97_Right)" fi if [ "$EXTOUT_REAR" = "1" ]; then log 0 "out SB Live 5.1 (c) 2003 - Rear" connect "POUT($master_switch,2,3)" '>' "OUT(13,14)" elif [ "$EXTOUT_ANALOG_REAR" = "1" ]; then log 0 "out Analog Rear" connect "POUT($master_switch,2,3)" '>' "OUT(OUT_Analog_Surr_Left,OUT_Analog_Surr_Right)" fi if [ "$EXTOUT_CENTER" = "1" ]; then log 0 "out Center" connect "POUT($master_switch,4)" '>' "OUT(OUT_Center)" elif [ "$EXTOUT_ANALOG_CENTER" = "1" ]; then log 0 "out Analog Center" connect "POUT($master_switch,4)" '>' "OUT(OUT_AC97_Center)" fi if [ "$EXTOUT_LFE" = "1" ]; then log 0 "out LFE" connect "POUT($master_switch,5)" '>' "OUT(OUT_LFE)" elif [ "$EXTOUT_ANALOG_LFE" = "1" ]; then log 0 "out Analog LFE" connect "POUT($master_switch,5)" '>' "OUT(OUT_AC97_LFE)" fi # if [ $EXTOUT_MIC_CAP ]; then # log 0 "out MIC Capture buffer" # connect "" '>' "OUT(OUT_MIC_Capture)" # fi if [ "$EXTOUT_HEADPHONE" = "1" ]; then # Headphone log 0 "out Headphone" runlo10k1 -n --ctrl "c-switchL:Headphone Center Playback Switch,c-switchR:Headphone LFE Playback Switch,t-Headphone Center Playback Switch:4,t-Headphone LFE Playback Switch:4,i-Headphone Center Playback Switch:1,i-Headphone LFE Playback Switch:1" --patch_name "Headphone Playback Switch" -a switch_2x2.emu10k1 #Input connect "PIN(Headphone Playback Switch,0,1)" '>' "POUT(Tone Control,0,1)" connect "PIN(Headphone Playback Switch,2,3)" '>' "POUT(Tone Control,4,5)" volume "Headphone Playback" "POUT(Headphone Playback Switch,0,1)" 100#100 1 #Output connect "POUT(Headphone Playback Volume)" '>' "OUT(OUT_Headphone_Left,OUT_Headphone_Right)" fi if [ "$EXTOUT_IEC958" = "1" ]; then log 0 "out IEC958 Optical Raw" switch_2x2 "IEC958 Optical Raw Playback" "POUT(Tone Control,0,1)" "POUT(IEC958)" 1#1 connect "POUT(IEC958 Optical Raw Playback Switch,0,1)" '>' "OUT(OUT_Opt_IEC958_Left,OUT_Opt_IEC958_Right)" # connect "POUT(IEC958 Optical Raw Playback Switch,0,1)" '>' "OUT(OUT_AC97_Left,OUT_AC97_Right)" fi