繁体   English   中英

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

[英]Get duration of audio file on Android

我无法获得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。 没有固有的(有效的,有效的)方法来获取音频文件的持续时间(使用AudioEngine进行尝试)。 上面的代码来自Cocos2D-x的C ++端通过JNI调用的活动的静态方法。

原来Cocos2D-x不知何故给了我指向资产文件的不正确确切路径! 我使用单例File-something-class来获取C ++端的确切路径,并将这些路径发送到平台端(iOS或Android)。 始终在iOS上运行。 由于某些原因,它不适用于Android。

Android方面的工作路径是: Assets / sounds / _TESTSOUNDWAVE.wav

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

我如何确定确切的路径是递归列出捆绑中的所有内容: 如何从Android应用程序中获取资源的目录列表?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM