surround sound mit alsa?

Ragas

Grand Admiral Special
Mitglied seit
24.05.2005
Beiträge
4.470
Renomée
85
  • QMC Race
  • RCN Russia
Da ich denke, dass das jemand anderem vielleicht helfen kann halte ich meine Konfiguration für die X-Fi hier mal aktuell.
Die Konfiguration ist für ein 5.1 Soundsystem angepasst, sollte mit kleineren Änderungen aber auch für andere Situationen verwendbar sein.
Bei Problemen kann ich gerne versuchen zu helfen.

/etc/asound.conf
Code:
# ----------------------
# Define Soundcard
# ----------------------

pcm.xfi {
        type hw
        card 0
        device 0
}

ctl.xfi {
        type hw
        card 0
        device 0
}

# -------------
# virtual oss devices
#
#       enables dmixed output of apllications using oss
# -------------

pcm.dsp0 {
    type plug
    slave.pcm "dmix"
}
ctl.mixer0 {
    type hw
    card 0
}



# --------------------
# Software Mixing
#
#       This is a copy of the alsa default, only needed change is "channels 6"
#       Other configurations gave me Problems I don't know why
# --------------------


pcm.!dmix {
	@args [ CARD DEV SUBDEV FORMAT RATE ]
	@args.CARD {
		type string
		default {
			@func refer
			name defaults.pcm.dmix.card
		}
	}
	@args.DEV {
		type integer
		default {
			@func refer
			name defaults.pcm.dmix.device
		}
	}
	@args.SUBDEV {
		type integer
		default 0
	}
	@args.FORMAT {
		type string
		default {
			@func refer
			name defaults.pcm.dmix.format
		}
	}
	@args.RATE {
		type integer
		default {
			@func refer
			name defaults.pcm.dmix.rate
		}
	}
	type dmix
	ipc_key {
		@func refer
		name defaults.pcm.ipc_key
	}
	ipc_gid {
		@func refer
		name defaults.pcm.ipc_gid
	}
	ipc_perm {
		@func refer
		name defaults.pcm.ipc_perm
	}
	slave {
		pcm {
			type hw
			card $CARD
			device $DEV
			subdevice $SUBDEV
		}
		format $FORMAT
		rate $RATE
		period_size {
			@func refer
			name {
				@func concat
				strings [
					"defaults.dmix."
					{
						@func card_driver
						card $CARD
					}
					".period_size"
				]
			}
			default 1024
		}		
		period_time {
			@func refer
			name {
				@func concat
				strings [
					"defaults.dmix."
					{
						@func card_driver
						card $CARD
					}
					".period_time"
				]
			}
			default -1
		}		
		periods {
			@func refer
			name {
				@func concat
				strings [
					"defaults.dmix."
					{
						@func card_driver
						card $CARD
					}
					".periods"
				]
			}
			default 16
		}

		## mein kleiner Einschub :-)
		channels 6

	}
	hint {
		show {
			@func refer
			name defaults.namehint.extended
		}
		description "Direct sample mixing device"
		device $DEV
	}
}


# ----------------
# Upmix
# ----------------

# ----------------
# Magic for stereo

pcm.upmix_20to51 {
   type plug
   slave.pcm "lowpass_21to21"
   slave.channels 3
   ttable {
      0.0     1       # left channel
      1.1     1       # right channel
      0.2     0.5     # mix left and right ...
      1.2     0.5     # ... channel for subwoofer
   }
}

# controls[ x ] specifies the crossover frequency x for the subwoofer.
# It needs to be changed 3 times, should not be lower than 50 but also
# not greater than 300:
pcm.lowpass_21to21 {
    type ladspa
    slave.pcm upmix_21to51
    path "/usr/lib/ladspa"
    channels 3
    plugins {
      0 {
         id 1098  # Identity (Audio) (1098/identity_audio)
         policy duplicate
         input.bindings.0 "Input";
         output.bindings.0 "Output";
      }

      1 {
         id 1052  # High-pass filter
         policy none
         input.bindings.0 "Input";
         output.bindings.0 "Output";
         input {
            controls [ 110 ]
         }
      }

      2 {
         id 1052  # High-pass filter
         policy none
         input.bindings.1 "Input";
         output.bindings.1 "Output";
         input {
            controls [ 110 ]
         }
      }

      3 {
         id 1051  # Low-pass filter
         policy none
         input.bindings.2 "Input";
         output.bindings.2 "Output";
         input {
            controls [ 110 ]
         }
      }

   }
}

pcm.upmix_21to51 {
   type plug
   #For use without software volume control this should be "surround51":
   slave.pcm "dmix"
   slave.channels 6
   ttable {
      0.0     1       # front left
      1.1     1       # front right
      0.2     1       # rear left
      1.3     1       # rear right

      # Front left/right to center.
      0.4     0.5
      1.4     0.5

      # Might be set to higher value for subwoofer, which makes it more powerful to compensate for bass-removal from other speakers.
      2.5     1
    }
}

# ----------------
# for 7.1

pcm.downmix_71to51 {
   type plug
   slave.pcm "lowpass_21to21"
   slave.channels 3
   ttable {
      0.0     1       # front left
      1.1     1       # front right
      4.4     1       # center
      5.5     1       # lfe

	  # mix side and back channels 
      2.2     0.5       # back left
      3.3     0.5       # back right
      6.2     0.5       # side left
      7.3     0.5       # side right
   }
}


