获取原始文件夹中歌曲的歌曲持续时间并将其转换为String数组?

时间:2015-03-13 17:15:12

标签: android audio duration

是否可以在原始文件夹中获取声音的持续时间,并将其转换为字符串数组? 像这样:

sound1持续时间:00:10秒

sound2持续时间:02:31sec

...

sound1235持续时间:00:31秒

并将其转换为

String[] soundDuration = { "00:10","02:31"...."00:31"};

2 个答案:

答案 0 :(得分:2)

我相信这是你正在寻找的:

    Uri mediaPath = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.your_song);
    MediaMetadataRetriever mmr = new MediaMetadataRetriever();
    mmr.setDataSource(this, mediaPath);

然后,使用

访问/保存信息
    String song_duration =mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);

请注意,但是这会以毫秒为单位返回持续时间,因此我相信您可以执行以下操作:

    Integer.parseInt(song_duration);
    song_duration = song_duration / 1000;
    String song_dur_str = "song_duration/60" +":" +"song_duration%60" + "sec"

答案 1 :(得分:0)

我还没有测试过这段代码......希望这会给你一些想法

     private String[][] getAllRawResources() {
          String[][] ids = null ;
          R.raw r = new R.raw() ;

          Field fields[] = R.raw.class.getDeclaredFields() ;
          ids = new String[fields.length][3] ;

          try {
        for( int i=0; i<fields.length; i++ ) {
          Field f = fields[i] ;
          ids[i][0] = f.getInt(r) ;
          ids[i][1] = f.getName();
          Log.i(TAG, "R.raw."+f.getName()+" = 0x"+Integer.toHexString(ids[i])) ;

    Uri mediaPath = Uri.parse(f.getPath());
        MediaMetadataRetriever mmr = new MediaMetadataRetriever();
        mmr.setDataSource(this, mediaPath);
        String song_duration =mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);

Integer.parseInt(song_duration);
    song_duration = song_duration / 1000;
    String song_dur_str = "song_duration/60" +":" +"song_duration%60"
        id[i][2] = song_duration;

            }
          } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
        e.printStackTrace();
          } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }

          return ids ;
        }