2013-02-03 68 views
1

我一直在使用从PhoneGap的文档(http://docs.phonegap.com/en/2.3.0/cordova_media_media.md.html#media.play)此代码来播放音频文件:的PhoneGap(JS) - 多音频流

// Audio player 
    // 
    var my_media = null; 
    var mediaTimer = null; 

    // Play audio 
    // 
    function playAudio(src) { 
     if (my_media == null) { 
      // Create Media object from src 
      my_media = new Media(src, onSuccess, onError); 
     } // else play current audio 
     // Play audio 
     my_media.play(); 

    // Stop audio 
    // 
    function stopAudio() { 
     if (my_media) { 
      my_media.stop(); 
     } 
     clearInterval(mediaTimer); 
     mediaTimer = null; 
    } 

所以我可以播放带有onclick事件音频:

playAudio('http://example.com/file.mp3');

并停止它:

stopAudio();

这工作正常,但我想播放多个流并通过参数“name”来控制它们。

所以我改变了我的代码:

// Audio player 
    // 
    var my_media = null; 
    var mediaTimer = null; 

    // Play audio 
    // 
    function playAudio(name,src) { 
     if (my_media == null) { 
      // Create Media object from src 
      my_media = new Media(name, src, onSuccess, onError); 
     } // else play current audio 
     // Play audio 
     my_media.play(name); 

    // Stop audio 
    // 
    function stopAudio(name) { 
     if (my_media) { 
      my_media.stop(name); 
     } 
     clearInterval(mediaTimer); 
     mediaTimer = null; 
    } 

//播放和停止文件1: playAudio( '文件1', 'http://example.com/file.mp3');

stopAudio('file1');

//播放和停止文件2:

playAudio( '文件2', 'http://example.com/file2.mp3');

stopAudio('file2');


我收到的唯一的事情是应用程序的崩溃,没有任何人有玩的PhoneGap多个媒体文件的经验?

谢谢!

回答

2

基于科尔多瓦2.3文档:

媒体对象的构造函数期待的第一个参数是“SRC”,但你用它来设置媒体名称的玩家比对待您的姓名作为媒体源并尝试使用'file1'作为媒体文件的路径

其他: phonegap Media play()和stop()方法不期望参数,因此您在这些方法调用中提供的名称将被忽略

你可以尝试创建一个媒体播放器的二维数组,其中第一个e每行中的lement是名称,第二个是Media对象。比在你的playAudio和stopAudio功能按名称扫描阵列和调用正确的对象上的play()和stop()方法

在复制和粘贴下面的代码之前,请记住我一点也不确定播放多个音频文件是可能的phonegap。我知道这是不是在移动Safari浏览器的音频元素的支持:http://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Using_HTML5_Audio_Video.pdf#page21

var my_medias = new Array(); 
... 
playAudio(name,arc){ 
    var createnew = true; 
    for(var i=0;i<my_medias.length;I++){ 
     if(my_medias[0]==name){ 
      my_medias[1].play(); 
      createnew=false; 
     } 
    } 
    if(createnew){ 
     my_medias.push([name,new Media(src,onError,onSuccess)]); 
    } 
} 

stopAudio(name){ 
    for(var i=0;i<my_medias.length;I++){ 
     if(my_medias[0]==name){ 
      my_medias[1].stop(); 
     } 
    } 
... 

} 
0

我在PhoneGap的新手,我也想打多个媒体文件,如你。 这是我的解决方案,它为我工作。

var mediaObjects; 
var currentSound; 

// where list is an array of sound name like this ['foo.mp3', 'bar.mp3'] 
function playSound(list){ 
    mediaObjects = []; 
    currentSound = 0; 
    for(var i = 0; i< list.length; i++){ 
     var mediaObject = new Media('/android_asset/www/sounds/' + list[i], onSuccess, onError); 
     mediaObjects.push(mediaObject); 
    } 
    mediaObjects[0].play(); 
} 

在第一个媒体对象播放后。回调函数“的onSuccess”将被调用,这是函数的代码

function onSuccess() { 
    currentSound++; 
    if(mediaObjects.length <= currentSound){ 
     return; 
    } 
    mediaObjects[currentSound].play(); 
} 

此代码是不是最好的,但它(对我来说) 和对不起我的英语 希望这有助于工作! :)

0

您可以添加

window.location.reload(); 
stopAudio()

,这是工作中发挥multiple audio

function stopAudio() { 
    if (my_media) { 
     my_media.stop(); 
     window.location.reload(); 
    } 
    clearInterval(mediaTimer); 
    mediaTimer = null; 
}