# --------------------
# Joining input and output
# --------------------

# for stereo signals 
pcm.mix_upmix_20to51 {
    type asym
    playback.pcm	"upmix_20to51"
    capture.pcm		"dsnoop"
}


pcm.mix_downmix_71to51 {
    type asym
    playback.pcm	"downmix_71to51"
    capture.pcm		"dsnoop"
}
   
# --------------------
# owerwritten default devices
# --------------------

# default should only be used by Stereo signals if not it's an Application bug
pcm.!default {
	type            route
	slave.pcm       "mix_upmix_20to51"
	ttable.0.0 1
	ttable.1.1 1


	hint {
	    show on
	    description "Default Device"
	}
	
}

pcm.!surround71 {
	type            route
	slave.pcm       "mix_upmix_20to51"
	ttable.0.0 1
	ttable.1.1 1
	ttable.2.2 1
	ttable.3.3 1
	ttable.4.4 1
	ttable.5.5 1
	ttable.6.6 1
	ttable.7.7 1

	hint {
	    show on
	    description "7.1 Downmix"
	}

}

Damit bekommt man upmixing von stereo auf 5.1 und downmixing von 7.1 da dies die einzigen Quellen sind die man antreffen wird habe ich mir die restlichen, auch der Übersichtlichkeit halber gespart.

Derzeit habe ich noch 2 Probleme die ich nicht lösen konnte, VLC und Wine nicht Allerdings schätze ich, dass es sich hierbei um Fehler in den Applikationen handelt.
Wenn jemand Ideen dazu hat sind diese Willkommen.






Ursprünglicher Text:

Hallo,

Ich versuche gerade auf meinem Gentoo upmixing und vor allem bassumleitung für mein 5.1 System (mit xfi-soundkarte) einzurichten.
Leider habe ich keinen Schimmer wie ich alsa 5.1 beibringen soll.

Ich habe bereits verschiedene alsa config Dateien probiert (per copy and paste) aber keine hat funktioniert. Ich verstehe auch nicht wie diese Dateien funktionieren sollen.

Kann mir bitte irgendwer erläutern, wie ich alsa konfigurieren muss damit ich Musik aus allen Kanälen hören kann?


(Problem unten gelöst)
 
Zuletzt bearbeitet:
Was für config Dateien hast du denn angelegt (also welcher Inhalt) und wie versuchst du das zu nutzen?
 
Vielleicht den xfi Treibern irgendwelche Optionen mit auf den Weg geben?
Was hat denn gentoo für soundmixer/server?
 
Naja, gentoo macht ja von sich aus nichts alleine.

Sowas brauchst du heutzutage eigentlich nicht mehr.
Was meinste, soundmixer/server, Treiberoptionen oder alles?

...meinte ja auch nur zum testen...
 
Naja, gentoo macht ja von sich aus nichts alleine.


Was meinste, soundmixer/server, Treiberoptionen oder alles?

...meinte ja auch nur zum testen...
Soundserver etc.

Abgesehen davon obliegt es dir selbst, was du da installierst, Gentoo selbst macht da gar nichts.
 
naja ich hab eine asound.conf angelegt und verschiedene Sachen von Leuten kopiert.... aber das bringt mich wohl nicht so weiter.

z.b. gerade siehts so aus:
Code:
# http://alsa.opensrc.org/SurroundSound
# http://alsa.opensrc.org/index.php/Low-pass_filter_for_subwoofer_channel_(HOWTO)
# Arch Linux:  pacman -S ladspa blop swh-plugins libsamplerate tap-plugins cmt
# speaker-test -D upmix_20to51 -c 2 -t wav
# listplugins
# analyseplugin cmt
# http://plugin.org.uk/ladspa-swh/docs/ladspa-swh.html
pcm.lowpass_21to21 {
    type ladspa
    slave.pcm upmix_21to51
    path "/usr/lib/ladspa"
    channels 3
    plugins {
      0 {
         id 1098  # Identity (Audio) (1098/identity_audio)
         policy duplicate
         input.bindings.0 "Input";
         output.bindings.0 "Output";
      }

      1 {
         id 1052  # High-pass filter
         policy none
         input.bindings.0 "Input";
         output.bindings.0 "Output";
         input {
            controls [ 100 ]
         }
      }

      2 {
         id 1052  # High-pass filter
         policy none
         input.bindings.1 "Input";
         output.bindings.1 "Output";
         input {
            controls [ 100 ]
         }
      }

      3 {
         id 1051  # Low-pass filter
         policy none
         input.bindings.2 "Input";
         output.bindings.2 "Output";
         input {
            controls [ 100 ]
         }
      }

   }
}


pcm.upmix_20to51 {
   type plug
   slave.pcm "lowpass_21to21"
   slave.channels 3
   ttable {
      0.0     1       # left channel
      1.1     1       # right channel
      0.2     0.5     # mix left and right ...
      1.2     0.5     # ... channel for subwoofer
   }
}


pcm.upmix_21to51 {
   type plug
   slave.pcm surround51
   slave.channels 6
   ttable {
      0.0     1       # front left
      1.1     1       # front right
      0.2     1       # rear left
      1.3     1       # rear right

      # Front left/right to center.
      0.4     0.5
      1.4     0.5

      # Subwoofer, more powerful to compensate for bass-removal from other speakers.
      # Would normally be 1.
      2.5     2
    }
}

.. wobei mir grad auffällt, dass da oben ja noch instruktionen zu stehen .....
:]


Ich war auch schon kurz davor Pulseaudio zu installieren und zu konfigurieren, aber eigentlich hätt ichs schon lieber das direkt über alsa zu lösen.
.
EDIT :
.

Die xfi unterstützt übrigens ab der derzeitigen Version des Treibers endlich alle Audiokanäle.

Surround aus echten Surround-quellen läuft auch zur vollsten Zufriedenheit. Aber irgendwelche fancy features gibts nicht.
.
EDIT :
.

so ich hab die Plugins die benötigt werden mal installiert und bekomme jetzt folgende Ausgabe vom speaker test:

Code:
# speaker-test -D upmix_20to51 -c 2 -t wav

speaker-test 1.0.21

Wiedergabe-Gerät ist upmix_20to51
Stream-Parameter sind 48000 Hz, S16_LE, 2 Kanäle
WAV-Datei(en)
Rate ist 48000 Hz (angefordert: 48000 Hz)
Puffergröße von 43 bis 5461
Periodengröße von 3 bis 2730
Verwende maximale Puffergröße 5460
Perioden = 4
speaker-test: pcm_plug.c:388: snd_pcm_plug_change_channels: Zusicherung »snd_pcm_format_linear(slv->format)« nicht erfüllt.
 
Zuletzt bearbeitet:
Das sieht ziemlich verkompliziert aus.

Probiere es doch mal etwas einfacher aufzubauen und erstmal nur Upmixing zu machen.
Den Lowpass Filter kannst später noch bauen.
Also sowas in der Art:
Code:
pcm.upmix {
    type route
    slave.pcm surround51
    slave.channels 6
    ttable.0.0 1
    ttable.1.1 1
    ttable.0.2 1
    ttable.1.3 1
    ttable.0.4 0.5
    ttable.1.4 0.5
    ttable.0.5 0.5
    ttable.1.5 0.5
 
Das sieht ziemlich verkompliziert aus.

Probiere es doch mal etwas einfacher aufzubauen und erstmal nur Upmixing zu machen.
Den Lowpass Filter kannst später noch bauen.
Also sowas in der Art:
Code:
pcm.upmix {
    type route
    slave.pcm surround51
    slave.channels 6
    ttable.0.0 1
    ttable.1.1 1
    ttable.0.2 1
    ttable.1.3 1
    ttable.0.4 0.5
    ttable.1.4 0.5
    ttable.0.5 0.5
    ttable.1.5 0.5


Jup das funktioniert (habs grad ausprobiert). allerdings kommt das normale Signal auch noch über den Sub. (was ein leichtes Summen verursacht)

Kannst du mir auch erklären was dabei jetzt gerade alles passiert, bzw. was die einzelnen Zeilen bedeuten?
 
Jup das funktioniert (habs grad ausprobiert). allerdings kommt das normale Signal auch noch über den Sub. (was ein leichtes Summen verursacht)

Kannst du mir auch erklären was dabei jetzt gerade alles passiert, bzw. was die einzelnen Zeilen bedeuten?
Jein. Genau weiß ich es nicht.

Code:
type route
Ich denke mal das brauchst du eben um ttable aufrufen zu können.
Code:
slave.pcm surround51
Ich denke mal das sagt aus, wie das signal ausgegeben werden soll.
Code:
slave.channels 6
Vermutlich ein Parameter für surround51.
Code:
    ttable.0.0 1
    ttable.1.1 1
    ttable.0.2 1
    ttable.1.3 1
    ttable.0.4 0.5
    ttable.1.4 0.5
    ttable.0.5 0.5
    ttable.1.5 0.5
Diese Zeilen geben wohl an, welche Quelle wohin geroutet werden soll.
Die Syntax ist offensichtlich:
Code:
ttable quellen#.zielchannel wichtung
Angenommen Quelle 0 ist links und Quelle 1 ist rechts, dann geben die Boxen 0 (FL) und 2 (RL) eben diesen Kanal wieder. Die Boxen 1 (FR) und 3 (RR) geben Quelle 1, also Stereo "rechts" wieder.
Für den Center (Box 4) und den Subwoofer (Box 5) setzt sich das Signal je zur Hälfte aus beiden Kanälen zusammen.

Ist nur eine Vermutung meinerseits, aber ich denke so funktioniert das. ;)
Was du nun noch machen musst ist nen Low-Pass Filter für den Sub zu bauen.
Dazu les am besten mal auf dieser Page:
http://alsa.opensrc.org/index.php/Low-pass_filter_for_subwoofer_channel_(HOWTO)
und
http://alsa.opensrc.org/SurroundSound#Custom_Routing_of_Signals_to_Surround_Outputs
 
Habe keine XFI, daher kann ich dazu nichts spezifisches sagen. Vielleicht hilft Dir dennoch meine .asoundrc weiter. Sicher nicht perfekt, funktioniert bei mir allerdings ganz gut. Skype läuft bei mir beispielsweise nicht so gut, da die Ausgabe über die linke Frontbox raus geht. Weiß der Geier warum. Brauche das Programm so gut wie nie. Ansonsten wird mit dmix gemischt - die Audiophile kann nicht auf Hardwareebene mischen. Stereosignal wird auf alles 6 Kanäle verteilt und Ausgabe von AC3/DTS ist - vorausgesetzt SPDIF ist im genutzten Player, bei mir smplayer, aktiviert - direkt zum AV Receiver durchgereicht. Vorausgesetzt kein anderes Signal belegt den digitalen Ausgang - flashplugin grrrrrrrrrrr. Soweit ich informiert bin, geht es leider nicht eine stereo Quelle zu hören und gleichzeitig eine DVD mit AC3 Sound wiedergeben zu können. Downmix auf Stereo ja, ist klar, aber nicht an ein externes Gerät unangetastet durchzureichen.
Eine andere Möglichkeit ist es grundsätzlich alles auf 5.1 hochzurechnen. Dazu habe ich letztes jahr hauptsächlich für mich eine Vorgehensweise auf meiner Webseite verewigt. Ist allerdings etwas veraltet. Möglicherweise funktioniert es nicht mehr so wie beschrieben, oder es gibt einen eleganteren Weg.

Hier meine aktuelle .asoundrc. Hardware siehe Mein System. OS: Debian Sid + KDE4.3:

Code:
 pcm.!default {
   type plug
   slave.pcm audiophile_dmix
   ttable.0.0 1 # H/W 1
   ttable.1.1 1 # H/W 2
   ttable.0.8 1 # S/PDIF L
   ttable.1.9 1 # S/PDIF R
   hint {
   	show on
   	description "Phonon Softvol"
        }  
 }
 pcm.analog {
   type plug
   slave.pcm audiophile
   ttable.0.0 1 # H/W 1
   ttable.1.1 1 # H/W 2
 }
 pcm.analog_dmix {
   type plug
   slave.pcm audiophile_dmix
   ttable.0.0 1 # H/W 1
   ttable.1.1 1 # H/W 2
 }
 pcm.digital {
   type plug
   slave.pcm audiophile
   ttable.0.8 1 # S/PDIF L
   ttable.1.9 1 # S/PDIF R
 }
 pcm.digital_dmix {
   type plug
   slave.pcm audiophile_dmix
   ttable.0.8 1 # S/PDIF L
   ttable.1.9 1 # S/PDIF R
 }
 pcm.audiophile_dmix {
   type dmix
   ipc_key 1024
   slave {
     pcm "audiophile"
     period_time 0
     period_size 1024
     buffer_size 6553
     rate 44100
     format S32_LE
   }
 }
 pcm.audiophile {
   type hw
   card 0
   device 0
 }
 
Zuletzt bearbeitet:
Ich hab jetzt erstmal den Sub aus dem downmix rausgenommen. Ich habe es auch gleich dank Joshs config geschafft die Sache als default einzustellen. (ich denke mal dass nimmt er jetzt auch bei 5.1 quellen .. was nicht so erwünscht wäre)

so ists erstmal schon ganz nett.


also was mir noch fehlt ist:
der lowpass filter und die sicherheit, dass 5.1 quellen nicht gefiltert werden.
 
Vorausgesetzt kein anderes Signal belegt den digitalen Ausgang - flashplugin grrrrrrrrrrr. Soweit ich informiert bin, geht es leider nicht eine stereo Quelle zu hören und gleichzeitig eine DVD mit AC3 Sound wiedergeben zu können. Downmix auf Stereo ja, ist klar, aber nicht an ein externes Gerät unangetastet durchzureichen.
Ne das geht nicht, hat aber nichts mit alsa oder den Treibern zu tun, beim Passthrough wird generell immer nur das Passthrough Signal durchgegeben, ist bei Windows genauso. ;)

