【问题标题】:PhoneGap (JS) - multiple audio streamsPhoneGap (JS) - 多个音频流
【发布时间】:2013-02-03 13:31:34
【问题描述】:

我一直在使用 PhoneGap 文档 (http://docs.phonegap.com/en/2.3.0/cordova_media_media.md.html#media.play) 中的这段代码来播放音频文件:

    // 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();

这很好,但我想播放多个流并通过参数“名称”控制它们。

所以我改变了我的代码:

    // 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('file1','http://example.com/file.mp3');

stopAudio('file1');

// 播放和停止文件2:

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

stopAudio('file2');


我收到的唯一消息是应用程序崩溃,有人有在 PhoneGap 上播放多个媒体文件的经验吗?

谢谢!

【问题讨论】:

    标签: javascript cordova audio mp3


    【解决方案1】:

    基于 Cordova 2.3 文档:

    Media 对象构造函数期望第一个参数为“src”,但您使用它来设置媒体的名称,播放器将您的名称视为媒体源并尝试使用“file1”作为媒体文件

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

    您可以尝试创建一个二维媒体播放器数组,其中每行的第一个元素是名称,第二个元素是媒体对象。比在您的 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();
            }
        }
    ...
    
    }
    

    【讨论】:

      【解决方案2】:

      我是 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();
      }
      

      这段代码可能不是最好的,但它可以工作(对我来说) 对不起我的英语 希望这有帮助! :)

      【讨论】:

        【解决方案3】:

        你可以添加

        window.location.reload();
        

        在stopAudio(),玩multiple audio是工作

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-23
          • 1970-01-01
          • 2017-10-12
          • 2013-12-19
          • 2019-08-11
          相关资源
          最近更新 更多