<< Chapter < Page Chapter >> Page >

.....

Listing 11 . The class named ToneMono.
/*File ToneMono.java Copyright 2014, R.G.BaldwinRevised 08/22/14 This class that can be used to create a melody consisting of a single puresinusoidal tone at 1000 Hz. The class introduces the use of ByteBuffer.******************************************************************************/ import java.io.*;import java.nio.*; import java.util.*;public class ToneMono extends AudioSignalGenerator02{public ToneMono(AudioFormatParameters01 audioParams, String[]args, byte[]melody){ super(audioParams,args,melody);}//end constructor //-------------------------------------------------------------------------////This method generates a three-second pure sinusoidal tone. A 1000 Hz tone// is emitted with equal amplitude from the left and right speakers. It is // interesting to compare this sound with the sound of a square wave with// the same fundamental frequency. byte[]getMelody(){ //Recall that the default is channels=1 for monaural.System.out.println("audioParams.channels = " + audioParams.channels);//Each channel requires two 8-bit bytes per 16-bit sample. int bytesPerSampPerChan = 2;//Override the default sample rate. Allowable sample rates are 8000,11025,// 16000,22050,44100 samples per second. audioParams.sampleRate = 8000.0F;// Set the length of the melody in secondsdouble lengthInSeconds = 3.0;//Set the frequency of the tone. double freq = 1000.0;//Create an output data array sufficient to contain the tone// at "sampleRate" samples per second, "bytesPerSampPerChan" bytes per // sample per channel and "channels" channels.melody = new byte[(int)(lengthInSeconds*audioParams.sampleRate* bytesPerSampPerChan*audioParams.channels)]; System.out.println("melody.length = " + melody.length);//Prepare a ByteBuffer for usebyteBuffer = ByteBuffer.wrap(melody); //Compute the number of audio samples in the melody.int sampLength = (int)(lengthInSeconds*audioParams.sampleRate);//Compute the audio sample values and deposit them in the output array. for(int cnt = 0; cnt<sampLength; cnt++){ //Compute the time in seconds for this sample.double time = cnt/audioParams.sampleRate; //Deposit audio data for both channels in mono.byteBuffer.putShort((short)(8000*Math.sin(2*Math.PI*freq*time))); }//end for loopreturn melody;}//end method getMelody //-------------------------------------------------------------------------//}//end class ToneMono //===========================================================================//

.....

Listing 12 . The class named TonesStereo.
/*File TonesStereo.java Copyright 2014, R.G.BaldwinRevised 08/19/14 This class that can be used to create a melody consisting of two tones atdifferent frequencies emitted from the left and right stereo speakers. ******************************************************************************/import java.io.*; import java.nio.*;import java.util.*; public class TonesStereo extends AudioSignalGenerator02{public TonesStereo(AudioFormatParameters01 audioParams,String[] args,byte[] melody){super(audioParams,args,melody); }//end constructor//-------------------------------------------------------------------------////This method generates a pair of three-second tones in stereo. //A 261.63 (middle-C) tone is emitted from the left speaker and a higher// frequency tone is emitted from the right speaker. byte[]getMelody(){ //Set the audio parameters to stereo overriding the default value.audioParams.channels = 2; System.out.println("audioParams.channels = " + audioParams.channels);//Each channel requires two 8-bit bytes per 16-bit sample. int bytesPerSampPerChan = 2;//Override the default sample rate. Allowable sample rates are 8000,11025,// 16000,22050,44100 samples per second. audioParams.sampleRate = 8000.0F;// Set the length of the melody in secondsdouble lengthInSeconds = 3.0;//Set the primary tone frequency. double freq = 261.63;//middle C//Create an output data array sufficient to contain the tone// at "sampleRate" samples per second, "bytesPerSampPerChan" bytes per // sample per channel and "channels" channels.melody = new byte[(int)(lengthInSeconds*audioParams.sampleRate* bytesPerSampPerChan*audioParams.channels)]; System.out.println("melody.length = " + melody.length);//Prepare a ByteBuffer for usebyteBuffer = ByteBuffer.wrap(melody); //Compute the number of audio samples in the melody.int sampLength = (int)(lengthInSeconds*audioParams.sampleRate);//Compute the audio sample values and deposit them in the output array. for(int cnt = 0; cnt<sampLength; cnt++){ //Compute the time in seconds for this sample.double time = cnt/audioParams.sampleRate; //Deposit audio data for the first (left) channelbyteBuffer.putShort((short)(8000*Math.sin(2*Math.PI*freq*time)));//Deposit audio data at a different frequency in the second (right) // channel.byteBuffer.putShort((short)(8000*Math.sin(2*Math.PI*freq*time*2.2))); }//end for loopreturn melody;}//end method getMelody //-------------------------------------------------------------------------//}//end class TonesStereo //===========================================================================//

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Accessible objected-oriented programming concepts for blind students using java. OpenStax CNX. Sep 01, 2014 Download for free at https://legacy.cnx.org/content/col11349/1.17
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Accessible objected-oriented programming concepts for blind students using java' conversation and receive update notifications?

Ask