Hat meines Wissens einfach mit dem Spezifikationen des SPDIF zu tun.
 
hey. Ich hab mich mal weiter dran versucht ...

mit: speaker-test -D upmix_20to51 -c 2 -t wav funktioniert das ganze jetzt.

Aber wenn ich eine Audioanwendung starten will dann bekomme ich beim abspielen von Musik folgende Fehlermeldung:
Code:
pcm_params.c:170: snd1_pcm_hw_param_get_min: Zusicherung »!snd_interval_empty(i)« nicht erfüllt.

hat jemand eine Ahnung was das bedeutet und was ich verändern muss??

hier nochmal meine config:
Code:
 pcm.!default {
   type plug
   slave.pcm upmix_20to51
 }

pcm.dmixer {
    type dmix
    ipc_key 1024
    slave {
        pcm "hw:0,0"
        period_time 0
        period_size 1024
        buffer_size 4096
        rate 44100
        channels 6
    }
    bindings {
        0 0
        1 1
        2 2
        3 3
        4 4
        5 5
    }
}

pcm.upmix_20to51 {
    type plug
    slave.pcm lowpass_21to21
    slave.channels 3
    ttable {
        0.0     1       # left channel
        1.1     1       # right channel
        0.2     0.5     # mix left and right ...
        1.2     0.5     # ... channel for subwoofer
    }
}

pcm.lowpass_21to21 {
    type ladspa
    slave.pcm upmix_21to51
    path "/usr/lib/ladspa"
    channels 3
    plugins {
        0 {
            id 1098 # Identity (Audio) (1098/identity_audio)
            policy duplicate
            input.bindings.0 "Input";
            output.bindings.0 "Output";
        }
        1 {
            id 1672 # 4 Pole Low-Pass Filter with Resonance (FCRCIA) (1672/lp4pole_fcrcia_oa)
            policy none
            input.bindings.2 "Input";
            output.bindings.2 "Output";
            input {
                controls [ 120 2 ]
            }
        }
    }
}

pcm.upmix_21to51 {
    type plug
    slave.pcm dmixer
    slave.channels 6
    ttable {
        0.0     1       # front left
        1.1     1       # front right
        0.2     1       # rear left
        1.3     1       # rear right
        0.4     0.5     # center
        1.4     0.5     # center
        2.5     1       # subwoofer
    }
}



#
# pcm.upmix {
#    type route
#    slave.pcm surround51
#    slave.channels 6
#    ttable.0.0 1
#    ttable.1.1 1
#    ttable.0.2 1
#    ttable.1.3 1
#    ttable.0.4 0.5
#    ttable.1.4 0.5
# }
 
Hi Ragas

haste es hingekriegt? Falls ja ich hab auch ne X-Fi unter Gentoo mit Kernel 2.6.31 am laufen.
Allerdings kriege ich keinen 5.1 Upmix hin.
Würde halt gern mit Audacious mp3s im 5.1 Modus hören.
 
Da ich gerade umgezogen bin und dort kein internet habe habe ich das problem noch nicht gelöst.
Aber ich habe vor als nächstes einfach mal PulseAudio zu versuchen.
Dieses ganze rumgefrickel mit alsa hat schon etwas genervt.
Normaler upmix ist übrigens kein Problem. nur der Subwoofer will nicht.
 
Ich glaube das muss ich Dir, Ragas, nicht sagen, dass Du trotzdem Alsa brauchst. Pulse ist ja nur eine abstraktionsschicht für Audio und greift letztendlich auf Alsa zu. Verwendest Du Gnome, oder KDE? ... Unter KDE würde ich pulse nicht installieren. Gibt ja Phonon. Da fällt mir gerade ein. Es gibt noch Xine-Phonon. Wenn dazu noch Pulse kommt ... Das wird jedenfalls pervers.
 
Ich glaube das muss ich Dir, Ragas, nicht sagen, dass Du trotzdem Alsa brauchst. Pulse ist ja nur eine abstraktionsschicht für Audio und greift letztendlich auf Alsa zu. Verwendest Du Gnome, oder KDE? ... Unter KDE würde ich pulse nicht installieren. Gibt ja Phonon. Da fällt mir gerade ein. Es gibt noch Xine-Phonon. Wenn dazu noch Pulse kommt ... Das wird jedenfalls pervers.

Natürlich ist mir das klar. ;)
Die aussage war logischerweise auf Sourround-sound bezogen und nicht auf audio an sich. Dass pulseautio da ganze dann auch nur an Alsa weitergibt ist klar.

Normalerweise Verwende ich gnome, daher ist Pulse schon korrekt.

Allerdings wenn mir wirklich jemand eine funktionierende Lösung für einen Subwoofer Lowpass zeigt, dann nehme ich die Tausend mal lieber als Pulse-audio zu installieren.
 
Also ich hab die sache jetzt mit Pulseaudio ans laufen gebracht.
Allerdings Kann Pulseaudio auch nicht viel mehr als Alsa. Das einstellen geht einfacher, lowpass geht auch hier nicht nicht implementiert.

Ich werds jetzt erstmal drauflassen und gucken ob mir das pro programm lautstärkeregeln gefällt.

Ansonsten gibt es eigentlich keinen direkten vorteil von pulseaudio für mich.
nen Lowpass hab ich jetzt über nen drehknopf am Soundsystem ....
 
Habs mit KDE4.3, Kernel 2.6.31 und Phonon (ersetzt wohl Arts) ganz einfach hin gekriegt.
Einfach unter Systemeinstellungen -> Multimedia Creative X-FI 20k1... (surround) überall nach oben ziehen und fertig. 8)
Damit hab ich zumindest unter Amarok und Kmplayer DTS5.1 (mehr hab ich noch nicht probiert).
 
Hey. Wenn es noch jemanden interessiert, ich hab letztens nochmal damit Rumgespielt.
Jetzt funktioniert das ganze endlich.

Hauptproblem war Hardwaremixing (bzw. das nicht Vorhandensein des selbigen).

Hier meine nun endlich funktionierende asound.conf:

Code:
# ----------------------
# Define Soundcard
# ----------------------

pcm.xfi {
        type hw
        card 0
        device 0
}

ctl.xfi {
        type hw
        card 0
        device 0
}



# --------------------
# Software Mixing
# --------------------

# Das dmix-Plugin wird definiert.
pcm.dmixer {
    type dmix
    ipc_key 1024
    ipc_perm 0666       # Andere Benutzer können ebenfalls dmix gleichzeitig nutzen
    slave.pcm "xfi"
    slave {
        ### buffer_size kann bei Problemen der jeweiligen Karte angepasst werden.
        period_time 0
        period_size 1024
        buffer_size 4096
        ### bei Störungen kann die Konvertierung auf die Rate 44100 eingeschaltet werden.
        # rate 44100
        ### einige Soundkarten benötigen das exakte Datenformat (zB ice1712)
        # format S32_LE
        ### Verfügbare Formate: S8 U8 S16_LE S16_BE U16_LE U16_BE S24_LE S24_BE U24_LE U24_BE
        ###               S32_LE S32_BE U32_LE U32_BE FLOAT_LE FLOAT_BE FLOAT64_LE FLOAT64_BE
        ###               IEC958_SUBFRAME_LE IEC958_SUBFRAME_BE MU_LAW A_LAW IMA_ADPCM MPEG GSM
        ### Anzahl channels muss mit den bindings übereinstimmen
        channels 6 
    }
    bindings {
        0 0
        1 1
	2 2
	3 3
	4 4
	5 5
    }
}

# Das dsnoop-Plugin, welches es erlaubt, mehrere Programme gleichzeitig aufnehmen zu lassen.
pcm.dsnooper {
    type dsnoop
    ipc_key 2048
    ipc_perm 0666 
    slave.pcm "xfi"
    slave 
    {
        period_time 0
        period_size 1024
        buffer_size 4096
        # bei Störungen kann die Konvertierung auf die Rate 44100 eingeschaltet werden.
        # rate 44100
        # einige Soundkarten benötigen das exakte Datenformat (zB ice1712)
        # format S32_LE
        ### Anzahl channels muss mit den bindings übereinstimmen
        channels 6 
    }
    bindings {
        0 0
        1 1
	2 2
	3 3
	4 4
	5 5
    }
}

pcm.softmix {
    type asym
    playback.pcm "dmixer"
    capture.pcm "dsnooper"
}



# ----------------
# Upmix
# ----------------


pcm.upmix_21to51 {
   type plug
   #For use without software volume control this should be "surround51":
   slave.pcm "softmix"
   slave.channels 6
   ttable {
      0.0     1       # front left
      1.1     1       # front right
      0.2     1       # rear left
      1.3     1       # rear right

      # Front left/right to center.
      0.4     0.5
      1.4     0.5

      # Set to 2 for subwoofer, more powerful to compensate for bass-removal from other speakers.
      # Would normally be 1.
      2.5     1
    }
}


# controls[ x ] specifies the crossover frequency x for the subwoofer.
# It needs to be changed 3 times, should not be lower than 50 but also
# not greater than 300:
pcm.lowpass_21to21 {
    type ladspa
    slave.pcm upmix_21to51
    path "/usr/lib/ladspa"
    channels 3
    plugins {
      0 {
         id 1098  # Identity (Audio) (1098/identity_audio)
         policy duplicate
         input.bindings.0 "Input";
         output.bindings.0 "Output";
      }

      1 {
         id 1052  # High-pass filter
         policy none
         input.bindings.0 "Input";
         output.bindings.0 "Output";
         input {
            controls [ 120 ]
         }
      }

      2 {
         id 1052  # High-pass filter
         policy none
         input.bindings.1 "Input";
         output.bindings.1 "Output";
         input {
            controls [ 120 ]
         }
      }

      3 {
         id 1051  # Low-pass filter
         policy none
         input.bindings.2 "Input";
         output.bindings.2 "Output";
         input {
            controls [ 120 ]
         }
      }

   }
}


pcm.upmix_20to51 {
   type plug
   slave.pcm "lowpass_21to21"
   slave.channels 3
   ttable {
      0.0     1       # left channel
      1.1     1       # right channel
      0.2     0.5     # mix left and right ...
      1.2     0.5     # ... channel for subwoofer
   }
}




# --------------------
# owerwritten default devices
# --------------------

pcm.!surround51 {
	type			plug
	slave.pcm		"softmix"
}

pcm.!default {
	type			asym
	playback.pcm		"upmix_20to51"
}


Wer eine Soundkarte hat, die Hardwaremixing unterstützt der kann den Part "Software Mixing" weglassen. (aufpassen, den Rest dann entsprechend anzupassen, softmix durch surround51 ersetzen)

Durch den schlechten Treibersupport für die X-FI kann diese kein Hardwaremixing, worauf ich erstmal kommen musste danach hab ich mir noch die nötigen Sachen aus Beispielkonfigurationen zusammengesucht.

am meisten geholfen haben mir:
http://wiki.ubuntuusers.de/.asoundrc#Mixing
und
http://forums.gentoo.org/viewtopic-p-4528619.html#4528619


Ich werd das ganze jetzt nen bisschen testen.
mir ist bereits aufgefallen, dass Phonon beim Amarok meine Einstellungen nicht übernehmen will.


EDIT:

Ich hab grad noch das Problem mit Phonon gelöst.

Code:
pcm.!default {
        type                    asym
        playback.pcm            "upmix_20to51"

        hint {
            show on
            description "upmix_20to51"
        }

}

mit hint zeigt mir Phonon "upmix_20to51" als Gerät an, nur noch auswählen und es funktioniert.
 
Zuletzt bearbeitet:
Hi Ragas,

den Hint habe ich nicht vergessen. Ich weiß nicht woran das liegt, dass Phonon das Gerät nicht anzeigt. Gut, könnte daran liegen, dass ich eine Audiophile 2496 verwende. Wobei das glaube ich nicht. Es ist ja nichts XFI spezifisches in der Config, dass nur eine bestimmte Karte anspricht, sondern alles allgemein gehalten.

aplay -l sagt:
card 0: M2496 [M Audio Audiophile 24/96], device 0: ICE1712 multi [ICE1712 multi]
Subdevices: 1/1
Subdevice #0: subdevice #0

cat /proc/asound/cards sagt:
0 [M2496 ]: ICE1712 - M Audio Audiophile 24/96
M Audio Audiophile 24/96 at 0xbf00, irq 20

lspci | grep -i audio sagt:
04:05.0 Multimedia audio controller: VIA Technologies Inc. ICE1712 [Envy24] PCI Multi-Channel I/O Controller (rev 02)

