I use getDuration on a local MP3file successfully, but when getDuration on a remote MP3stream results in an error: java.io.IOException: mark/reset not supported.
Successful getDuration on local MP3:
public static void getDurationOff() throws UnsupportedAudioFileException, IOException {
int sumtime = 0;
File file = new File("D:\\java\\MusicMP3\\src\\Images\\Water_Lily.mp3");
AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(file);
if (fileFormat instanceof TAudioFileFormat) {
Map<?, ?> properties = ((TAudioFileFormat) fileFormat).properties();
Long microseconds = (Long) properties.get("duration");
//total seconds
sumtime = (int)(microseconds / 1000000);
System.out.println("Total seconds :"+sumtime);
}
}
Failed getDuration on remote MP3:
public static void getDurationOn() throws UnsupportedAudioFileException, IOException {
int sumtime = 0;
String linkonline="http://api.mp3.zing.vn/api/mobile/source/song/LmJnykGNlNmnNkuTZvctbGZm";
URLConnection urlConnection = new URL(linkonline).openConnection();
urlConnection.connect();
AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(urlConnection.getInputStream());
if (fileFormat instanceof TAudioFileFormat) {
Map<?, ?> properties = ((TAudioFileFormat) fileFormat).properties();
Long microseconds = (Long) properties.get("duration");
//total seconds
sumtime = (int)(microseconds / 1000000);
System.out.println("Total seconds :"+sumtime);
}
}
Error:
Exception in thread "main" java.io.IOException: mark/reset not
supported at
sun.net.www.http.KeepAliveStream.reset(KeepAliveStream.java:122) at
java.io.FilterInputStream.reset(FilterInputStream.java:226) at
sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.reset(HttpURLConnection.java:3299)
at
org.tritonus.share.sampled.file.TAudioFileReader.getAudioFileFormat(TAudioFileReader.java:184)
at
javax.sound.sampled.AudioSystem.getAudioFileFormat(AudioSystem.java:1004)
at musicmp3.demoGetlink.getDurationOn(demoGetlink.java:99) at
musicmp3.demoGetlink.main(demoGetlink.java:118) Java Result: 1