【问题标题】:Get duration of audio file on Android在 Android 上获取音频文件的持续时间
【发布时间】:2015-10-13 04:18:28
【问题描述】:

我无法在 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 上播放良好。

我尝试的一些路径变体是:

  • assets/Assets/sounds/_TESTSOUNDWAVE.wav
  • android.resource://com.package.name/assets/Assets/sounds/_TESTSOUNDWAVE.wav

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

【问题讨论】:

    标签: java android audio cocos2d-x-3.0


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-02-08
      • 2020-06-02
      • 2013-03-01
      • 2013-10-27
      • 2016-04-23
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多