Deine abgeänderte .asoundrc sieht bei mir so aus:

Code:
# Define Soundcard
pcm.audiophile {
        type hw
        card 0
        device 0
}
ctl.audiophile {
        type hw
        card 0
        device 0
}
# Software Mixing
pcm.dmixer {
    type dmix
    ipc_key 1024
    ipc_perm 0666
    slave.pcm "audiophile"
    slave {
        period_time 0
        period_size 1024
        buffer_size 4096
        rate 44100
        format S32_LE
        channels 6 
    }
    bindings {
        0 0
        1 1
	2 2
	3 3
	4 4
	5 5
    }
}
pcm.dsnooper {
    type dsnoop
    ipc_key 2048
    ipc_perm 0666 
    slave.pcm "audiophile"
    slave 
    {
        period_time 0
        period_size 1024
        buffer_size 4096
        rate 44100
        format S32_LE
        channels 6 
    }
    bindings {
        0 0
        1 1
	2 2
	3 3
	4 4
	5 5
    }
}
pcm.softmix {
    type asym
    playback.pcm "dmixer"
    capture.pcm "dsnooper"
}
# Upmix
pcm.upmix_21to51 {
   type plug
   slave.pcm "softmix"
   slave.channels 6
   ttable {
      0.0     1       # front left
      1.1     1       # front right
      0.2     1       # rear left
      1.3     1       # rear right
      # Front left/right to center.
      0.4     0.5
      1.4     0.5
      2.5     1
    }
}
pcm.lowpass_21to21 {
    type ladspa
    slave.pcm upmix_21to51
    path "/usr/lib/ladspa"
    channels 3
    plugins {
      0 {
         id 1098  # Identity (Audio) (1098/identity_audio)
         policy duplicate
         input.bindings.0 "Input";
         output.bindings.0 "Output";
      }
      1 {
         id 1052  # High-pass filter
         policy none
         input.bindings.0 "Input";
         output.bindings.0 "Output";
         input {
            controls [ 120 ]
         }
      }
      2 {
         id 1052  # High-pass filter
         policy none
         input.bindings.1 "Input";
         output.bindings.1 "Output";
         input {
            controls [ 120 ]
         }
      }
      3 {
         id 1051  # Low-pass filter
         policy none
         input.bindings.2 "Input";
         output.bindings.2 "Output";
         input {
            controls [ 120 ]
         }
      }
   }
}
pcm.upmix_20to51 {
   type plug
   slave.pcm "lowpass_21to21"
   slave.channels 3
   ttable {
      0.0     1       # left channel
      1.1     1       # right channel
      0.2     0.5     # mix left and right ...
      1.2     0.5     # ... channel for subwoofer
   }
}
# owerwritten default devices
pcm.!surround51 {
	type			plug
	slave.pcm		"softmix"
}
pcm.!default {
        type                    asym
        playback.pcm            "upmix_20to51"
   hint {
   	show on
   	description "upmix_20to51"
        }
}

Meine jetzige .asoundrc sieht so aus:

Code:
 pcm.!default {
   type plug
   slave.pcm audiophile_dmix
   ttable.0.0 1 # H/W 1
   ttable.1.1 1 # H/W 2
   ttable.0.8 1 # S/PDIF L
   ttable.1.9 1 # S/PDIF R
   hint {
   	show on
   	description "Phonon Softvol"
        }  
 }
 pcm.analog {
   type plug
   slave.pcm audiophile
   ttable.0.0 1 # H/W 1
   ttable.1.1 1 # H/W 2
 }
 pcm.analog_dmix {
   type plug
   slave.pcm audiophile_dmix
   ttable.0.0 1 # H/W 1
   ttable.1.1 1 # H/W 2
 }
 pcm.digital {
   type plug
   slave.pcm audiophile
   ttable.0.8 1 # S/PDIF L
   ttable.1.9 1 # S/PDIF R
 }
 pcm.digital_dmix {
   type plug
   slave.pcm audiophile_dmix
   ttable.0.8 1 # S/PDIF L
   ttable.1.9 1 # S/PDIF R
 }
 pcm.audiophile_dmix {
   type dmix
   ipc_key 1024
   slave {
     pcm "audiophile"
     period_time 0
     period_size 1024
     buffer_size 6553
     rate 44100
     format S32_LE
   }
 }
 pcm.audiophile {
   type hw
   card 0
   device 0
 }

Letztere funktioniert, aber der Upmix und die Filter sehen halt vielversprechend aus. Bin verzweifelt.

