Kan ikke kører andre ting mens en metode er aktiv.
HejJeg er ved at lave en mp3 afspiller (som indtil videre kun kan spille wav filer af)
Problemet er når metoden play(filenavn) kører, så kan jeg ikke gøre andet. (Metoden bruges i et andet program, hvor layout,knapper ect. er i). Jeg vil gerne gøre andre ting imens filen bliver afspillet, men har ingen ide om hvordan det skal kodes.
Her er koden indtil videre:
import java.io.File;
import java.io.IOException;
import java.math.*;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
public class SimpleAudioPlayer
{
private static final int EXTERNAL_BUFFER_SIZE = 128000;
private static float soundlength = 0;
private static final long start_tid = System.currentTimeMillis();
private static long nu_tid;
public float getSoundlenght()
{
return soundlength;
}
public static void play(String filename)
{
String strFilename = filename;
File soundFile = new File(strFilename);
AudioInputStream audioInputStream = null;
try
{
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
}
catch (Exception e)
{
e.printStackTrace();
System.exit(1);
}
AudioFormat audioFormat = audioInputStream.getFormat();
SourceDataLine line = null;
DataLine.Info info = new DataLine.Info(SourceDataLine.class,audioFormat);
try
{
line = (SourceDataLine) AudioSystem.getLine(info);
line.open(audioFormat);
// test.wav er 229 sek.
long FrameLength = audioInputStream.getFrameLength();
float FrameRate = audioInputStream.getFormat().getFrameRate();
soundlength = FrameLength / FrameRate;
}
catch (LineUnavailableException e)
{
e.printStackTrace();
System.exit(1);
}
catch (Exception e)
{
e.printStackTrace();
System.exit(1);
}
line.start();
int nBytesRead = 0;
byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];
System.out.println("Playing:");
while (nBytesRead != -1)
{
try
{
nBytesRead = audioInputStream.read(abData, 0, abData.length);
nu_tid = (System.currentTimeMillis() - start_tid)/1000;
//System.out.println(nu_tid);
}
catch (IOException e)
{
e.printStackTrace();
}
if (nBytesRead >= 0)
{
int nBytesWritten = line.write(abData, 0, nBytesRead);
}
}
line.drain();
line.close();
}
}
P.S. Hvis nogen kender en metode at få java til at understøtte mp3 vil jeg da gerne høre det, kan nemlig ikke få javazoom til at virke.