Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Java Sound on Leopard



good question. could anyone run the attached app on Leopard and
send us the output?
e.g. with
  javac ListMixers.java
  java -showversion ListMixers

Thanks,
Florian


On 10/27/2007 12:00 AM, Yong Hyeon Yoon wrote:
> I guess Java 1.5 on Leopard is implemented differently from that of Tiger.
> 
> Has anyone tested Java Sound with Java 1.5 on Leopard?
> Is it still broken?
> 
> It would be very interesting to know if Java Sound on PPC with 32-bit
> JVM, and on Intel with 32-bit and 64-bit JVM are working correctly.
> 
> Yong
> 
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Java-dev mailing list      (email@hidden)
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/java-dev/email@hidden
> 
> This email sent to email@hidden
> 
> 

-- 
Florian Bomers
Bome Software

-------------------------------------------------------
Music Software, Development Tools:  http://www.bome.com
Java Sound extensions, plugins: http://www.tritonus.org
The Java Sound Resources:    http://www.jsresources.org
-------------------------------------------------------
Please quote this email in your reply. Thanks!
/*
 * Show installed mixers and additional info
 *
 * @author Florian Bomers
 */

import javax.sound.sampled.*;

public class ListMixers {

    private static boolean doPrintControls = true;
    private static boolean doPrintFormats = true;
    private static boolean doTimeAudioSystem = false;

    private static boolean setBooleanPorts = false;
    private static boolean setFloatPorts = false;

    public static void main(String[] args) {
	// parse arguments
	for (int i = 0; i < args.length; i++) {
	    if (args[i].equals("-c")) {
		doPrintControls = true;
	    } else if (args[i].equals("-s")) {
		setBooleanPorts = true;
		setFloatPorts = true;
	    } else if (args[i].equals("-t")) {
		doTimeAudioSystem = true;
	    } else if (args[i].equals("-f")) {
		doPrintFormats = true;
	    } else {
		printUsage();
	    }
	}

	beforeTiming();
	Mixer.Info[] aInfos = AudioSystem.getMixerInfo();
	afterTiming("AudioSystem.getMixerInfo()");
	for (int i = 0; i < aInfos.length; i++) {
	    try {
	    	beforeTiming();
		Mixer mixer = AudioSystem.getMixer(aInfos[i]);
		afterTiming("AudioSystem.getMixer("+i+": "+aInfos[i]+")");
		System.out.println(""+i+": "+aInfos[i].getName()+", "
				   +aInfos[i].getVendor()+", "
				   +aInfos[i].getVersion()+", "
				   +aInfos[i].getDescription());

		printLines(mixer, mixer.getSourceLineInfo());
		printLines(mixer, mixer.getTargetLineInfo());
	    } catch (Exception e) {
		e.printStackTrace();
	    }
	}
	if (aInfos.length == 0) {
	    System.out.println("[No mixers available]");
	}
	System.exit(0);
    }

    public static void printLines(Mixer mixer, Line.Info[] infos) {
	for (int i = 0; i<infos.length; i++) {
	    try {
		if (infos[i] instanceof Port.Info) {
		    Port.Info info = (Port.Info) infos[i];
		    System.out.println("  Port "+info);
		}
		if (infos[i] instanceof DataLine.Info) {
		    DataLine.Info info = (DataLine.Info) infos[i];
		    System.out.println("  Line "+info+" (max. "+mixer.getMaxLines(info)+" simultaneously): ");
		    if (doPrintFormats) {
			printFormats(mixer, info);
		    }
		}
		if (doPrintControls) {
		    Line line = (Line) mixer.getLine(infos[i]);
		    if (! (line instanceof Clip)) {
			line.open();
		    }
		    try {
			printControls(line.getControls());
		    } finally {
			if (! (line instanceof Clip)) {
			    line.close();
			}
		    }
		}
	    } catch (Exception e) {
		e.printStackTrace();
	    }
	}
    }

    public static void printFormats(Mixer mixer, DataLine.Info info) {
	AudioFormat[] formats = info.getFormats();
	for (int i = 0; i < formats.length; i++) {
	    System.out.println("  "+i+": "+formats[i]
			       +" ("+formats[i].getChannels()+" channels, "
			       +"frameSize="+formats[i].getFrameSize()+", "
			       +(formats[i].isBigEndian()?"big endian":"little endian")
			       +")");
	}
	if (formats.length == 0) {
	    System.out.println("  [no formats]");
	}
    }

