package uk.co.mmscomputing.sound; import java.io.*; import javax.sound.sampled.*; public class SoundMixer{ static AudioFormat[] formats={ new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,8000,16,2,4,8000,false), new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED,8000,16,2,4,8000,false), new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,8000,16,2,4,8000,true), new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED,8000,16,2,4,8000,true), new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,8000,16,1,2,8000,false), new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED,8000,16,1,2,8000,false), new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,8000,16,1,2,8000,true), new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED,8000,16,1,2,8000,true), new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,8000,8,2,2,8000,false), new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED,8000,8,2,2,8000,false), new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,8000,8,1,1,8000,true), new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED,8000,8,1,1,8000,true), new AudioFormat(AudioFormat.Encoding.ALAW,8000,8,1,1,8000,true), new AudioFormat(AudioFormat.Encoding.ULAW,8000,8,1,1,8000,true) }; final private int id; final private Mixer mixer; final private Mixer.Info info; public SoundMixer(int id, Mixer.Info info){ this.id=id; this.info=info; this.mixer=AudioSystem.getMixer(info); } public int getId(){ return id; } public String getName(){ return /*""+id+" "+*/mixer.getMixerInfo().getName(); }; public Mixer.Info getMixerInfo(){return info;} public String toString(){ Mixer.Info info=mixer.getMixerInfo(); String s="\nMixer ["+id+"]"; s+="\n\t Name: "+info.getName(); s+="\n\t Desc: "+info.getDescription(); s+="\n\t Ven : "+info.getVendor(); s+="\n\t Ver : "+info.getVersion(); s+="\n\t Str : "+info.toString(); Line.Info[] infos=mixer.getSourceLineInfo(); s+="\n\nSourceLine count : "+infos.length; for(int i=0;i<infos.length;i++){ if(infos[i] instanceof DataLine.Info){ s+="\n\t\tData Line Source ["+i+"]"; s+="\n\t\t\t Str : "+infos[i].toString(); }else if(infos[i] instanceof Port.Info){ s+="\n\t\tPort Source ["+i+"]"; s+="\n\t\t\t Name: "+((Port.Info)infos[i]).getName(); s+="\n\t\t\t is Src: "+((Port.Info)infos[i]).isSource(); s+="\n\t\t\t Str : "+infos[i].toString(); }else/*if(infos[i]!=null)*/{ s+="\n\t\tSource ["+i+"]"; s+="\n\t\t\t Str : "+infos[i].toString(); } } s+="\n\nOUTPUT\n"; for(int i=0;i<formats.length;i++){ try{ SourceDataLine out=getOutputLine(formats[i]); out.close(); s+="\n"+formats[i].toString(); }catch(Exception e){ // s+="\n"+e.getMessage(); } } infos=mixer.getTargetLineInfo(); s+="\n\nTargetLine count : "+infos.length; for(int i=0;i<infos.length;i++){ if(infos[i] instanceof DataLine.Info){ s+="\n\t\tData Line Target ["+i+"]"; s+="\n\t\t\t Str : "+infos[i].toString(); }else if(infos[i] instanceof Port.Info){ s+="\n\t\tPort Target ["+i+"]"; s+="\n\t\t\t Name: "+((Port.Info)infos[i]).getName(); s+="\n\t\t\t is Src: "+((Port.Info)infos[i]).isSource(); s+="\n\t\t\t Str : "+infos[i].toString(); }else /*if(infos[i]!=null)*/{ s+="\n\t\tTarget ["+i+"]"; s+="\n\t\t\t Str : "+infos[i].toString(); } } s+="\n\nINPUT\n"; for(int i=0;i<formats.length;i++){ try{ TargetDataLine out=getInputLine(formats[i]); out.close(); s+="\n"+formats[i].toString(); }catch(Exception e){ // s+="\n"+e.getMessage(); } } return s; } public TargetDataLine getInputLine(AudioFormat format, int bufSize)throws LineUnavailableException{ TargetDataLine in; DataLine.Info info=new DataLine.Info(TargetDataLine.class,format); in=(TargetDataLine)mixer.getLine(info); // System.out.println("BufferSize "+in.getBufferSize()); in.open(format,bufSize); return in; } public TargetDataLine getInputLine(AudioFormat format)throws LineUnavailableException{ TargetDataLine in; DataLine.Info info=new DataLine.Info(TargetDataLine.class,format); in=(TargetDataLine)mixer.getLine(info); in.open(format,in.getBufferSize()); return in; } public SourceDataLine getOutputLine(AudioFormat format, int bufSize)throws LineUnavailableException{ SourceDataLine out; DataLine.Info info=new DataLine.Info(SourceDataLine.class,format); out=(SourceDataLine)mixer.getLine(info); out.open(format,bufSize); return out; } public SourceDataLine getOutputLine(AudioFormat format)throws LineUnavailableException{ SourceDataLine out; DataLine.Info info=new DataLine.Info(SourceDataLine.class,format); out=(SourceDataLine)mixer.getLine(info); out.open(format,out.getBufferSize()); return out; } /* static{ try{ System.err.println("LOAD uk.co.mmscomputing.sound.provider.Mixer"); Class.forName("uk.co.mmscomputing.sound.provider.Mixer"); }catch(ClassNotFoundException cnfe){ System.err.println("uk.co.mmscomputing.sound.SoundMixer\n\t"+cnfe); } } */ }