• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 3796
  • Last Modified:

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.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
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.getAudioInputStream(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(SourceDataLine.class, af);

if (!AudioSystem.isLineSupported(info))
{
System.out.println("unsupported 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("Channels : " + channels);

bps = af.getSampleSizeInBits();
System.out.println("Bits per sample : " + bps);

times = (double)(length / (frameRate * channels * bps / 8));
System.out.println("Duration 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.getMicrosecondPosition();
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.toString());
}
System.exit(0);
}
}
0
peaches4416
Asked:
peaches4416
1 Solution
 
MereteCommented:
Hi  I'm no expert in Java as this is really just multimedia programming
you might consider reposting this in java languages peaches4416,
  just googled   ;)
http://www.tek-tips.com/viewthread.cfm?qid=1358705&page=9

Java Sound, Audio File Conversion
http://www.developer.com/java/other/article.php/3071021
hope it helps you anyway.
0
 
zzynxSoftware engineerCommented:
peaches4416,

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
http://www.experts-exchange.com/Programming/Languages/Java/New_to_Java/Q_22877463.html
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now