【发布时间】:2016-02-10 03:41:28
【问题描述】:
我制作了一个 FileChooser 程序来获取 .wav 文件的文件路径,但现在我想添加另一个条件。我只想获取最多 5 分钟的 wav 文件的文件路径。我该怎么做呢?
【问题讨论】:
标签: java jfilechooser filefilter
我制作了一个 FileChooser 程序来获取 .wav 文件的文件路径,但现在我想添加另一个条件。我只想获取最多 5 分钟的 wav 文件的文件路径。我该怎么做呢?
【问题讨论】:
标签: java jfilechooser filefilter
如果您使用的是JAudioTagger ,您可以像下面这样简单地获得以秒为单位的准确持续时间。
File target = new File("E:\\sample.wav");
AudioFile af = AudioFileIO.read(target);
AudioHeader ah = af.getAudioHeader();
System.out.println( ah.getTrackLength());
这是一个完整的示例代码
import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.AudioFileIO;
import org.jaudiotagger.audio.AudioHeader;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/**
* Created by RAGINROSE on 9/20/2019.
*/
public class AudioTest {
public static void main(String[] args) {
try {
SimpleDateFormat timeInFormat = new SimpleDateFormat("ss", Locale.UK);
SimpleDateFormat timeOutFormat = new SimpleDateFormat("mm:ss", Locale.UK);
SimpleDateFormat timeOutOverAnHourFormat = new SimpleDateFormat("kk:mm:ss", Locale.UK);
String duratin;
File target = new File("E:\\sample.wav");
AudioFile f = AudioFileIO.read(target);
AudioHeader ah = f.getAudioHeader();
long trackLength = (long)ah.getTrackLength();
Date timeIn;
synchronized(timeInFormat) {
timeIn = timeInFormat.parse(String.valueOf(trackLength));
}
if(trackLength < 3600L) {
synchronized(timeOutFormat) {
duratin = timeOutFormat.format(timeIn);
}
} else {
synchronized(timeOutOverAnHourFormat) {
duratin = timeOutOverAnHourFormat.format(timeIn);
}
}
System.out.println("Duration in Integer : " + trackLength);
System.out.println("Duration in String : " +duratin);
} catch (Exception e) {
e.printStackTrace();
}
}
}
别忘了添加依赖
<dependency>
<groupId>net.jthink</groupId>
<artifactId>jaudiotagger</artifactId>
<version>2.2.3</version>
</dependency>
支持的格式是
ogg、mp3、flac、mp4、m4a、m4p、wma、wav、ra、rm、m4b 和 aif
希望这对某人有所帮助。
【讨论】:
您可以通过知道文件大小(以 MB 为单位)然后知道文件的比特率来做到这一点。跟我来看看这个 MP3 示例:
MP3 Filesize: 3.89MBytes
Bitrate: 128Kbits
将 Mbytes 转换为 Kbits:
3.89Mbytes * 1024 = 3983Kbytes
3989Kbytes * 8 = 31866Kbits
将 Kbits 转换为长度:
31866Kbits / 128Kbits per second = 249 seconds
249 seconds / 60 seconds = 4.19 Minutes
请注意,它仍然不能准确表示持续时间,您必须考虑计算中的一些差异。
【讨论】:
getDuration()。