Hi, does it access via OSS API? could you try stace to check what gets into sleep?
Takashi At Sun, 02 Nov 2003 23:12:05 +0100, Steffen Sauder wrote: > > [1 <text/plain; ISO-8859-1 (7bit)>] > Hello, > > I am working on an audio-application with java 1.4, and I noticed that > with the current alsa-release the time neccessary to initialize my > Terratec DMX6fire card for playback (in oss emulation mode) increased a > lot since older versions. > > I wrote a small program to measure the time it takes for simply starting > the playback of a wav/aiff file. I noticed that the 0.9.8 release uses a > _lot_ more time on the AudioSystem.getMixerInfo() call (which searches > for all available devices) than older versions. I also noticed that the > times differ a lot for different JDKs, so here are the results for the > sun-jdk-1.4.2.01, blackdown-jdk-1.4.1 and ibm-jdk-1.4.1 with the > different alsa-driver versions. > > alsa-driver 0.9.2 - 0.9.3a: > sun: 3.2- 3.3 sec bdn: 1.9- 2.0 sec ibm: 0.7- 0.8 sec > > alsa-driver 0.9.3b - 0.9.7: > sun: 6.2- 6.3 sec bdn: 13.7-13.8 sec ibm: 3.7- 3.9 sec > > alsa-driver 0.9.8: > sun: 48.0-48.5 sec bdn: 24.7-24.8 sec ibm: 13.7-13.8 sec > > alsa-driver cvs-nov-02: > sun: 20.7-20.9 sec bdn: 24.8-24.9 sec ibm: 13.8-13.9 sec > > So things got worse between 0.9.3a and .b (the same moment the > mplayer-oss-emulation-delay problem occured!) and 0.9.7 and 0.9.8. > Current CVS version is working a bit better for sun's jdk, but not for > the others. I did not try different alsa-lib versions (used 0.9.2 all > the time) - don't know if this would make any difference. > > I attached the source code of the small programm, its syntax is: > > java AudioTest AUDIOFILE [DEVICE_NO] > > where DEVICE_NO is the index of the java-mixer-device to be used (they > get listed if you start it without the second parameter) > > Gruss, > Steffen > [2 AudioTest.java <text/plain (7bit)>] > > import javax.sound.sampled.*; > /** > * > * @author fali > */ > public class AudioTest { > > /** Creates a new instance of AudioTest */ > public AudioTest() { > } > > private static void playAudioFile(String fileName, int device) throws > UnsupportedAudioFileException, LineUnavailableException, java.io.IOException { > long beginTime = System.currentTimeMillis(); > > System.out.println("checking for available devices on this system..."); > Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo(); > for (int i=0; i<mixerInfos.length; i++) { > System.out.println(i+" > "+mixerInfos[i].getName()+"\t"+mixerInfos[i].getVendor()); > } > System.out.println(); > > System.out.println("getting mixer device "+mixerInfos[device].getName()+"..."); > Mixer mixer = AudioSystem.getMixer(mixerInfos[device]); > System.out.println("got mixer device, trying to open it..."); > mixer.open(); > System.out.println("mixer device opened, checking supported lines..."); > > Line.Info[] supportedLines = mixer.getSourceLineInfo(); > for (int i=0; i<supportedLines.length; i++) { > System.out.println(supportedLines[i].toString()); > } > System.out.println(); > > java.io.File file = new java.io.File(fileName); > AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file); > AudioFormat audioFormat = audioInputStream.getFormat(); > System.out.println("audio file opened, format is "+audioFormat.toString()); > > Line.Info lineInfo = new DataLine.Info(SourceDataLine.class, audioFormat); > System.out.println("obtaining SourceDataLine for that AudioFormat..."); > SourceDataLine sourceDataLine = (SourceDataLine)mixer.getLine(lineInfo); > System.out.println("opening SourceDataLine..."); > sourceDataLine.open(audioFormat); > System.out.println("starting SourceDataLine..."); > sourceDataLine.start(); > > long endTime = System.currentTimeMillis(); > float seconds = (endTime-beginTime)/1000.0f; > System.out.println("it took "+seconds+" seconds to start playback."); > > byte[] buf = new byte[1024]; > int bytesRead = 0; > while(bytesRead>=0) { > bytesRead = audioInputStream.read(buf); > if (bytesRead>0) { > sourceDataLine.write(buf, 0, bytesRead); > } > } > > sourceDataLine.stop(); > sourceDataLine.close(); > audioInputStream.close(); > > } > > public static void main(String[] args) { > try { > if (args.length==0) { > System.err.println("first argument has to be an audio file."); > System.exit(-1); > } > String fileName = args[0]; > int device = 0; > if (args.length==2) { > device = Integer.parseInt(args[1]); > } > playAudioFile(fileName, device); > } catch (Exception e) { > e.printStackTrace(); > } > } > > } ------------------------------------------------------- This SF.net email is sponsored by: SF.net Giveback Program. Does SourceForge.net help you be more productive? Does it help you create better code? SHARE THE LOVE, and help us help YOU! Click Here: http://sourceforge.net/donate/ _______________________________________________ Alsa-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-devel