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(); }
}
}