    public static void printControls(Control[] controls) {
	for (int i = 0; i<controls.length; i++) {
	    printControl("    ", "Controls["+i+"]: ", controls[i]);
	}
	if (controls.length == 0) {
	    System.out.println("    [no controls]");
	}

    }

    static boolean balanceTested = false;

    public static void printControl(String indent, String id, Control control) {
	if (control instanceof BooleanControl) {
	    BooleanControl ctrl = (BooleanControl) control;
	    System.out.println(indent+id+"BooleanControl: "+ctrl);
	    if (setBooleanPorts) {
		try {
		    Thread.sleep(500);
		    ctrl.setValue(!ctrl.getValue());
		    Thread.sleep(500);
		    ctrl.setValue(!ctrl.getValue());
		} catch (Exception e) {}
	    }
	}
	else if (control instanceof CompoundControl) {
	    CompoundControl ctrl = (CompoundControl) control;
	    Control[] ctrls = ctrl.getMemberControls();
	    System.out.println(indent+id+"CompoundControl: "+control);
	    for (int i=0; i<ctrls.length; i++) {
		printControl(indent+"  ", "MemberControls["+i+"]: ", ctrls[i]);
	    }
	}
	else if (control instanceof EnumControl) {
	    EnumControl ctrl = (EnumControl) control;
	    Object[] values = ctrl.getValues();
	    Object value = ctrl.getValue();
	    System.out.println(indent+id+"EnumControl: "+control);
	    for (int i=0; i<values.length; i++) {
		if (values[i] instanceof Control) {
		    printControl(indent+"  ", "Values["+i+"]: "+((values[i]==value)?"*":""), (Control) values[i]);
		} else {
		    System.out.println(indent+"  Values["+i+"]: "+((values[i]==value)?"*":"")+values[i]);
		}
	    }
	}
	else if (control instanceof FloatControl) {
	    FloatControl ctrl = (FloatControl) control;
	    System.out.println(indent+id+"FloatControl: "+ctrl);
	    if (setFloatPorts) {
		try {
		    Thread.sleep(500);
		    float x = ctrl.getValue();
		    ctrl.setValue((float) (Math.random()*(ctrl.getMaximum() - ctrl.getMinimum()) + ctrl.getMinimum()));
		    Thread.sleep(1000);
		    ctrl.setValue(x);
		} catch (Exception e) {}
		//if (ctrl.getType() == FloatControl.Type.BALANCE && !balanceTested) {
		//	balanceTested = true;
		//	for (float y = -1.0f; y<=1.0f; y+=0.02) {
		//		ctrl.setValue(y);
		//		System.out.println("  Set to "+y);
		//		System.out.println("     res "+ctrl.getValue());
		//	}
		//}
	    }
	} else {
	    System.out.println(indent+id+"Control: "+control);
	}
    }

    private static long startTime;
    private static void beforeTiming() {
    	if (doTimeAudioSystem) {
	    //startTime = System.nanoTime();
	    startTime = System.currentTimeMillis();
	}
    }

    private static void afterTiming(String s) {
    	if (doTimeAudioSystem) {
	    //long durationMicros = (System.nanoTime() * startTime) / 1000;
	    long durationMicros = (System.currentTimeMillis() - startTime) * 1000;
	    System.out.println(""+durationMicros+" microseconds used by: "+s);
	}
    }

    static void printUsage() {
	System.out.println("Usage:");
	System.out.println("ListMixers [-h] [-c] [-f]");
	System.out.println("-h: show this help");
	System.out.println("-c: for each line, show available controls");
	System.out.println("-f: for each DataLine, show available formats");
	System.out.println("-t: measure the execution time of AudioSystem methods");
	//System.out.println("-s: set random port controls");
	System.exit(0);
    }
}
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Java-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/java-dev/email@hidden

This email sent to email@hidden

References: 
 >Java Sound on Leopard (From: Yong Hyeon Yoon <email@hidden>)



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.