.NET DirectSound Lautsprecherposition

Drakonomikon

Commander
Registriert
Okt. 2005
Beiträge
2.744
Ich habe mich ein wenig mit Microsofts DirectX.DirectSound per VB.net beschäftigt.

Mir ist die funktionsweise des primären und sekundären Buffers klar. Sprich ich kann beliebigen SurroundSound wiedergeben.

Was aber meiner Meinung nach nicht definiert werden kann, ist die Positionsangabe der einzelnen Lautsprecher. Lediglich die Lautsprecherkonfiguration (wobei devSound mein Device ist) kann mit
Code:
Dim speaker As New Speakers
speaker.FivePointOne = True
devSound.SpeakerConfig = speaker
deklariert werden.

Was ist aber, wenn ich meine Lautsprecher nicht in der üblichen (sagen wir) 5.1 Konfiguration angeordert habe (die da wäre 2 Front + Center + 2 Rear + LFE)? Ein anderes extremes Beispiel wäre doch 2 Front + Center + 2 FrontHigh + LFE. Insbesondere bei Asymmetrien sollte es Korrekturmöglichkeiten geben.

Die Masterfrage lautet also: Wie ist eine jede Konfiguration bei DirectSound (und auch bei Windows-Audio) im Detail definiert? D.h. in welchem Winkel und Abstand zum Bezugspunkt des Höhers müssen die Lautsprecher stehen, und gibt es eine Möglichkeit falsch aufgestellte Lautsprecher softwareseitig entsprechend zu korrigieren?
 
Ohne mich mit den speziellen Fähigkeiten der Klassen von DirectX.DirectSound auszukennen, würde ich mal sagen es heißt z.B. Dolby Surround und was Dolby sonst noch so auf dem Markt hat. Dolby gibt also einen gewissen "Standard" raus, der die Positionierung der Lautsprecher vorgibt. Wobei es glaub ich nicht "Winkel yx zu Position p" sondern "hinter Position p, vor Position p, seitlich vorne von Position p" ist.

Willst du eine bessere bzw. detaillierte Kalibrierung vornehmen, benötigst du eine deutlich komplexere Funktion, wo Sitzposition, Abstand und Position der jeweiligen Lautsprecher zur Position festgelegt werden können. Auf Basis dieser Werte könnte man dann Soundkorrekturen wie z.B. Laufzeitverhalten vornehmen, wie sie ja z.B. in AVRs oder Dolby-zertifizierten Geräten vorgesehen sind (ich weiß jedoch nicht, ob dieser Funktionalität teil der Zertifizierung ist).

Nachtrag:
Bei 5.1 Surround werden die Lautsprecher z.B. so aufgebaut: http://www.surround-sound-anleitung.de/images/produkte/aufstellung.gif

Die vorderen Lautsprecher dienen als Hauptlautsprecher und dienen auch der Detailauflösung d.h. diese auf den Hörer auszurichten macht Sinn.
Die Rear-Lautsprecher sind jedoch nicht eindeutig positionierbar, da sie sowohl Ton abspielen, welcher hinter dem Zuschauer als auch seitlich von ihm auftreten. Aus diesem Grund wird manchmal, wie in dem Bild, empfohlen, sie in einem 45° Winkel aufzustellen. Das macht bei genauer Betrachtung nicht immer Sinn, da der Rear Sound eher diffus klingen soll d.h. er soll nicht genau ortbar sein. Außerdem macht es keinen sonderlich großen Unterschied, ob ich die hinteren Lautsprecher direkt auf die Hörposition ausrichte, da sich der Schall sowieso im Raum verteilt. Bei erwünschter Diffusion des Klangs macht es jedoch durchaus Sinn, die Lautsprecher NICHT auf den Hörer auszurichten. Dipole werden mit diesen Gedanken im Hintergrund gleich so konzipiert. Reguläre Lautsprecher könnte man, und das wird auch manchmal so gemacht, exakt 180° gedreht aufstellen d.h. die Rear-Lautsprecher strahlen die hintere Wand anstatt die Sitzposition an. Dies reduziert die Ortbarkeit durch Reflektion an den Wänden deutlich. Man kann also nicht genau warnehmen, das es zwei Meter rechts hinter einem aus den Lautsprecher kommt, sondenr eher nur noch das es von hinten kommt. Dies ist so gewünscht. Bei einem 6.1 System wandern die hinteren Lautsprecher zur Seite d.h. man hat jeweils einen dedizierten Lautsprecher für eine Seite und einen Lautsprecher für die Rear-Signale. Bei 7.1 sind es hinten zwei Lautsprecher. Diese sind jedoch oft (immer?) Mono, d.h. es ist einfach der Lautsprecher von 6.1 welcher einmal Links und einmal Rechts hinter der Sitzposition steht. Auch in diesem Fall ist eine Reduzierung der Ortbarkeit wünschenswert, da dies das Realitätsgefühl erhöht, wenn man nicht exakt hört, das der Sound von nur zwei Meter neben einem entspringt.

