获取持续时间音频需要8到10秒,最好的方法是什么?

时间:2017-04-08 17:55:04

标签: java android multithreading

我有一个循环,其中有一个过滤到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他们花了很多时间,感谢您的关注

2 个答案:

答案 0 :(得分:0)

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

For循环中的示例您可以使用此代替:

Exception in thread "main" java.lang.IllegalArgumentException: Not a file or directory: E:\Selenium-Project\cucumberDemo\--plugin
at cucumber.runtime.io.FileResourceIterator$FileIterator.<init>(FileResourceIterator.java:54)
at cucumber.runtime.io.FileResourceIterator.<init>(FileResourceIterator.java:20)
at cucumber.runtime.io.FileResourceIterable.iterator(FileResourceIterable.java:19)
at cucumber.runtime.model.CucumberFeature.load(CucumberFeature.java:38)
at cucumber.runtime.RuntimeOptions.cucumberFeatures(RuntimeOptions.java:117)
at cucumber.runtime.Runtime.run(Runtime.java:92)
at cucumber.api.cli.Main.run(Main.java:20)
at cucumber.api.cli.Main.main(Main.java:12)

答案 1 :(得分:0)

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