Phonegap - 无法播放本地声音文件

时间:2012-07-19 11:20:53

标签: cordova

我正在尝试使用Phonegap播放本地声音文件。这适用于http,但不适用于本地文件。我可以看到设备上的文件并手动播放,但不能使用Phonegap的API。我试过了:

  1. .mp3和.wav文件格式。
  2. 将文件放在www /(带路径 /android_asset/www/sound.mp3)和/ sdcard /(与路径sound.mp3)。
  3. 改变协议(使用或不使用file://)。
  4. 但似乎没有任何工作,成功和错误回调都不会被调用。在尝试播放之前,我也确保文件确实存在。这是我的代码:

    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs) {
    
                            var directoryReader = fs.root.createReader();
                            directoryReader.readEntries(function(entries) {
                                for (var i=0; i<entries.length; i++) {
                                    if (entries[i].isFile && entries[i].name.match(/.*\.wav$/)){
    
                                        var audio = new Media(entries[i].toURL().substr(19), function(){console.log('success');}, function(){console.log('error');});
                                        console.log("!!!!! " + audio.getDuration());
                                        audio.play();
                                        audio.release();    
                                        break;
                                    }
                                }
                            }, function (error) {
                                alert(error.code);
                            })
                       }, function (error) {
                               alert(error.code);
                       });
    

    audio.getDuration始终返回-1。我在运行Android 2.3.3的Android Nexus S上使用Phonegap 1.9,该应用程序的目标是API级别2.1。

    有什么想法吗?

1 个答案:

答案 0 :(得分:2)

同步调用时,

getDuration返回-1。您需要在setInterval循环中调用它,如此处http://docs.phonegap.com/en/1.9.0/cordova_media_media.md.html#media.getDuration所示,以获得正确的持续时间。

我认为你不能播放来自assets / www的文件,但是SD卡上的文件工作得很好。您需要确保不从FileEntry对象传递完整路径。您需要修剪起始路径(file:/// mnt / sdcard /),因为媒体播放器插件会自行添加。我发现在一个小时左右的头部刮伤后出来了!