在Android

时间:2015-07-23 03:11:37

标签: java android audio cocos2d-x-3.0

我无法在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
  • android.resource://com.package.name/assets/Assets/sounds/_TESTSOUNDWAVE.wav

我正在使用Cocos2D-x v3.6。没有固有的(工作的,afaik)方式来获取音频文件的持续时间(尝试使用AudioEngine)。 上面的代码来自于Cocos2D-x的C ++端通过JNI调用的活动的静态方法。

1 个答案:

答案 0 :(得分:0)

原来Cocos2D-x以某种方式给了我不正确的资产文件路径!我使用单例File-something-class来获取C ++端的确切路径,并将这些路径发送到平台端(iOS或Android)。一直在iOS上工作。出于某种原因,它无法与Android合作。

Android端的工作路径为:资产/声音/ _TTSTSOUNDWAVE.wav

我必须专门删除" assets /"从字符串的开头(fullpath = fullpath.replaceAll("^assets/", "");)。我的设置可能会很有趣,或者Cocos2d-x中存在问题。谁知道呢。

我如何确定准确的路径是递归列出捆绑中的所有内容:How can I get a directory listing of resources from my Android app?