Salve,
ho bisogno di realizzare un mixer audio.
Premesso che ogni traccia avrà un thread separato, vorrei provare ad implementare un effetto delay per ogni traccia.

L'idea è quella di usare due SourceDataLine contenenti lo stesso wav e farli partire leggermente sfasati. L'unico problema è che quando utilizzo il buffer per leggerli e riprodurli, vengono eseguiti uno dopo l'altro e non contemporaneamente...

Vi linko il codice:

codice:
final int EXTERNAL_BUFFER_SIZE = 524288;
int nBytesRead = 0;
int nBytesRead2 = 0;

byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];
byte[] abDelay = new byte[abData.length];

try { 
           while (nBytesRead != -1) { 
		     nBytesRead = audioInputStream.read(abData, 0, abData.length);		                
		     nBytesRead2 = audioInputStream2.read(abDelay, 0, abDelay.length);
		                if (nBytesRead >= 0) {
		                	auline.write(abDelay, 0, nBytesRead2);	
		                	auline2.write(abData, 0, nBytesRead);
		                }
	}
}
catch (IOException e) { 
            e.printStackTrace();
            return;
} finally { 
            auline.drain();
            auline2.drain();
            auline.close();
            auline2.close();
}
Qualche idea?
So che esiste un modo per sincronizzarle dal Mixer, ma ho letto che non funziona e che verrà implementato in futuro.