Durch die jeweiligen Aufstellungsmöglichkeiten erübrigt sich die Frage nach einem Aufstellungswinkel, da es keinen fest definierten Wert geben kann. Man müsste zuerst einmal wissen, ob es sich um reguläre Lautprecher, Dipole oder sonstige Lautsprecher mit spezieller Aufstellung (z.B. 180° gedreht) handelt.

Die jeweilige Software (Spiele, Videosoftware, ...) gehen natürlich davon aus, dass die Lautsprecher entsprechend aufgestellt werden. Du könntest natürlich hingegen und deine Software entsprechen programmieren, das sie davon ausgeht, das bei einem 5.1 System sämtliche Lautsprecher für die Front zuständig sind (2 Front, 1 Center, 2 Front High, 1 Subwoofer)
 
Zuletzt bearbeitet:
Dieser Beitrag ist nett gemeint, aber an einen Anfänger gerichtet der sich mit der Materie nicht auskennt. Mir sind die Standards die Dolby und DTS mit ihren Produkten definieren bekannt (bzw. sie sind öffentlich einsehbar).

Eine Anwendung die jedoch 3D-Audio ausgibt, arbeitet mit ihren Soundeffekten vektoriell. Um zu entscheiden welcher Lautsprecher (und das erfolgt nunmal per PCM) angesprochen wird, muss im einfachsten Fall ein Tensorprodukt zwischen eben diesen Vektor und einer Matrix gemacht werden, in der die Hörposition und die Aufstellung der Lautsprecher definiert wird.

Einfach gesagt, woher soll DirectSound wissen wie die Lautsprecher aufgestellt sind. Antwort: garnicht. Es wird vorrausgesetzt das die hinteren Lautsprecher hinter einem sind. In welcher Weise und welchem Winkel wird vernachlässigt. Aber eben aus Abweichungen des vorgesehenen Standards ergeben sich Inhomogenitäten, die softwareseitig anscheinend nicht ausgeglichen werden können.

Ein AVR kann solche Korrekturen vornehmen. Die beziehen sich aber auf Dolby und DTS. Nicht aber auf den Standard den Microsoft mit DirectSound festgelegt hat.
 
Zuletzt bearbeitet:
Naja, dass man eben nicht wissen kann wo die Lautsprecher stehen, wollte ich ja hinaus ;-).

Du hast jedoch recht. In meinem Beitrag habe ich komplett vernachlässigt, dass eine Anwendung erst den jeweiligen Sound für die Lautsprecher berechnen muss. Es bleibt zwar weiterhin das Problem mit dem Aufstellungswinkel und Position, jedoch muss tatsächlich eine Matrix aufgebaut werden, bzw. über den "Soundvektor" bestimmt werden, wann der Ton über welchen Lautsprecher und mit welcher Lautstärke ausgegeben wird.

Es macht Sinn das Microsoft dies in das Framework integriert hat. Ich möchte jedoch nicht ausschließen, dass man dies nicht vielleicht doch manuell festlegen muss. Die MSDN gibt eigentlich zu jedem Punkt von aktuellen Microsoft APIs Informationen her, jedoch wirst du dort bereits geschaut haben.

Ich würde dir empfehlen, die Frage in einer der Microsoft Foren zu stellen. Dort treiben sich häufig Leute vom Fach rum, die dir dies sicherlich relativ zügig beantworten können.
 
Zurück
Oben