# frage zu der mp3spi



## Nao88 (24. Sep 2010)

ich habe in diesem Moment Probleme herauszufinden an welcher stelle das Lied ist wenn ich es abspiele und dann weiß ich nicht wie ich das Lied an einer bestimmten Position starten kann 

hier ein link der spi 
MP3 SPI for Java Sound

als Beispiel kann man sich mal den Beispiel Code ansehen


```
import javax.sound.sampled.*;
import java.io.*;

[...]

public void testPlay(String filename)
{
  try {
    File file = new File(filename);
    AudioInputStream in= AudioSystem.getAudioInputStream(file);
    AudioInputStream din = null;
    AudioFormat baseFormat = in.getFormat();
    AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
                                                                                  baseFormat.getSampleRate(),
                                                                                  16,
                                                                                  baseFormat.getChannels(),
                                                                                  baseFormat.getChannels() * 2,
                                                                                  baseFormat.getSampleRate(),
                                                                                  false);
    din = AudioSystem.getAudioInputStream(decodedFormat, in);
    // Play now.
    rawplay(decodedFormat, din);
    in.close();
  } catch (Exception e)
    {
        //Handle exception.
    }
}

private void rawplay(AudioFormat targetFormat, AudioInputStream din) throws IOException,                                                                                                LineUnavailableException
{
  byte[] data = new byte[4096];
  SourceDataLine line = getLine(targetFormat);
  if (line != null)
  {
    // Start
    line.start();
    int nBytesRead = 0, nBytesWritten = 0;
    while (nBytesRead != -1)
    {
        nBytesRead = din.read(data, 0, data.length);
        if (nBytesRead != -1) nBytesWritten = line.write(data, 0, nBytesRead);
    }
    // Stop
    line.drain();
    line.stop();
    line.close();
    din.close();
  }
}

private SourceDataLine getLine(AudioFormat audioFormat) throws LineUnavailableException
{
  SourceDataLine res = null;
  DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
  res = (SourceDataLine) AudioSystem.getLine(info);
  res.open(audioFormat);
  return res;
}

[...]
```

vielen dank für die Hilfe


----------



## Ralph-Uwe (28. Sep 2010)

Hallo Nao88,

innerhalb der While-Scheife kannst Du mit 

```
line.getMicrosecondPosition()
```
die aktuelle Position abfragen.

Mit ein bisschen Umrechnen kannst Du die Min. und Sec. ermitteln.

Ich würde Dir noch empfehlen einen Thread um das Abspielen zu legen.


----------



## Gast2 (28. Sep 2010)

Noch ein Tip:

[JAVA=24]
} catch (Exception e)
    {
        //Handle exception.
        e.printStackTrace();     
    }
[/code]

Niemals die catch Blöcke leer lassen. Sonst wirst du dich bei unerwarteten Fehlern totsuchen. Schreib zumindest die Fehlermeldung raus.


----------

