동시에 두 개의 다른 버퍼 (버퍼 A와 B)를 SourceDataLine으로 멀티 스레드하여 동시에 사운드를 재생하려고합니다. 하지만 그것은 버퍼 A와 버퍼 B간에 전환을 유지하고, 내 SourceDataLine에 쓰기 전에 버퍼를 병합해야합니까, 아니면 동기화 된 방법으로 재생할 수 있습니까?Java는 SourceDataLine과 동시에 2 바이트 버퍼를 재생합니다.
class PlayThread extends Thread {
byte[] buffer = new byte[2 * 1024];
@Override
public void run() {
try {
while (true) {
DatagramPacket receive = new DatagramPacket(buffer, buffer.length);
mDatagramSocket.receive(receive);
mSourceDataLine.write(receive.getData(), 0, receive.getData().length);
System.out.println("Received!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
다른 수신 버퍼가있는 2 개의 PlayThread 인스턴스가 있습니다. 아래는 SourceDataLine이 초기화되는 함수입니다.
private void init() {
try {
DataLine.Info sourceDataLineInfo = new DataLine.Info(
SourceDataLine.class, audioFormat);
DataLine.Info targetDataLineInfo = new DataLine.Info(
TargetDataLine.class, audioFormat);
Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo();
Mixer mixer = AudioSystem.getMixer(mixerInfo[3]);
mSourceDataLine = (SourceDataLine) AudioSystem
.getLine(sourceDataLineInfo);
mTargetDataLine = (TargetDataLine) mixer.getLine(targetDataLineInfo);
mSourceDataLine.open(audioFormat, 2 * 1024);
mSourceDataLine.start();
mTargetDataLine.open(audioFormat, 2 * 1024);
mTargetDataLine.start();
} catch (LineUnavailableException ex) {
ex.printStackTrace();
}
}
고맙습니다.