SourceDataLineでマルチスレッド化された2つの異なるバッファー(バッファーAとB)を作成して、同時にサウンドを再生しようとしています。しかし、バッファAとバッファBを切り替え続けます。バッファをSourceDataLineに書き込む前に、バッファをマージする必要がありますか、それとも同期して再生する方法はありますか?
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();
}
}
ありがとうございました。