peaches4416
asked on
CREATING A JAVA PROGRAM TO VIEW WAVE FILES
I am in a Data structures class and am working on a project which requires the information below.
PROBLEM;
Develop a working Java program that opens DSCLIP.WAV file, and displays the file header content, searches the data area for the minimum (most negative) and maximum (most positive) samples, and then displays the results. The hexadecimal address of the sample within the WAV file must also be displayed, as in this example (not actual) result:
The maximum value 7F hex is located at address 1E7A hex within the file.
So far i only have come up with the following code; PLEASE HELP!!!! My course book is really bad and does me no good. I know there are experts here that can help please help me.
CODE;
import java.io.File;
import javax.sound.sampled.AudioF ormat;
import javax.sound.sampled.AudioI nputStream ;
import javax.sound.sampled.AudioS ystem;
import javax.sound.sampled.DataLi ne;
import javax.sound.sampled.Source DataLine;
import java.io.BufferedInputStrea m;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundExcept ion;
import java.io.IOException;
/* Play a *.wav or *.au file */
public class test
{
/*Play a *.wav or *.au file
@param args args[0] on command line is name of file to play
*/
static int frameSample;
static int timeofFrame;
static int N;
static int runTimes;
static int bps;
static int channels;
static double times;
static int bufSize;
static int frameSize;
static int frameRate;
static long length;
public static void main(String[] args)
{
try
{
AudioInputStream ais = AudioSystem.getAudioInputS tream(new File(args[0]));
AudioInputStream a;
File file = new File(args[0]); /*To get the file size*/
length = file.length();
System.out.println("File size : " + length);
AudioFormat af = ais.getFormat();
DataLine.Info info = new DataLine.Info(SourceDataLi ne.class, af);
if (!AudioSystem.isLineSuppor ted(info))
{
System.out.println("unsupp orted line");
System.exit(0);
}
frameRate = (int)af.getFrameRate();
System.out.println("Frame Rate: " + frameRate);
frameSize = af.getFrameSize();
System.out.println("Frame Size: " + frameSize);
bufSize = frameRate * frameSize / 10;
System.out.println("Buffer Size: " + bufSize);
channels = af.getChannels();
System.out.println("Channe ls : " + channels);
bps = af.getSampleSizeInBits();
System.out.println("Bits per sample : " + bps);
times = (double)(length / (frameRate * channels * bps / 8));
System.out.println("Durati on of the songs : " + times +" seconds");
byte[] data2 = new byte[bufSize];
int bytesRead2;
timeofFrame = 20; //20ms
frameSample = (timeofFrame * frameRate) / 1000;
N = frameSample;
runTimes = (int) (times * 1000) / 20;
byte[] data = new byte[bufSize];
int bytesRead;
/*SourceDataLine line = (SourceDataLine)
AudioSystem.getLine(info);
line.open(af, bufSize);
line.start();
while ((bytesRead = ais.read(data, 0, data.length)) != -1)
line.write(data, 0, bytesRead);
line.drain();
line.stop();
long time = line.getMicrosecondPositio n();
System.out.println("time by playing " + time);
line.close();*/
int[][] freq = new int[runTimes][N];
int temp=0;
/* Want to read the data of the wav and do the DFT later, but i don't know how to read data and save it correctly?"
for (int i = 0; i < runTimes; i++)
//for(int j=0;j<N;j++)
{
a.read(freq[i], j, N);
j = N;
}
*/
FileInputStream fis = null;
BufferedInputStream bis = null;
DataInputStream dis = null;
fis = new FileInputStream(file);
// Here BufferedInputStream is added for fast reading.
bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
// dis.available() returns 0 if the file does not have more lines.
while (dis.available() != 0) {
// this statement reads the line from the file and print it to the console.
for (int i = 0; i < 1; i++)
for(int j=0;j<N;j++)
{
freq[i][j] = (int)dis.readByte();
}
}
System.out.println(freq[0] [0]);
// dispose all the resources after using them.
fis.close();
bis.close();
dis.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
/*for (int i = 0; i < 10; i++)
//for(int j=0;j<N;j++)
{
freq[i] = a.read(file);
//j = N;
}
System.out.println(freq[0] );
*/
catch (Exception e)
{
System.out.println(e.toStr ing());
}
System.exit(0);
}
}
PROBLEM;
Develop a working Java program that opens DSCLIP.WAV file, and displays the file header content, searches the data area for the minimum (most negative) and maximum (most positive) samples, and then displays the results. The hexadecimal address of the sample within the WAV file must also be displayed, as in this example (not actual) result:
The maximum value 7F hex is located at address 1E7A hex within the file.
So far i only have come up with the following code; PLEASE HELP!!!! My course book is really bad and does me no good. I know there are experts here that can help please help me.
CODE;
import java.io.File;
import javax.sound.sampled.AudioF
import javax.sound.sampled.AudioI
import javax.sound.sampled.AudioS
import javax.sound.sampled.DataLi
import javax.sound.sampled.Source
import java.io.BufferedInputStrea
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundExcept
import java.io.IOException;
/* Play a *.wav or *.au file */
public class test
{
/*Play a *.wav or *.au file
@param args args[0] on command line is name of file to play
*/
static int frameSample;
static int timeofFrame;
static int N;
static int runTimes;
static int bps;
static int channels;
static double times;
static int bufSize;
static int frameSize;
static int frameRate;
static long length;
public static void main(String[] args)
{
try
{
AudioInputStream ais = AudioSystem.getAudioInputS
AudioInputStream a;
File file = new File(args[0]); /*To get the file size*/
length = file.length();
System.out.println("File size : " + length);
AudioFormat af = ais.getFormat();
DataLine.Info info = new DataLine.Info(SourceDataLi
if (!AudioSystem.isLineSuppor
{
System.out.println("unsupp
System.exit(0);
}
frameRate = (int)af.getFrameRate();
System.out.println("Frame Rate: " + frameRate);
frameSize = af.getFrameSize();
System.out.println("Frame Size: " + frameSize);
bufSize = frameRate * frameSize / 10;
System.out.println("Buffer
channels = af.getChannels();
System.out.println("Channe
bps = af.getSampleSizeInBits();
System.out.println("Bits per sample : " + bps);
times = (double)(length / (frameRate * channels * bps / 8));
System.out.println("Durati
byte[] data2 = new byte[bufSize];
int bytesRead2;
timeofFrame = 20; //20ms
frameSample = (timeofFrame * frameRate) / 1000;
N = frameSample;
runTimes = (int) (times * 1000) / 20;
byte[] data = new byte[bufSize];
int bytesRead;
/*SourceDataLine line = (SourceDataLine)
AudioSystem.getLine(info);
line.open(af, bufSize);
line.start();
while ((bytesRead = ais.read(data, 0, data.length)) != -1)
line.write(data, 0, bytesRead);
line.drain();
line.stop();
long time = line.getMicrosecondPositio
System.out.println("time by playing " + time);
line.close();*/
int[][] freq = new int[runTimes][N];
int temp=0;
/* Want to read the data of the wav and do the DFT later, but i don't know how to read data and save it correctly?"
for (int i = 0; i < runTimes; i++)
//for(int j=0;j<N;j++)
{
a.read(freq[i], j, N);
j = N;
}
*/
FileInputStream fis = null;
BufferedInputStream bis = null;
DataInputStream dis = null;
fis = new FileInputStream(file);
// Here BufferedInputStream is added for fast reading.
bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
// dis.available() returns 0 if the file does not have more lines.
while (dis.available() != 0) {
// this statement reads the line from the file and print it to the console.
for (int i = 0; i < 1; i++)
for(int j=0;j<N;j++)
{
freq[i][j] = (int)dis.readByte();
}
}
System.out.println(freq[0]
// dispose all the resources after using them.
fis.close();
bis.close();
dis.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
/*for (int i = 0; i < 10; i++)
//for(int j=0;j<N;j++)
{
freq[i] = a.read(file);
//j = N;
}
System.out.println(freq[0]
*/
catch (Exception e)
{
System.out.println(e.toStr
}
System.exit(0);
}
}
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
You're not allowed to spend more than 500 points for the same question.
Why did you post this anyway? It's just a copy of
https://www.experts-exchange.com/questions/22877463/Java-program-for-opening-a-wav-file-and-display-contents.html