我有一个循环,其中有一个mp3文件的过滤器,但是当我想要获得文件的持续时间为8-10秒时,我尝试了Mediaplayer.create,get.Duration,MediaMetadaretrieve和Mediaplayer.setDatasource.get.Duration,但是他们花费了8-10秒,除了会崩溃的Mediaplayer.setDatasource之外,
File scan;
File[]list;
String song_path;
int posicion;
int minutes;
int seconds;
ArrayList<String>Song_list=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView text=(TextView)findViewById(R.id.text);
metada=new MediaMetadataRetriever();
scan= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
list=scan.listFiles();
for(File files:list){
if(files.getName().endsWith("mp3")){
song_path=String.valueOf(files.getAbsolutePath());
Song_list.add(song_path);
metada.setDataSource(MainActivity.this,Uri.parse(song_path));
String dutation=metada.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
posicion=Integer.parseInt(dutation)/1000;
minutes=posicion/60;
seconds=posicion%60;
text.setText(minutes+":"+seconds+text.getText());
/*player=MediaPlayer.create(MainActivity.this,Uri.parse(song_path));
posicion=player.getDuration()/1000;
minutes=posicion/60;
seconds=posicion/60;
text.setText(minutes+":"+seconds+text.getText());*/
}
}
}}
我知道代码Media.create和metada.extracMetada是他们花了很多时间,谢谢大家的关注
发布于 2017-04-08 18:02:55
您可以使用AudioFileIO Java类读取和撤回文件数据。
在For循环中,您可以使用以下方法:
AudioFile myMp3 = AudioFileIO.read(files);
duration = myMp3.getAudioHeader().getTrackLength(); 发布于 2017-04-08 18:05:42
我建议您使用ExoPlayer,它也是由Android编写的,在获取音频mp3文件的持续时间上花费的时间要短得多。它更好的实现和播放文件从url以及本地文件。此外,您还可以为任何视图定制它,并有各种类型的侦听器。https://developer.android.com/guide/topics/media/exoplayer.html
https://stackoverflow.com/questions/43298464
复制相似问题