package local.media; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.AudioFileFormat; import java.io.File; import java.io.FileOutputStream; /** AudioReceiver is a pure-java audio stream receiver. * It uses the javax.sound library (package). */ public class AudioReceiver { // ******************************* MAIN ******************************* /** The main method. */ public static void main(String[] args) { int port=0; int sample_rate=8000; int sample_size=1; boolean linear_signed=false; boolean pcmu=false; boolean big_endian=false; String filename=null; boolean sound=true; boolean help=true; for (int i=0; i<args.length; i++) { if (args[i].equals("-h")) { break; } if (i==0) { port=Integer.parseInt(args[i]); help=false; continue; } if (args[i].equals("-F") && args.length>(i+1)) { sound=false; filename=args[++i]; continue; } if (args[i].equals("-S") && args.length>(i+2)) { sample_rate=Integer.parseInt(args[++i]); sample_size=Integer.parseInt(args[++i]); continue; } if (args[i].equals("-Z")) { linear_signed=true; continue; } if (args[i].equals("-U")) { pcmu=true; continue; } if (args[i].equals("-E")) { big_endian=true; continue; } // else, do: System.out.println("unrecognized param '"+args[i]+"'\n"); help=true; } if (help) { System.out.println("usage:\n java AudioReceiver <local_port> [options]"); System.out.println(" options:"); System.out.println(" -h this help"); System.out.println(" -F <audio_file> records to audio file"); System.out.println(" -S <rate> <size> sample rate [B/s], and size [B]"); System.out.println(" -Z uses PCM linear signed format (linear unsigned is used as default)"); System.out.println(" -U uses PCMU format"); System.out.println(" -E uses big endian format"); System.exit(0); } AudioFormat.Encoding codec; if (pcmu) codec=AudioFormat.Encoding.ULAW; else if (linear_signed) codec=AudioFormat.Encoding.PCM_SIGNED; else codec=AudioFormat.Encoding.PCM_UNSIGNED; try { RtpStreamReceiver receiver; AudioOutput audio_output=null; if (sound) AudioOutput.initAudioLine(); if (sound) { AudioFormat format=new AudioFormat(codec,sample_rate,8*sample_size,1,sample_size,sample_rate,big_endian); audio_output=new AudioOutput(format); receiver=new RtpStreamReceiver(audio_output.getOuputStream(),port); } else //if (filename!=null) { File file=new File(filename); /* AudioFileFormat format=AudioSystem.getAudioFileFormat(file); System.out.println("File audio format: "+format); OutputStream output_stream=new OutputStream() { public void write(int b) {} }; receiver=new RtpStreamReceiver(output_stream,port); */ FileOutputStream output_stream=new FileOutputStream(file); receiver=new RtpStreamReceiver(output_stream,port); } receiver.start(); if (sound) audio_output.play(); System.out.println("Press 'Return' to stop"); System.in.read(); receiver.halt(); if (sound) audio_output.stop(); if (sound) AudioOutput.closeAudioLine(); } catch (Exception e) { e.printStackTrace(); } } }