Hallo zusammen!
Ich mache gerade ein VOIP programm wo ich eben mit einem partner reden kann.
funktioniert soweit ganz gut, aber ich hab noch ein problem mit der rückkopplung, d.h. ich höre mich selbst wieder (weil von dem boxen des anderen meine stimme gleich wieder ins mikro geht...)
hat jemdand erfahrung damit und wie man soetwas lösen könnte?
so ähnlich wie skype, da funktioniert das ja super.
ich dachte schon dass ich die aufnahme von mir stoppe sobald mein gegenüber spricht und umgekehrt (oder zumindest die mikro-empfindlichkeit runterdrehe)...
aber ich weiß nicht obs was bessere gibt - hat wer code dazu?
so mache ich es:
und zum aufnehmen (natürlich im thread der durhc startthread erzeugt wird):
wie gesagt, der code geht, jedoch ist das problem der rückkopplung da... also muss ich da was machen - hat jemand eine Idee (mikro leiser, andere soundeinstllungen...)
Vielen DAnk!
Ich mache gerade ein VOIP programm wo ich eben mit einem partner reden kann.
funktioniert soweit ganz gut, aber ich hab noch ein problem mit der rückkopplung, d.h. ich höre mich selbst wieder (weil von dem boxen des anderen meine stimme gleich wieder ins mikro geht...)
hat jemdand erfahrung damit und wie man soetwas lösen könnte?
so ähnlich wie skype, da funktioniert das ja super.
ich dachte schon dass ich die aufnahme von mir stoppe sobald mein gegenüber spricht und umgekehrt (oder zumindest die mikro-empfindlichkeit runterdrehe)...
aber ich weiß nicht obs was bessere gibt - hat wer code dazu?
so mache ich es:
Java:
private AudioFormat getAudioFormat(){
float sampleRate = 16000.0F; //11025 oder 16000 für besseres signal
int sampleSizeInBits = 16;
int channels = 1;
boolean signed = true;
boolean bigEndian = false;
return new AudioFormat(sampleRate,sampleSizeInBits,channels,signed,bigEndian);
}
//und zum aufnehmen:
try {
Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo();
System.out.println("Available mixers:");
for (int cnt = 0; cnt < mixerInfo.length; cnt++) {
System.out.println(mixerInfo[cnt].getName());
}
audioFormat = getAudioFormat();
try{
//TODO um probleme zu vermeiden, mikro "leiser" machen wenn anderer spricht und so auch beim anderen (und wieder laut wenn man selbst spricht)
if(captureDataLine == null){
DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class, audioFormat);
Mixer mixer = AudioSystem.getMixer(mixerInfo[4]);
captureDataLine = (TargetDataLine) mixer.getLine(dataLineInfo);
} else {
Table.p("mixer problem");
}
if(captureDataLine != null && !captureDataLine.isOpen()) {
captureDataLine.open(audioFormat);
captureDataLine.start();
} else {
Table.p("TDL open + start problem");
}
startThread(); //siehe unten
} catch (Exception e){
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
und zum aufnehmen (natürlich im thread der durhc startthread erzeugt wird):
Java:
byte soundBuffer[] = new byte[1000]; // immer 1000 bytes aufnehmen
int cnt = captureDataLine.read(soundBuffer, 0, soundBuffer.length)
wie gesagt, der code geht, jedoch ist das problem der rückkopplung da... also muss ich da was machen - hat jemand eine Idee (mikro leiser, andere soundeinstllungen...)
Vielen DAnk!