Java 获取Android上音频文件的持续时间

Java 获取Android上音频文件的持续时间,java,android,audio,cocos2d-x-3.0,Java,Android,Audio,Cocos2d X 3.0,我无法在Android上获取捆绑音频文件的持续时间 我试过这个: String stringDuration; MediaMetadataRetriever mmr = new MediaMetadataRetriever(); try { mmr.setDataSource(fullpath); stringDuration = mmr.extractMetadata(MediaMetadataRe

我无法在Android上获取捆绑音频文件的持续时间

我试过这个:

        String stringDuration;
        MediaMetadataRetriever mmr = new MediaMetadataRetriever();
        try {
            mmr.setDataSource(fullpath);
            stringDuration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
        }
        catch (IllegalArgumentException e) {
            debugalert("androidbridgeGetdurationofsound IllegalArgumentException error getting duration: " + e.getMessage());
            return 0;
        }
        catch (Exception e) {
            debugalert("androidbridgeGetdurationofsound Exception error getting duration: " + e.getMessage());
            return 0;
        }
        finally {
            mmr.release();
        }
它总是以IllegalArgumentException异常失败。我不确定路径是否不正确(尝试了一些变体),该MediaMetadataRetriever类不支持该媒体(尝试了m4a和wav)或其他什么。音频本身在Android上播放效果很好

我尝试过的几种路径变体有:

  • 资产/资产/声音/_TESTSOUNDWAVE.wav
  • 安卓。resource://com.package.name/assets/Assets/sounds/_TESTSOUNDWAVE.wav
我正在使用Cocos2D-xv3.6。没有内在的(工作的,afaik)方式来获取音频文件的持续时间(尝试使用AudioEngine)。
上面的代码是从C++方法中的一个静态方法中调用的,它来自COCOS2D-X../P>< P>的C++侧,结果COCOX2D X给了我一些不正确的资产文件路径。我使用Sigelon文件类来获取C++侧的精确路径,并将这些路径发送到平台侧(IOS或Android)。总是在iOS上工作。由于某种原因,它不能与Android一起工作

Android端的工作路径是:Assets/sounds/\u TESTSOUNDWAVE.wav

我必须特别删除字符串开头的“assets/”(
fullpath=fullpath.replaceAll(“^assets/”,”);
)。我的设置可能有点搞笑,或者Cocos2d-x有问题。谁知道呢


我是如何计算出确切路径的,是递归地列出捆绑包中的所有内容的:

结果Cocos2D-x不知何故给了我到资产文件的不正确的确切路径!我使用Sigelon文件类来获取C++侧的精确路径,并将这些路径发送到平台侧(IOS或Android)。总是在iOS上工作。由于某种原因,它不能与Android一起工作

Android端的工作路径是:Assets/sounds/\u TESTSOUNDWAVE.wav

我必须特别删除字符串开头的“assets/”(
fullpath=fullpath.replaceAll(“^assets/”,”);
)。我的设置可能有点搞笑,或者Cocos2d-x有问题。谁知道呢

我如何计算出确切的路径是递归地列出捆绑包中的所有内容: