Servus,
ich versuche grade eine Art Modem zu schreiben und dazu von dem Line-Out einer Soundkarte zum Line-In einer anderen Soundkarte "Töne" zu übertragen. Nun habe ich ein seltsames Problem. Ich schicke Samples in meine SourceDataLine (AudioFormat af = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 8000, 16, 1, 2, 8000, false)).
Die Samples sind shorts und werden dann in je zwei bytes konvertiert (Zweierkomplement weil PCM_SIGNED). Das sieht auf der Quellseite dann so aus und erzeugt ein paar Sekunden lang einen Ton:
Das ganze open(), start(), close() usw. Gedöns mach ich an anderer Stelle.
Auf dem Zielrechner hol ich mir dann ein AudioInputStream des gleichen Formats und bekomme folgendes Ergebnis (zurück nach Short konvertiert, skaliert):
Phasenverschoben und mit nem leichten Jitter an der Flanke, aber das wäre auch kein Problem. Allerdings sieht das Ergebnis nach ein paar hundert Samples plötzlich so aus:
und das geht natürlich so weiter. Das bedeutet dass mit jedem sample-set meine flanke ein stück nach "links" wandert. Kann mir das jemand erklären?
Vielen Dank im Voraus!
Grüße
Marian
ich versuche grade eine Art Modem zu schreiben und dazu von dem Line-Out einer Soundkarte zum Line-In einer anderen Soundkarte "Töne" zu übertragen. Nun habe ich ein seltsames Problem. Ich schicke Samples in meine SourceDataLine (AudioFormat af = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 8000, 16, 1, 2, 8000, false)).
Die Samples sind shorts und werden dann in je zwei bytes konvertiert (Zweierkomplement weil PCM_SIGNED). Das sieht auf der Quellseite dann so aus und erzeugt ein paar Sekunden lang einen Ton:
Java:
short[] signal = new short[]{-300, -300, -300, -300, -300, -300, -300, -300, 300, 300, 300, 300, 300, 300, 300, 300};
byte[] buf = AudioUtils.shortToByte(signal);
for (int i = 0; i < 2000; i++) {
sourceLine.write(buf, 0, buf.length);
}
Das ganze open(), start(), close() usw. Gedöns mach ich an anderer Stelle.
Auf dem Zielrechner hol ich mir dann ein AudioInputStream des gleichen Formats und bekomme folgendes Ergebnis (zurück nach Short konvertiert, skaliert):
Code:
[-300, -300, -300, -300, 27, 300, 300, 300, 300, 300, 300, 300, -50, -300, -300, -300]
Phasenverschoben und mit nem leichten Jitter an der Flanke, aber das wäre auch kein Problem. Allerdings sieht das Ergebnis nach ein paar hundert Samples plötzlich so aus:
Code:
[-300, -300, -190, 300, 300, 300, 300, 300, 300, 300, 300, 170, -300, -300, -300, -300]
und das geht natürlich so weiter. Das bedeutet dass mit jedem sample-set meine flanke ein stück nach "links" wandert. Kann mir das jemand erklären?
Vielen Dank im Voraus!
Grüße
Marian
Zuletzt bearbeitet: