Sound Demo 3

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<code hidden>
javax.sound.sampled.AudioFormat audioFormat;
javax.sound.sampled.AudioInputStream audioInputStream;
javax.sound.sampled.SourceDataLine sourceDataLine;

float sampleRate = 16000.0F;
int sampleSizeInBits = 16;
int channels = 1;
boolean signed = true;
boolean bigEndian = true;
byte audioData[] = new byte[16000*8];

void play(){
try{
InputStream byteArrayInputStream =  new ByteArrayInputStream(audioData);
audioFormat = new javax.sound.sampled.AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian);
audioInputStream = new javax.sound.sampled.AudioInputStream(byteArrayInputStream, audioFormat, audioData.length / audioFormat.getFrameSize());
javax.sound.sampled.DataLine.Info dataLineInfo = new javax.sound.sampled.DataLine.Info(javax.sound.sampled.SourceDataLine.class, audioFormat);

sourceDataLine = (javax.sound.sampled.SourceDataLine)javax.sound.sampled.AudioSystem.getLine(dataLineInfo);
sourceDataLine.open(audioFormat);
sourceDataLine.start();
byte playBuffer[] = new byte[16384];
int cnt;
while ((cnt = audioInputStream.read(playBuffer, 0,playBuffer.length))!= -1)
  if (cnt > 0)
    sourceDataLine.write(playBuffer, 0, cnt);
sourceDataLine.drain();
sourceDataLine.stop();
sourceDataLine.close();
}
catch (Exception e){e.printStackTrace();System.exit(0);}
}
void fillBuffer(){
 java.nio.ByteBuffer byteBuffer;
 java.nio.ShortBuffer shortBuffer;
 int byteLength;
 byteBuffer = java.nio.ByteBuffer.wrap(audioData);
 shortBuffer = byteBuffer.asShortBuffer();
 byteLength = audioData.length;

 channels = 1;//Java allows 1 or 2
 int bytesPerSamp = 2;
 sampleRate = 16000.0F;
 int sampLength = byteLength / bytesPerSamp;

 for (int cnt = 0; cnt < sampLength; cnt++){
  double time = cnt / sampleRate;
  double freq = 1000*playFunction(time);
  shortBuffer.put((short)(16000 * sinValue));
 }//end for loop
}

</code>

<eval>
double playFunction(int x){
  return (Math.sin((x * 3) * (x * 3)));
}

play();
</eval>