首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android上获取音频文件的持续时间

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

Stack Overflow用户
提问于 2015-07-23 03:11:37
回答 1查看 1.7K关注 0票数 1

我无法在Android上获得包内音频文件的持续时间。

我试过这个:

代码语言:javascript
复制
        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类不支持媒体(尝试过MediaMetadataRetriever和wav)。音频本身在Android上播放得很好。

我尝试过的几个路径变体是:

  • 资产/资产/声音/_TESTSOUNWAVE.WAV
  • android.resource://com.package.name/assets/Assets/sounds/_TESTSOUNDWAVE.wav

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-23 04:26:08

原来Cocos2D-x不知何故给了我不正确的资产文件路径!我使用单例文件类来获取C++端的确切路径,并将这些路径发送到平台端(iOS或Android)。总是在iOS上工作。出于某种原因,它不适用于Android系统。

Android端的一个工作路径是:Assets/sounds/_TESTSOUNDWAVE.wav

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

我如何计算出正确的路径是递归地列出包中的所有内容:How can I get a directory listing of resources from my Android app?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31577549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档