[PATCH] - Surround-Support für snd_hda

Yamagi

Possessed With Psi Powers
Teammitglied
Hallo :)
Alexander Motin hat in 9-CURRENT den weitverbreiteten Audiotreiber snd_hda(4) inzwischen mit Unterstützung für 4.0, 5.0, 5.1 und 7.1 Wiedergabe ausgestattet. Dies wurde möglich, nachdem OSS mit FreeBSD 8.0 die Unterstützung für Surround bekam und dies ist nun der erste Treiber, der es nutzt. Ich habe diesen zurückportiert, sodass auch Nutzer von 8.0-RELEASE in den Genuss von Raumklang kommen. Den Patch findet ihr hier, nach dem Einspielen müsst ihr den Kernel neubauen: http://deponie.yamagi.org/freebsd/hda/snd_hda-surround_8.0.patch

Anschließend könnt ihr Surround mittels "sysctl dev.pcm.X.play.vchanformat=s16le:5.1" einschalten. X ist dabei die Nummer der Soundkarte, meist also 0. "5.1" ist die Zuteilung der Kanäle. Die möglichen Werte stehen in "man sound". Testen ob es funktioniert kann man zum Beispiel mit einer DVD.

Noch zwei Anmerkungen:
- mplayer nutzt von sich aus nur 2 Kanäle, mehr müssen explizit eingeschaltet werden. Zum Beispiel mittels "-channels 6" für 5.1 Wiedergabe.

- Die Beschreibung der Ausgänge an der Soundkarte können von der Beschriftung abweichen! Bei mir sind so zum Beispiel S/PDIF und Rear vertauscht. Da muss man einfach ausprobieren, bis man die richtigen gefunden hat.

Ach ja... Wie immer ohne jede Form von Support. Wenn es schief geht, eurer Rechner abbrennt oder ihr Daten verliert, seid ihr selbst schuld.
 
Saubere Arbeit! :)

Hast du das schon als PR eingeschickt?

- Die Beschreibung der Ausgänge an der Soundkarte können von der Beschriftung abweichen! Bei mir sind so zum Beispiel S/PDIF und Rear vertauscht. Da muss man einfach ausprobieren, bis man die richtigen gefunden hat.

Ach ja... Wie immer ohne jede Form von Support. Wenn es schief geht, eurer Rechner abbrennt oder ihr Daten verliert, seid ihr selbst schuld.


Das kannst du aber glaube ich mit device.hints wieder geradebiegen.
 
Nein, kein Patch. Ist auch nicht nötig, das ist einfach nur der Krams aus -CURRENT zurückportiert. Dafür muss man den Code nicht mal ändern. Und da Alexander im Commit bereits einen Zeitpunkt für den MFC angibt, wird das wohl so durchgehen :)

Ja, ich weiß. Ich habe unter anderem auch meinen Kopfhörerausgang geradebiegen müssen, da Asus zu blöd war, die Ausgänge gleich korrekt zu codieren. Aber lohnt sich nicht, ob das Kabel nun im roten oder hellgrünen Ausgang steckt, ist mit ziemlich egal... Hauptsache es geht und das tut es ja. :)
 
Na gut, wenn die Kabel einmal richtig stecken, dann gehts ja. Aber merks dir für den nächsten Umzug ;)

Das mit dem MFC klingt gut. :)
 
Wow, das ist ja cool. Zu blöde, dass ich bloß einen analogen Stereo-Ausgang habe.

Wenn du drei analoge Ausgänge hast, ist das nicht so das Problem ;) Und gerade das bieten einige Soundkarten an.

Ich denke das ist hiermit auch nicht gemeint, denn das digitale Signal durchschleifen (passthrough) geht schon länger, glaube ich.
 
Genau, Passthrough ging abhängig vom Treiber seit mindestens 6.3, seit FreeBSD 8.0 sogar global unabhängig vom Treiber. In der Theorie zumindest. Bei den analogen Anschlüssen ist der große Vorteil des HDA, dass man sie frei programmieren kann. Man kann also auch aus Eingängen Ausgänge machen, aus elektischen S/PDIF mit Klinkenbuche analoge Ausgänge, aus analogen digitale, etc. Wenn du drei Buchsen hast, kannst du sie entsprechend umprogrammieren und Surround nutzen. Sogar zwei Buchen reichen für 4.0 Ausgabe, was immer noch besser als Nichts ist. :)

An sich ist der HDA-Krams schon verdammt gut und von den Möglichkeiten her die mit Abstand beste Audiotechnik für Endverbraucher. Es wäre nur schön, wenn es nun noch HDA-Karten mit etwas höherwertigen Chips gebe. Zumindest der ALC888 hier ist wirklich unterirdisch, da kann man am EQ rumdrehen wie man will, die Bässe werden übertönt und die Höhen saufen stark ab. Das macht die Envy, die zugegeben teurer als das ganze Mainboard war, deutlich besser. Ich wurde von Besuch hier schön öfter gefragt, was für eine gut klingende Karte es denn wäre.
 
Ich höre da eigentlich nie so wirklich Unterschiede bei den Soundkarten... Dennoch habe ich auch eine ordentliche verbaut ;)

Diese Geschichte unter FreeBSD ist evtl. auch für Lautsprecherentwickler und vollaktive Systeme durchaus interessant, da man die Kanäle ja recht frei ansprechen kann. Man müsste nur noch Audio über eine virtuelle Frequenzweiche verzögerungsfrei ausgeben können...
 
Eine galvanische Trennung oder ein Netzteil dass keine Störungen verursacht (habe ich im Moment) ist verbaut habe ich den besten Sound mit meinem Terratec Soundsystem DMX (eine alte 4.1 Karte mit maestro Chip, optische und digitale Ein- und Ausgänge sind auch dran).

Die HDA-Qualität ist auch nicht übel (Notebook) aber hier ist im Netzbetrieb die galvanische Trennung Pflicht - das Netzteil verursacht geradezu brutale Störungen, die man schon bei niedrigen Lautstärken wahrnimmt.

Kann ich tatsächlich meinen analogen Ausgang zu einem Digitalausgang umfunktionieren? Das kommt mir doch recht unwahrscheinlich vor. Aber meinen Line-In in einen weiteren Ausgang umzumünzen wäre auch nicht übel.
 
Ich liebe symmetrische Audio I/Os.. XLR oder mittels "Stereo"-klinke. Leider ist's ja eher dem professionellen Bereich zu zuordnen. Diese Cinchstrippen sind echt das Letzte...:(
 
Zuletzt bearbeitet:
Wem sagst du das... Die Envy hier hat RCA-Stecker als analogen Stereoausgang, die kann man dann ohne nervenden Adapter mit dem Rest verbinden. Aber zum Thema. Ich habe eben noch einmal ausprobiert. Ich kann hier bei meinem ALC888 wirklich alle 6 hinteren und die beiden vorderen Ausgänge auf elektrischen S/PDIF, auf analoge Ein- oder Ausgabe und auf Kopfhörerausgänge (alle anderen Ausgänge werden deaktiviert, wenn man etwas einsteckt) mappen. Es gibt auch noch einen Gerätetyp "Speaker", aber den habe ich nun nicht probiert, da ich meinen Mainboard-Piepser nicht auf dem großen Lautsprechersystem haben möchte...
 
Ne externe Soundkarte ist ein bisschen angenehmer, wenn's um Störungen geht :)

Analoge oder digitale Übertragung hat rein gar nichts mit der Klangqualität zu tun. In diesem Fall findet die DA-Wandlung halt schon in der Soundkarte statt und muss nicht mehr durch einen AV-Receiver oder ähnliches gemacht werden.
 
Je weiter die Wandlung von der Endstufe entfernt ist, desto länger ist die Strecke auf der Störungen akkumuliert werden. In sofern hat die digitale Übertragung durchaus Vorteile. Mal abgesehen davon, dass ein Kabel für alle Kanäle reicht, was einfach praktisch ist.
 
Klar, von Vorteil ist die digitale Übertragung immer. Aber wenn die Kabelwege nicht zu lang sind, bleibt das alles eher theoritischer Natur. Darf man nicht vergessen dabei :) Wichtiger sind die Lautsprecher sowie Akustik.

