Hallo, ich versuche momentan ein RTP-Kommunikationstool zu schreiben, momentan bin ich soweit, dass ich Audio aus Dateien einlesen, zu einer anderen Maschine senden, und dort speichern, bzw. abspielen kann.
Das Abspiele löse ich ganz einfach nur eine SourceDataLine, wie hier im Forum schon mehrfach beschrieben.
Jetzt möchte ich aber auch kommunizieren (sonst wäre es ja kein Kommunikationstool), und brauche dazu die Möglichkeit, von einem Mikrofon einlesen zu können.
Benutze ich eine TargetDataLine, dann Nehme ich aber von allem möglichen auf. Zudem möchte ich den Benutzer eine Auswahl treffen lassen, welchen Input er verwenden möchte (falls z.B. mehrere Geräte angeschlossen oder bereits verbaut sind, wie bei einem Notebook mit Built-In-Mic).
Ich habe mit zur Übersicht ein kleines Programm geschrieben, bei dem ich mir anzeigen lasse, was es alles an Geräten auf meinem Rechner gibt.
Die letzten Zeilen dieser Ausgabe:
...sehen perfekt aus finde ich, nur leider kann ich mit Ports nichts anfangen.
Hat jemand eine Möglichkeit wie ich über ein vorher eingestelltes Gerät über nur einen Port (Audio)Daten beziehen kann?
Vielen Dank für eure Hilfe, XYSAWQ.
Das Abspiele löse ich ganz einfach nur eine SourceDataLine, wie hier im Forum schon mehrfach beschrieben.
Jetzt möchte ich aber auch kommunizieren (sonst wäre es ja kein Kommunikationstool), und brauche dazu die Möglichkeit, von einem Mikrofon einlesen zu können.
Benutze ich eine TargetDataLine, dann Nehme ich aber von allem möglichen auf. Zudem möchte ich den Benutzer eine Auswahl treffen lassen, welchen Input er verwenden möchte (falls z.B. mehrere Geräte angeschlossen oder bereits verbaut sind, wie bei einem Notebook mit Built-In-Mic).
Ich habe mit zur Übersicht ein kleines Programm geschrieben, bei dem ich mir anzeigen lasse, was es alles an Geräten auf meinem Rechner gibt.
Code:
System.out.println("Available:");
Mixer mixer = null;
Mixer.Info[] mixerinfos = AudioSystem.getMixerInfo();
for(int i=0; i<mixerinfos.length; i++)
{
mixer = AudioSystem.getMixer(mixerinfos[i]);
System.out.println("\n " + mixerinfos[i].getName() + " (Name: " + mixerinfos[i].getName() +
" / Vendor: " + mixerinfos[i].getVendor() + " / Version: " + mixerinfos[i].getVersion() + ")");
Line.Info[] sLineInfos = mixer.getSourceLineInfo();
System.out.println(" Sources (" + sLineInfos.length + "):");
for(int k=0; k<sLineInfos.length; k++)
{
try
{
SourceDataLine sLine = (SourceDataLine)mixer.getLine(sLineInfos[k]);
System.out.println(" Line: " + sLine.getLineInfo() + "\t(Name: " + sLine + ")");
}
catch (LineUnavailableException e)
{
e.printStackTrace();
}
catch(ClassCastException e)
{
try
{
Clip sClip = (Clip)mixer.getLine(sLineInfos[k]);
System.out.println(" Clip: " + sClip.getLineInfo() + "\t(Name: " + sClip + ")");
}
catch (LineUnavailableException e1)
{
e1.printStackTrace();
}
catch(ClassCastException e1)
{
try
{
Port sPort = (Port)mixer.getLine(sLineInfos[k]);
System.out.println(" Port: " + sPort.getLineInfo() + "\t(Name: " + sPort + ")");
}
catch (LineUnavailableException e2)
{
e2.printStackTrace();
}
}
}
}
Line.Info[] tLineInfos = mixer.getTargetLineInfo();
System.out.println(" Targets (" + tLineInfos.length + "):");
for(int k=0; k<tLineInfos.length; k++)
{
try
{
TargetDataLine tLine = (TargetDataLine)mixer.getLine(tLineInfos[k]);
System.out.println(" Line: " + tLine.getLineInfo() + "\t(Name: " + tLine + ")");
}
catch (LineUnavailableException e)
{
e.printStackTrace();
}
catch(ArrayIndexOutOfBoundsException e)
{
}
catch(ClassCastException e)
{
try
{
Clip tClip = (Clip)mixer.getLine(tLineInfos[k]);
System.out.println(" Clip: " + tClip.getLineInfo() + "\t(Name: " + tClip + ")");
}
catch (LineUnavailableException e1)
{
e1.printStackTrace();
}
catch(ClassCastException e1)
{
try
{
Port tPort = (Port)mixer.getLine(tLineInfos[k]);
System.out.println(" Port: " + tPort.getLineInfo() + "\t(Name: " + tPort + ")");
}
catch (LineUnavailableException e2)
{
e2.printStackTrace();
}
}
}
}
}
Die letzten Zeilen dieser Ausgabe:
Code:
Port Realtek HD Audio output (Name: Port Realtek HD Audio output / Vendor: Unknown Vendor / Version: 5.10)
Sources (0):
Targets (1):
Port: SPEAKER target port (Name: com.sun.media.sound.PortMixer$PortMixerPort@6b7920)
Port Realtek HD Audio Input (Name: Port Realtek HD Audio Input / Vendor: Unknown Vendor / Version: 5.10)
Sources (3):
Port: MICROPHONE source port (Name: com.sun.media.sound.PortMixer$PortMixerPort@5e3974)
Port: LINE_IN source port (Name: com.sun.media.sound.PortMixer$PortMixerPort@df503)
Port: Stereo Mix source port (Name: com.sun.media.sound.PortMixer$PortMixerPort@50d89c)
Targets (0):
...sehen perfekt aus finde ich, nur leider kann ich mit Ports nichts anfangen.
Hat jemand eine Möglichkeit wie ich über ein vorher eingestelltes Gerät über nur einen Port (Audio)Daten beziehen kann?
Vielen Dank für eure Hilfe, XYSAWQ.