是否有可能获得原始文件夹中的声音持续时间,并将其转换为字符串数组? 事情是这样的:获取原始文件夹中歌曲的歌曲持续时间并将其转换为字符串数组?
Sound1例子时间:00:10秒
SOUND2持续时间:02:31sec
..
sound1235持续时间:00:31sec
,并转换到这
String[] soundDuration = { "00:10","02:31"...."00:31"};
是否有可能获得原始文件夹中的声音持续时间,并将其转换为字符串数组? 事情是这样的:获取原始文件夹中歌曲的歌曲持续时间并将其转换为字符串数组?
Sound1例子时间:00:10秒
SOUND2持续时间:02:31sec
..
sound1235持续时间:00:31sec
,并转换到这
String[] soundDuration = { "00:10","02:31"...."00:31"};
我相信这是
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首歌曲,并非原始文件夹中的所有文件。 Ps。抱歉,迟到的回应,我以为我已经回复了你的帖子。 – 2015-03-18 13:07:57
我还没有测试此代码...希望这会给你的想法
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 ;
}
它确实给了我一个主意,但它没有奏效。你写的代码有一些我不知道如何解决的错误。 – 2015-03-18 13:11:10
是的,这是可能的。 – Henry 2015-03-13 17:26:48