Avatar billede hyberpreprocessor Nybegynder
22. april 2005 - 11:55 Der er 8 kommentarer og
1 løsning

Kan ikke kører andre ting mens en metode er aktiv.

Hej

Jeg 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.
Avatar billede arne_v Ekspert
22. april 2005 - 11:57 #1
Det lyder som om at du skal starte en tråd
Avatar billede kalp Novice
22. april 2005 - 12:01 #2
hmm det her er måske en mp3 klasse?
http://www.geocities.com/zavorine/epoc/mp3_sdk_java.htm
Avatar billede hyberpreprocessor Nybegynder
22. april 2005 - 12:10 #3
Er gået i gang med multithreading tutorial :)

kalp, vil lige checke den ud (selvom det ser ud til at den kræver en driver som ikke er tilgængelig mere :] )
Avatar billede kalp Novice
22. april 2005 - 12:28 #4
Avatar billede hyberpreprocessor Nybegynder
22. april 2005 - 16:01 #5
damn, fatter intet af multithread.

Så vidt jeg kan se er det bare at skrive new noget(); men det virker ikke :(

Mht. http://java.sun.com/products/java-media/jmf/mp3/download.html ser det rigtig godt ud, men det vil (ligesom alle andre java-pakker,plugins,libs) ikke virke på nogen som helst måde.
Avatar billede arne_v Ekspert
22. april 2005 - 17:20 #6
Avatar billede hyberpreprocessor Nybegynder
22. april 2005 - 18:53 #7
næ, har kun kigget på suns tutorial, prøver lige din så :)
Avatar billede hyberpreprocessor Nybegynder
26. april 2005 - 02:43 #8
ye, multithreadinger er nicer :D

points til arne_v
Avatar billede arne_v Ekspert
26. april 2005 - 07:11 #9
så ligger jeg et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester