import jass.render.*; import jass.engine.*; import jass.generators.*; import java.util.*; // Test latency by clicking a button. Try this with JavaSound, DirectX, and ASIO // Make sure to terminate by clicking on the close button // instead of ^C when using ASIO or system will hang. Occasionally DirexX will also hang. // Note that using ASIO the buffersize of ASIO = JASS buffersize. SOme restictions depending on audio // card driver apply: for SB Audigy bufferSIze should be 2400 +- n*4 public class LatencyOutTest extends Thread { public static void main (String args[]) throws Exception { float srate = 44100.f; // SBAudigy driver only supports 48Khz if(args.length != 3) { System.out.println("Usage: java LatencyOutTest javasound|directx|rtaudio|asio bufferSizeJASS bufferSizeRender "); return; } String aAPI = args[0]; int bufferSize = Integer.parseInt(args[1]); // JASS buffersize int bufferSizeRender = Integer.parseInt(args[2]); // Renderer buffersize double latencyInSeconds = (bufferSize*bufferSizeRender)/srate; final SourcePlayer player = new SourcePlayer(bufferSize,bufferSizeRender,srate,"SB Audigy Audio [DF80"); if(aAPI.equals("asio")) { player.setUseNativeSound(true,"ASIO"); // ASIO buffer == synthesisBuffersize } else if(aAPI.equals("directx")) { player.setUseNativeSound(true, "DirectX"); } else if(aAPI.equals("rtaudio")) { player.setUseNativeSound(true); player.setNumRtAudioBuffersNative(bufferSizeRender); } else { player.setUseNativeSound(false); latencyInSeconds = (bufferSizeRender)/srate; } System.out.println("Native Latency= " + latencyInSeconds); float[] excitation = new float[bufferSize]; for(int i=0;i<bufferSize;i++) { excitation[i] = 0; } excitation[0] = 1; final ModalObjectWithOneContact bell = new ModalObjectWithOneContact(new ModalModel("../data/bell4.sy"),srate,bufferSize); final ConstantOneShotBuffer force = new ConstantOneShotBuffer(srate,bufferSize,excitation); bell.addSource(force); player.addSource(force); player.addSource(bell); Controller a_controlPanel = new Controller(new java.awt.Frame ("Click"),false,0,1) { public void onButton(int k) { switch(k) { case 0: force.hit(); System.out.println("Click"); break; } } }; a_controlPanel.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.out.println("Close handler called"); player.stopPlaying(); try{ sleep(500); } catch(Exception e3) { } System.exit(0); } }); a_controlPanel.setButtonNames(new String[] {"Bang"}); a_controlPanel.setSize(200,200); a_controlPanel.setVisible(true); if(player.getUseNativeSound() && player.getAudioAPI() == "ASIO") { player.initASIO(); } else{ player.start(); } } }