2017-04-08 68 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

我會研究它 –

相關問題