So, zurück zum Thema, würde ich sagen!
 
Nun im PC-Bereich sehe ich bei der Audio-Qualität als Hauptstörquelle für Audiosignale Netzteilstörungen auf der Masse. Die Konsequenteste Lösung des Problems ist da digitale Übertragung über ein optisches Medium, da die Systeme damit elektrisch vollständig unabhängig werden.
 
Bei ner internen Soundkarte sehe ich das durchaus ähnlich! Man nehme einfach einen niederohmigen Kopfhörer und schließe ihn an eine Soundkarte an: Rauschen, Fiepen, Störgeräusche bei Mausbewegungen sowie wenn Objekte auf dem Desktop bewegt werden. Das war übrigens der Fall bei einer Audiotrak Prodigy HD2 ;)

Also könnte ich mit diesem Patch bei meiner Onboard-Soundkarte ein digitales Signal ausgeben? Das wäre durchaus interessant, da ich so mit einem Koaxkabel den analogen Teil übergehen könnte...
 
Erinnert ihr euch an alte ISA-Karten wie die legendäre AWE32? Die musste man so weit es irgendwie ging von der Grafikkarte wegstecken, da es es sonst unerträglich knarzte und andere schöne Geräusche machte. Das waren noch Zeiten... :)

Ja, wenn deine Karte einen S/PDIF hat, was die meisten HDA-Dingens haben, kannst du etweder per Passthrough was auch immer du möchtest an einen externen Decoder durchlinken oder aber ein digitales Signal der normalen Ausgabe erzeugen lassen. Wie das genau geht, ist in "man sound" mehr oder minder brauchbar dokumentiert.
 
Werden denn mittlerweile Envy 24 (bspw. Terratec Phase 22) unterstützt.. hab noch welche rumfliegen :)
 
@zuglufttier
Das weiß ich nicht. Das geht irgendwie über die /dev/dsp*, aber frage mich nicht wie. Ich habe hier zum Testen meiner Aufstellung einfach eine AC3-Datei abgespielt.

@Elwood
Kommt drauf an. Surround geht im Moment nur mit dem HDA und ich bin wenig zuversichtlich, dass es sich schnell ändern wird. Andere Karten sind leider kaum mehr verbreitet und Ariff arbeitet lieber am Soundsystem selbst, als an den Treibern. Bei den Envy und Envy24 kommt noch hinzu, dass es kein Referenzlayout gibt. Jede Karte ist anders verdrahtet, was Anpassungen am Treiber verlangt. Das Einfügen von Surround ist an sich nicht schwer, aber wenn es für deine Karte dein Datenblatt gibt oder sie baugleich mit einer ist, wo eines verfügbar ist, wird es sehr eklig. Dann muss man da an der Hardware selbst die Pins durchmessen, etc. Das hat man übrigens in langen Winternächten gemacht, um den vorhandenen freien Treiber für die meisten Karten schreiben zu können. Aber halt nur für 2 Kanäle. Echte Doku gab es meines Wissens nur von Audiotrak.
Passthrough geht aber, sofern der Treiber den S/PDIF absprechen kann. Egal, ob er elektrisch oder optisch ist. Passthrough ist mit 8.0 hoch in den Kern des Soundsystem gewandert und braucht daher keine Treiberunterstützung mehr.
 
Sehr gut das ich dann wieder zum snd_hda wechseln kann.
Brauch dann nur noch hoffen das der ALC885 keine zicken macht.

Danke Yamagi
 
Kann mir jemand sagen wie ich vorgehen muss, damit ich ein Signal auf mehrere Ausgänge gleichzeitig ausgeben kann? Also mein Programm gibt auf /dev/dsp (Standardeinstellung halt...) aus und ich möchte halt auf dsp0, dsp1 und dsp2 dasselbe haben und diese dsp0-2 auch auf bestimmte Ausgänge legen können.

Hintergrund wäre die Verwendung des parametrischen Equalizers, um für dsp0-2 jeweils die Frequenzen so zu beschneiden, dass man eine Weiche bauen kann.
 
Zurück
Oben