JLayer, długość utworu

0

Witam,
korzystając z bibliotek JLayer, odtwarzam mp3 w ten sposób:

public class sound implements Runnable {
    private File file;
    private AdvancedPlayer player; private AudioDevice device;
    public int position = 0;
    private Thread thread = null;

    public sound(File f) {
        this.file = f;
    }

    public void play() {
	try {
            InputStream is = new BufferedInputStream(new FileInputStream(file));
            FactoryRegistry r = FactoryRegistry.systemRegistry();

            device = r.createAudioDevice();
            player = new AdvancedPlayer(is, device);

            thread = new Thread(this);
            thread.start(); 
	} catch (JavaLayerException e) {e.printStackTrace();}
        catch (FileNotFoundException e){
            e.printStackTrace();
	}
    }

    public void run() {
 	try {
                  player.play(position, Integer.MAX_VALUE);
	} catch(Exception exp) {
                  exp.printStackTrace();
	}
    }
}

a pausuje w ten sposób:

public void pause() {
    int positionInMillis = device.getPosition();
    position += positionInMillis / 26;

    player.stop(); 
}

Pytanie: w jaki sposób mogę odczytać długość (chociażby w milisekundach) odtwarzanego pliku? Chodzi mi o możliwość wyświetlania czasu trwania tracka w sposób: actualTime/fullTime oraz przeniesienie na suwak, czy progressBar. Wiem jednak tylko w jaki sposób odczytać aktualny czas (z metody pause()):
int positionInMillis = device.getPosition();, potrzebuje jeszcze tej drugiej wartości. Ma ktoś jakiś pomysł?

pozdrawiam.

1

Np taką metodą:

private void podajDlugoscMp3(InputStream input){
        
        Bitstream bStream = new Bitstream(input);
        Header head;
        try {
            
            head = bStream.readFrame();
            float ms = head.total_ms(input.available());
            float sec = ms / 1000;
            System.out.printf("Liczba minut: %.2f\n", sec / 60);
            
            r = FactoryRegistry.systemRegistry();
            
        } catch (BitstreamException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1