Java Sound API : Zuordnung Port-Mixer zu Input-Mixer

Mithotyn

Mitglied
Hallo zusammen!

Ich kämpfe mich jetzt schon seit Stunden durch Google, Foren, Tutorials und Docs und finde keine Lösung für mein Problem.

Ich habe mittlerweile herausgefunden wie ich Mixer verwende um mir zur Aufnahme entsprechende TargetDataLines zu holen. Auch kann ich die Mixer abfragen um den Port-Mixer zu finden, um zwischen Line-In/Mikrofon umzuschalten und die Aufnahmelautstärke zu ändern.

Meine Frage ist nun die:

Ich habe MEHRERE (identische) Soundkarten im System (Windows) installiert. Demnach habe ich mehrere Input-Mixer und mehrere Port-Mixer.

Wie kann ich nun herausfinden welche Mixer zur physikalisch gleichen Soundkarte gehören? Damit ich im Programm auch den Lautstärkeregler [Soundkarte-1] zur Aufnahme-Quelle [SoundKarte-1] zuordnen kann.

Ihr versteht was ich meine?

Gruß Joachim
 
S

Spacerat

Gast
Ihr versteht was ich meine?
Ehrlich gesagt... nicht wirklich.
Du hast deine Mixer bzw. deine Ports und von diesen bekommst du eine Line. Das Line-Interface implementiert die Methode [c]getControl(Control.Type control)[/c]. Damit bekommt man immer die Regler jenes Ports, auf welchem die Line instanziert wurde. Mit zuordnen ist da nicht viel.
 

Mithotyn

Mitglied
Hmm... Das kann ich nicht bestätigen.

Java:
TargetDataLine tdl = AudioSystem.getTargetDataLine(new AudioFormat(8000, 8, 1, true, true));
		
tdl.open();

System.out.println("Anzahl Controls = " + tdl.getControls().length);
		
tdl.close();

Das liefert immer 0.

Macht rein logisch auch Sinn, wenn man sich die Hierarchie im Anhang mal anschaut. TargetDataLine implementiert erst DataLine und dann Line. Aber es implementiert nicht Port. Ich kann von TargetDataLine also nicht auf den zugrundeliegenden Port zugreifen. "getControls()" mag zwar vorhanden sein, liefert aber nur im Falle eines Ports tatsächlich die Controls.

Gruß
 

Mithotyn

Mitglied
Ich hab nochmal ne Grafik angehängt, die ich eben schnell zusammengebaut hab und die mein System wiedergibt.

Ich habe also eine "Realtek HD Audio" Soundkarte. Die stellt Java insg. 4 Mixer zur Verfügung. Um also Sound aufzunehmen, muss ich eine TargetDataLine vom Input-Mixer holen. Um die Ports zu steuern, muss ich diese aber vom Port-Input-Mixer holen.

Obwohl in Java 4 verschiedene (und noch etliche weitere) Mixer angezeigt werden, handelt es sich physikalisch um nur EINE Soundkarte.

Ich bräuchte also jetzt eine Möglichkeit, die verschiedenen Mixer pro Soundkarte zusammenzufassen. So dass ich später, wenn ich mehrere identische (USB-) Soundkarten am System angeschlossen habe, auch wirklich den Port der Soundkarte konfiguriere, von der ich auch die TargetDataLine bekommen habe.

In der Grafik ist mit der roten Linie der logische Pfad des Audiosignals vom Eingang der Soundkarte bis zur Anwendung markiert. Der gestrichelte Teil in der Mitte, der fehlt mir. Ich kann einen Port von irgend einem Mixer konfigurieren und kann von einem anderen Mixer aufnehmen. Dass beide aber zusammengehören, kann ich nicht feststellen.

Gruß Joachim
 
Zuletzt bearbeitet:
S

Spacerat

Gast
Nu' haste mich aber da liegen... Ich hab' mal bei mir alle möglichen TDLs abgefragt und keine einzige davon lieferte auch nur eine Control... das Array blieb immer leer. In der API-Doku hab' ich auch nichts finden können (die ist ja auch sowas von gut...:D). Ich gehe mal davon aus, das man dazu verdammt ist, die Eingangssignale softwaremässig "von hand" zu mischen. Ganz einverstanden bin ich damit aber noch nicht... Vllt. bringts was, wenn man sich die Control vom Portmixer holt und konkret den Port auswählt von wo man die TDL haben will.
Java:
TargetDataLine tdl = AudioSystem.getTargetDataLine(new AudioFormat(8000, 8, 1, true, true), portmixerinfo);
 

Mithotyn

Mitglied
Hi!

Hehe... Danke für die Bestätigung, dass es nicht an mir liegt.

Dein Vorschlag geht auch nicht. Das hatte ich auch schon probiert. Ich kann natürlich eine TDL nur von dem Mixer holen, der auch TDL's zur Verfügung stellt. Der Port-Input-Mixer stellt aber außer den Ports nix anderes zur Verfügung, so dass eine "LineUnsupported"-Exception geworfen wird.

So wie es aussieht, gibt es keinerlei Möglichkeit für das was ich brauche. (*)

Controls gibt es augenscheinlich nur bei Mixer und Port (Lautstärke, Balance, usw..). Eine TLD nimmt ja nur noch das, was der Mixer an Daten hat und leitet sie an die Anwendung. Sind alles einzelne, voneinander getrennte Lines mit eigenen Aufgaben und Möglichkeiten....

(*) Außer: Ich vergleiche die Namen der Mixer. Beim Port-Mixer steht noch "Port " vorne dran. Ansonsten heißen die Mixer identisch. Mag bei einer Soundkarte noch gehen, wie es bei mehreren identischen aussieht, weiß ich nicht. (Die kommen die Tage erst mit der Post)

Auf Unix-Systemen werden augenscheinlich die Hardware-Pfade noch mit angegeben. In Windows allerdings nicht.


Gruß Joachim
 

Mithotyn

Mitglied
Hi zusammen!

Ich hab mir mal die Sourcen der JDK runtergeladen und bin dem ganzen mal auf den Grund gegangen. Also es gibt in der Sound API mehrere MixerProvider, die eben Mixer zur Verfügung stellen. U.A. gibt dort den "DirectSoundMixerProvider" und den "PortMixerProvider". Beides sind eigene Klassen, die beim Ermitteln der vorhandenen Mixer nacheinander aufgerufen werden.

Der "DirectSoundMixerProvider" greift dabei auf native DirectX API's zurück, genauer auf die von "DirectSound". Die enumerierten Mixer werden dann als "DirectSoundMixer" auch zurückgegeben. In der Klasse "DirectSoundMixer" sind die Methoden implementiert, die DataLines zurückgeben. Die Klasse implementiert aber NUR TDL und SDL, eben keine Ports.

"PortMixerProvider" dagegen durchläuft native Win32 API's und ermittelt darüber vorhandene Mixer. Hier werden nun prinzipiell die gleichen Mixer gefunden wie beim "DirectSoundMixerProvider". Allerdings implementieren die Methoden im "PortMixer" nur Ports und keine DataLines. Auch wird (da hatte ich recht) dem Name der Mixer statisch ein "Port " vorangestellt.

Also:

Obwohl es sich im Betriebssystem um ein und denselben Mixer handelt, listet Java diese Mixer mehrmals mit unterschiedlichen "Features" auf. Einmal als "DirectSoundMixer" mit SDL und TDL und einmal als "PortMixer" mit Ports. Die Mixer agieren jeweils eigenständig (es gibt eine simple "List" aller vorhandenen Mixer) und lassen sich rein logisch nicht miteinander in Verbindung bringen.

Die einzige Möglichkeit besteht tatsächlich darin, den Namen des Mixers zu vergleichen, da bei dem Portmixer ja lediglich "Port " vorangestellt wird.

Das muss ich jetzt nur noch bei mehreren identischen Soundkarten prüfen.

Wie ich in anderen Beiträgen und im Internet schon feststellen musste, ist die Java Sound API echt scheiße....

Gruß Joachim
 
S

Spacerat

Gast
Gute Idee mit dem Quelltext...
Hab' mir vor kurzem mal dieses hier installiert (als Eclipse-Plugin). Damit lässt sich der Quellcode sehr gut zurückverfolgen.
Beim Zurückverfolgen fällt einem irgendwann eine private Methode [c]enableControls()[/c] in der Klasse (Achtung: :D) [c]PortMixer.PortMixerPort[/c] auf, welche dort unter anderem von [c]implOpen()[/c] aufgerufen wird.
Also mal rein hypothetisch: Kann es sein, das der Port erst geöffnet werden muss, bevor er selbst bzw. seine Lines Controls zurückgeben?
 

Mithotyn

Mitglied
Nabend!

Ja das stimmt. Der Port muss erst offen sein, bevor er Controls zurückgibt.

Das hab ich in meinem Quelltext (siehe oben) auch berücksichtigt. Hilft aber trotzdem nichts bei dem Problem, weils nix dran ändert. :)


Gruß Joachim
 
S

Spacerat

Gast
[c]tdl.open()[/c]? Damit öffnest du aber die Line und nicht den Port. Das portControlArray wird aber erst erstellt, wenn [c]portMixerPort.open();[/c] aufgerufen wird. Die Instanzen der Controls dürften (lt. Quelltext) immer die selben sein, ob sie nun von der Line oder vom Port geholt werden. Das Sound-API ist im übrigen kein API... es ist die Hölle :lol:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Sound in Java Spiel Spiele- und Multimedia-Programmierung 5
D Java sound pulseaudio Spiele- und Multimedia-Programmierung 0
C virtueller stereomix (java sound API) Spiele- und Multimedia-Programmierung 0
S Java Sound-API stagniert Spiele- und Multimedia-Programmierung 16
H Java Sound: WAVE Format17 einlesen. Spiele- und Multimedia-Programmierung 2
Kr0e Java Sound API - DataLine Spiele- und Multimedia-Programmierung 2
S Java Sound - Skipping in .mp3 Files und Bug (Bitte überprüfenl) Spiele- und Multimedia-Programmierung 14
C Java Sound API Clip.Close() Problem Spiele- und Multimedia-Programmierung 1
P Java Sound OutOfMemoryError Spiele- und Multimedia-Programmierung 2
T Java Sound Probleme Spiele- und Multimedia-Programmierung 8
Dragonfire Java Sound API - Lautstärke ändert sich nicht Spiele- und Multimedia-Programmierung 2
DEvent Java sound Bibliothek Spiele- und Multimedia-Programmierung 11
P Sound Datein mit JAVA zusammenstellen?! Spiele- und Multimedia-Programmierung 3
M Sound-Lösung für Java/JMF Spiele- und Multimedia-Programmierung 8
xFearofdarkness Feinde überlappen sich in Java Spiel Spiele- und Multimedia-Programmierung 3
A Minecraft Java Buch fehlermeldung Spiele- und Multimedia-Programmierung 61
yakazuqi Minecraft java.lang.Error: Watchdog Spiele- und Multimedia-Programmierung 3
L Fehler bei "Nochmal Spielen" (Java) Spiele- und Multimedia-Programmierung 1
N Minecraft Java Error Spiele- und Multimedia-Programmierung 6
M "Java Datei" Cannot be resolved to a variable Spiele- und Multimedia-Programmierung 2
1Spinne Minecraft Fabric Modding Java Error Spiele- und Multimedia-Programmierung 2
Joris Minecraft Minecraft Java Server Spiele- und Multimedia-Programmierung 6
Shanic Minecraft Minecraft Forge Server "Falsche Java Version" Spiele- und Multimedia-Programmierung 6
O Browser-basiertes online Pokerspiel mit Java Spiele- und Multimedia-Programmierung 1
M Spiel Mühle-Programmierung Java Spiele- und Multimedia-Programmierung 9
G VST-Plugins in Java verwenden Spiele- und Multimedia-Programmierung 0
P Audio Visualizer mit OpenGL in Java? Spiele- und Multimedia-Programmierung 4
P Snake Java Hilfe Spiele- und Multimedia-Programmierung 4
D Minecraft [Minecraft] Java Start Fehler (Core-Dump) Spiele- und Multimedia-Programmierung 1
T Welche packages aus der java api doku ist hilfreich zur Android Spieleprogrammierung Spiele- und Multimedia-Programmierung 2
A Programmieren eines Memorys mit Java (in Eclipse) Spiele- und Multimedia-Programmierung 5
C Java findet FluidSynth nicht Spiele- und Multimedia-Programmierung 2
I Java Andere Fenster in Borderless-Mode setzen Spiele- und Multimedia-Programmierung 16
leon_krys Java-Bußgeldrechner Spiele- und Multimedia-Programmierung 5
G [Java/KryoNet/LibGDX] Mutliplayer Packet Frage Spiele- und Multimedia-Programmierung 2
P Website mit Java Backend? Spiele- und Multimedia-Programmierung 1
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
J Fertigungstechnik.. PLS HALP.. Quellcode vom Text in java-Klasse speichern Spiele- und Multimedia-Programmierung 2
E Kalah Java Implementation Spiele- und Multimedia-Programmierung 1
G [Java] Vereinfachung von Boolean Abfragen Spiele- und Multimedia-Programmierung 3
G [LibGDX/Java] ArrayList Object Speicher Spiele- und Multimedia-Programmierung 3
T Java 3D Spiele- und Multimedia-Programmierung 2
A Spielfelder erstellen mit Jogl Java durch ein Koordinaten Array Spiele- und Multimedia-Programmierung 1
J Java Buttons Spiele- und Multimedia-Programmierung 6
T Java Kalender Spiele- und Multimedia-Programmierung 5
Ice4P4rty Java Optische Oberfläche Spiele- und Multimedia-Programmierung 2
MABY Eine mp3 Datei in Java abspielen Spiele- und Multimedia-Programmierung 14
D Java Bomberman Probleme java.lang.NullPointerException Spiele- und Multimedia-Programmierung 1
N Spiele-Menü in Java Spiele- und Multimedia-Programmierung 9
J HDMI Ausgänge mit Java programmieren? Spiele- und Multimedia-Programmierung 18
H Yu-Gi-Oh! Mit Java was tun? Spiele- und Multimedia-Programmierung 6
G Component System Java 2D Game LibGDX Spiele- und Multimedia-Programmierung 6
S Pong java.lang.StackOverflowError Spiele- und Multimedia-Programmierung 3
C Java aus Klasse rausgehen Spiele- und Multimedia-Programmierung 2
MaxG. Java Internet Radio Spiele- und Multimedia-Programmierung 6
G [Java Server] Allgemeine Frage zum Thema Networking in Videospielen Spiele- und Multimedia-Programmierung 15
P java.lang.NoClassDefFoundError: in Greenfoot Spiele- und Multimedia-Programmierung 0
G Java Achsen invertieren Spiele- und Multimedia-Programmierung 2
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
$ Einstieg in Java Game Development Spiele- und Multimedia-Programmierung 11
BraunBerry Java Game Pixel "einfärben" Spiele- und Multimedia-Programmierung 6
BraunBerry Java Game verbesserte Kollisionserkennung Spiele- und Multimedia-Programmierung 18
BraunBerry Java Game Waypoint System Spiele- und Multimedia-Programmierung 3
S Hilfe bei Java Gui Spiele- und Multimedia-Programmierung 2
David Schwarzbeck Java 3 dimensionale Kollisions Abfrage Spiele- und Multimedia-Programmierung 2
M Gesellschaftsspiel Mühle in Java programmieren Spiele- und Multimedia-Programmierung 3
beatles Java Minesweeper - OS X und Win7 Unterschied Spiele- und Multimedia-Programmierung 2
D Minecraft Java JDK installiert - Minecraft läuft nichtmehr in 64 Bit Spiele- und Multimedia-Programmierung 2
E TMX - Dateien in Java laden Spiele- und Multimedia-Programmierung 1
K Erstellen eines Fotoalbums mit Java Spiele- und Multimedia-Programmierung 8
windl MoviePlayer in Java Spiele- und Multimedia-Programmierung 0
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
F Klausurersatz: Ein Java-Programm erstellen und dieses präsentieren. Spiele- und Multimedia-Programmierung 2
E Java Jump and Run Map zu groß Spiele- und Multimedia-Programmierung 14
P java lwjgl Game Spiele- und Multimedia-Programmierung 0
J programm mit java-plugin Spiele- und Multimedia-Programmierung 2
D Java Webgame, welche Frameworks oder Techs sind von Nöten? Spiele- und Multimedia-Programmierung 5
P Java 2D Bug? Spiele- und Multimedia-Programmierung 8
T Problem mit Eclipse (java)-(minecraft) Spiele- und Multimedia-Programmierung 3
R Java App sendet Midi Daten über Flash Spiele- und Multimedia-Programmierung 3
O Java Zeile aus Textdatei zufällig ausgeben Spiele- und Multimedia-Programmierung 8
K Bestes Bildformat für Spielegrafiken und deren Einbindung in Java Spiele- und Multimedia-Programmierung 2
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
T Alle Referenzen zu einer Klasse aus Java Bytecode ersetzt, JVM sucht trotzdem diese Klasse Spiele- und Multimedia-Programmierung 1
J Java Kollisionsabfrage Spiele- und Multimedia-Programmierung 21
Flo. android java tastatureingaben abfangen. Spiele- und Multimedia-Programmierung 1
J Java Steuerberechnung hilfe Spiele- und Multimedia-Programmierung 17
C Export als .jar funktioniert nicht richtig (JAVA 3D) Spiele- und Multimedia-Programmierung 5
P Java Grafiken mit Rechnungen verknüpfen Spiele- und Multimedia-Programmierung 4
U Minecraft Mit Java auf Minecraft Server anmelden Spiele- und Multimedia-Programmierung 11
F Das sag mir einer Java ist plattform unabhänig ! Spiele- und Multimedia-Programmierung 10
S Engine2D - Java 2D Engine Spiele- und Multimedia-Programmierung 20
J Java Game performance Probleme Spiele- und Multimedia-Programmierung 7
C Java Kollisionserkennung Spiele- und Multimedia-Programmierung 4
U Blender in Java Spiele- und Multimedia-Programmierung 8
J Java Fussballspiel Player-KI in der Bewegungsphase Spiele- und Multimedia-Programmierung 4
K Java 15/Slide/Boss Puzzle Spiele- und Multimedia-Programmierung 2
T Java 3D - Step oder IGES Spiele- und Multimedia-Programmierung 1
H 3D Spiele mit Java - Diskussion Spiele- und Multimedia-Programmierung 35
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1

Ähnliche Java Themen

Neue Themen


Oben