Habe vieles ausprobiert, nichts führt zum Erfolg mit Deiner Config. :( *schnief*

Grüße,

Lukas
 
Nur nochmal um das klarzustellen, wenn du Sounds direkt über Alsa spielst, funktioniert das oder nicht?

Ich könnte mir vorstellen, dass die Bindings beim Software-Mixing bei deiner soundkarte anders sein müssten.

gibt dir aplay irgendwelche fehlermeldungen wenn du versuchst etwas abzuspielen?

Ich hab grad kurz gesucht und deine karte hat glaube ich kein hardware-mixing... also würde es dir wohl nichts bringen den software-mixing part wegzulassen....
 
Korrekt. Die Audiophile hat kein Hardwaremixing. Deswegen mische ich auch mit dmix. Die Karte funktioniert einwandfrei. Alles in bester Ordnung. Das einzige was ich gerne hätte ist Dein Soft-upmix und den lowpass. *neidischaufdeindingsdasei*

Werde da noch weiter mit Deinem Dingsda herumspielen. Mal schauen, ob es fruchtet.
 
Ich hab mich Grad nochmal mit der Sache beschäftigt und hab ein paar Fehler bezüglich der Handhabung von Mikrophonen beseitigt.
Leider habe ich das noch nicht ganz korrekt hingekrigt ... weil der mic support der X-fi etwas interessant ist, aber allgemein ist das jetzt so korrekt aufgebaut. (was es vorher nicht war)

Code:
# ----------------------
# Define Soundcard
# ----------------------

pcm.xfi {
        type hw
        card 0
        device 0
}

ctl.xfi {
        type hw
        card 0
        device 0
}



# --------------------
# Software Mixing
# --------------------

# Das dmix-Plugin wird definiert.
pcm.dmixer {
    type dmix
    ipc_key 1024
    ipc_perm 0666       # Andere Benutzer können ebenfalls dmix gleichzeitig nutzen
    slave.pcm "xfi"
    slave {
        ### buffer_size kann bei Problemen der jeweiligen Karte angepasst werden.
        period_time 0
        period_size 1024
        buffer_size 4096
        ### bei Störungen kann die Konvertierung auf die Rate 44100 eingeschaltet werden.
        # rate 44100
        ### einige Soundkarten benötigen das exakte Datenformat (zB ice1712)
        # format S32_LE
        ### Verfügbare Formate: S8 U8 S16_LE S16_BE U16_LE U16_BE S24_LE S24_BE U24_LE U24_BE
        ###               S32_LE S32_BE U32_LE U32_BE FLOAT_LE FLOAT_BE FLOAT64_LE FLOAT64_BE
        ###               IEC958_SUBFRAME_LE IEC958_SUBFRAME_BE MU_LAW A_LAW IMA_ADPCM MPEG GSM
        ### Anzahl channels muss mit den bindings übereinstimmen
        channels 6 
    }
    bindings {
        0 0
        1 1
    2 2
    3 3
    4 4
    5 5
    }
}

# Das dsnoop-Plugin, welches es erlaubt, mehrere Programme gleichzeitig aufnehmen zu lassen.
pcm.dsnooper {
    type dsnoop
    ipc_key 2048
    ipc_perm 0666 
    slave.pcm "xfi"
    slave 
    {
        period_time 0
        period_size 1024
        buffer_size 4096

        #Xfi spezifische Sachen andere Karten werden sie nicht benötigen und sie sind auch noch nicht optimal
        rate 8000
        format S16_LE
        channels 2 
    # bei Störungen kann die Konvertierung
    # auf die Rate 44100 eingeschaltet werden.
        # rate 44100
    #
        # einige Soundkarten benötigen
    # das exakte Datenformat (zB ice1712)
        # format S32_LE
    #
        # Anzahl channels muss mit den bindings übereinstimmen
    }
    bindings {
        0 0
    1 1
    }
}

pcm.softmix {
    type asym
    playback.pcm "dmixer"
    capture.pcm "dsnooper"
}



# ----------------
# Upmix
# ----------------


pcm.upmix_21to51 {
   type plug
   #For use without software volume control this should be "surround51":
   slave.pcm "dmixer"
   slave.channels 6
   ttable {
      0.0     1       # front left
      1.1     1       # front right
      0.2     1       # rear left
      1.3     1       # rear right

      # Front left/right to center.
      0.4     0.5
      1.4     0.5

      # Set to 2 for subwoofer, more powerful to compensate for bass-removal from other speakers.
      # Would normally be 1.
      2.5     1
    }
}


# controls[ x ] specifies the crossover frequency x for the subwoofer.
# It needs to be changed 3 times, should not be lower than 50 but also
# not greater than 300:
pcm.lowpass_21to21 {
    type ladspa
    slave.pcm upmix_21to51
    path "/usr/lib/ladspa"
    channels 3
    plugins {
      0 {
         id 1098  # Identity (Audio) (1098/identity_audio)
         policy duplicate
         input.bindings.0 "Input";
         output.bindings.0 "Output";
      }

      1 {
         id 1052  # High-pass filter
         policy none
         input.bindings.0 "Input";
         output.bindings.0 "Output";
         input {
            controls [ 110 ]
         }
      }

      2 {
         id 1052  # High-pass filter
         policy none
         input.bindings.1 "Input";
         output.bindings.1 "Output";
         input {
            controls [ 110 ]
         }
      }

      3 {
         id 1051  # Low-pass filter
         policy none
         input.bindings.2 "Input";
         output.bindings.2 "Output";
         input {
            controls [ 110 ]
         }
      }

   }
}


pcm.upmix_20to51 {
   type plug
   slave.pcm "lowpass_21to21"
   slave.channels 3
   ttable {
      0.0     1       # left channel
      1.1     1       # right channel
      0.2     0.5     # mix left and right ...
      1.2     0.5     # ... channel for subwoofer
   }
}




# --------------------
# owerwritten default devices
# --------------------

pcm.!surround51 {
    type            plug
    slave.pcm        "softmix"
}

pcm.!default {
    type            asym
    playback.pcm        "upmix_20to51"
    capture.pcm        "dsnooper"

    hint {
        show on
        description "upmix_20to51"
    }
    
}
 
Zurück
Oben Unten