2017-04-08 62 views
0

我有一个循环,其中有一个MP3文件的过滤器,但是当我想要获得文件的持续时间花费8 - 10秒,我尝试了Mediaplayer.create,get.Duration,MediaMetadaretrieve和Mediaplayer.setDatasource.get.Duration,但他们花了8 - 10秒除了Mediaplayer.setDatasource,这将是崩溃了,获取持续时间音频需要8-10秒,获取它的最佳方式是什么?

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他们是谁花了大量的时间,谢谢您注意

+0

查询'MediaStore'而不是自己做所有这些。 – CommonsWare

+0

可以给我一个例子 –

+0

http://stackoverflow.com/q/26619688/115145 http://www.jayrambhia.com/blog/android-audio-cursor – CommonsWare

回答

0

您可以使用AudioFileIO Java类来读取和检索文件数据

例在你的循环中,您可以使用它代替:

AudioFile myMp3 = AudioFileIO.read(files); 
    duration = myMp3.getAudioHeader().getTrackLength(); 
+0

如何在android studio中导入AudioFileIO –

+0

首先下载JAudioTagger库然后将库添加到您的项目,导入它,就是它 –

0

我会建议你使用ExoPlayer这也是由Android和花费较少的时间在获得音频MP3文件的持续时间。这是更好的实施和播放来自url以及本地文件的文件。此外,您还可以为任何视图自定义它,并拥有各种听众。 https://developer.android.com/guide/topics/media/exoplayer.html

+0

我会研究它 –

相关问题