Cordova 播放第二个音频时是否可以自动停止第一个音频?

Cordova 播放第二个音频时是否可以自动停止第一个音频?,cordova,cordova-plugins,Cordova,Cordova Plugins,我正在尝试创建一个Android应用程序,使用Cordova播放声音 声音正常工作。除了当我添加两个声音时,我播放的第一个声音是唯一要播放的声音。即使单击另一个声音的按钮,它也会播放第一个声音 // Wait for device API libraries to load // document.addEventListener("deviceready", onDeviceReady, false); // device AP

我正在尝试创建一个Android应用程序,使用Cordova播放声音

声音正常工作。除了当我添加两个声音时,我播放的第一个声音是唯一要播放的声音。即使单击另一个声音的按钮,它也会播放第一个声音

        // Wait for device API libraries to load
        //
        document.addEventListener("deviceready", onDeviceReady, false);

        // device APIs are available
        //
        function onDeviceReady() {
            var my_media = new playAudio();
        }

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

            // Update my_media position every second
            if (mediaTimer == null) {
                mediaTimer = setInterval(function() {
                    // get my_media position
                    my_media.getCurrentPosition(
                        // success callback
                        function(position) {
                            if (position > -1) {
                                setAudioPosition((position) + " sec");
                            }
                        },
                        // error callback
                        function(e) {
                            console.log("Error getting pos=" + e);
                            setAudioPosition("Error: " + e);
                        }
                    );
                }, 1000);
            }
        }

        // Pause audio
        //
        function pauseAudio() {
            if (my_media) {
                my_media.pause();
            }
        }

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

        // onSuccess Callback
        //
        function onSuccess() {
            console.log("playAudio():Audio Success");
        }

        // onError Callback
        //
        function onError(error) {
            alert('code: '    + error.code    + '\n' +
                  'message: ' + error.message + '\n');
        }

        // Set audio position
        //
        function setAudioPosition(position) {
            document.getElementById('audio_position').innerHTML = position;
        }

        </script>
</head>
<body>
<a href="#" class="btn large" onclick="playAudio('file:///android_asset/www/media/1.mp3');">Play Audio</a>
<a href="#" class="btn large" onclick="playAudio('https://ia800902.us.archive.org/23/items/tagot/rain.mp3');">Play Audio2</a>
<a href="#" class="btn large" onclick="pauseAudio();">Pause Playing Audio</a>
<a href="#" class="btn large" onclick="stopAudio();">Stop Playing Audio</a>
<p id="audio_position"></p>
//等待设备API库加载
//
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
//设备API可用
//
函数ondevicerady(){
var my_media=新播放音频();
}
//音频播放器
//
var my_media=null;
var mediaTimer=null;
//播放音频
//
功能播放音频(src){
if(my_media==null){
//从src创建媒体对象
my_media=新媒体(src、onSuccess、onError);
}//否则播放当前音频
//播放音频
我的媒体播放();
//每秒更新我的媒体位置
如果(mediaTimer==null){
mediaTimer=setInterval(函数(){
//得到我的媒体职位
my_media.getCurrentPosition(
//成功回调
职能(职位){
如果(位置>-1){
设置音频位置((位置)+“秒”);
}
},
//错误回调
职能(e){
console.log(“获取位置时出错=”+e);
设置音频位置(“错误:+e”);
}
);
}, 1000);
}
}
//暂停音频
//
函数pauseAudio(){
如果(我的媒体){
我的媒体暂停();
}
}
//停止音频
//
函数stopAudio(){
如果(我的媒体){
我的媒体。停止();
}
clearInterval(mediaTimer);
mediaTimer=null;
}
//onSuccess回调
//
函数onSuccess(){
log(“playAudio():音频成功”);
}
//错误回调
//
函数onError(错误){
警报('code:'+error.code+'\n'+
'消息:'+error.message+'\n');
}
//设置音频位置
//
功能设置音频位置(位置){
document.getElementById('audio_position')。innerHTML=position;
}

我试图得到的是播放例如5种声音,每当我点击其中一种时,播放的声音立即停止。
感谢您的帮助:)

第一个声音继续播放,因为您正在检查以下条件,即在播放第一个音频后返回
true

if (my_media == null) {
  my_media = new Media(src, onSuccess, onError);
}
相反,如果需要播放多个音频文件,请使用对象

my_media = {}; // init the play object

function playAudio(src, id) {

  if (!my_media[id]) { // check if media already created
    my_media[id] = new Media(src, onSuccess, onError);
  }

  my_media[id].play();

}

playAudio('file:///android_asset/www/media/1.mp3', 458);
playAudio('file:///android_asset/www/media/2.mp3', 33);
playAudio('file:///android_asset/www/media/3.mp3', 44);

第一个声音继续播放,因为您正在检查以下条件,即播放第一个音频后返回
true

if (my_media == null) {
  my_media = new Media(src, onSuccess, onError);
}
相反,如果需要播放多个音频文件,请使用对象

my_media = {}; // init the play object

function playAudio(src, id) {

  if (!my_media[id]) { // check if media already created
    my_media[id] = new Media(src, onSuccess, onError);
  }

  my_media[id].play();

}

playAudio('file:///android_asset/www/media/1.mp3', 458);
playAudio('file:///android_asset/www/media/2.mp3', 33);
playAudio('file:///android_asset/www/media/3.mp3', 44);

以下是我如何使用您的代码:

       function playAudio(src) {
          my_media = {}; // init the play object

function playAudio(src, id) {

  if (!my_media[id]) { // check if media already created
    my_media[id] = new Media(src, onSuccess, onError);
  }
  my_media[id].play();
}

playAudio('file:///android_asset/www/media/1.mp3', 1);
playAudio('https://ia800902.us.archive.org/23/items/tagot/rain.mp3', 2);
  • 音频是自动播放的,我不想要。但是使用onclick来播放 它
      以下是我如何使用您的代码:

             function playAudio(src) {
                my_media = {}; // init the play object
      
      function playAudio(src, id) {
      
        if (!my_media[id]) { // check if media already created
          my_media[id] = new Media(src, onSuccess, onError);
        }
        my_media[id].play();
      }
      
      playAudio('file:///android_asset/www/media/1.mp3', 1);
      playAudio('https://ia800902.us.archive.org/23/items/tagot/rain.mp3', 2);
      
      • 音频是自动播放的,我不想要。但是使用onclick来播放 它
      此代码自动播放声音:

      function playAudio(src) {
      my_media = {}; // init the play object
      
      function playAudio(src, id) {
      
        if (!my_media[id]) { // check if media already created
          my_media[id] = new Media(src, onSuccess, onError);
        }
      
        my_media[id].play();
      
      }
      
      playAudio('file:///android_asset/www/media/1.mp3', 458')
      
      但当我将src移动到链接到“onclick”按钮时,它停止工作:

      <a href="#" class="btn large" onclick="playAudio('file:///android_asset/www/media/1.mp3', 458');">Play Audio</a>
      

      此代码自动播放声音:

      function playAudio(src) {
      my_media = {}; // init the play object
      
      function playAudio(src, id) {
      
        if (!my_media[id]) { // check if media already created
          my_media[id] = new Media(src, onSuccess, onError);
        }
      
        my_media[id].play();
      
      }
      
      playAudio('file:///android_asset/www/media/1.mp3', 458')
      
      但当我将src移动到链接到“onclick”按钮时,它停止工作:

      <a href="#" class="btn large" onclick="playAudio('file:///android_asset/www/media/1.mp3', 458');">Play Audio</a>
      
      
      
      工作正常:

                function onDeviceReady() {
                  var my_media = new playAudio();
              }
      
              // Audio player
              //
              var my_media = null;
              var mediaTimer = null;
      
              // Play audio
              //
      my_media = {}; // init the play object
      
         function playAudio(src, id) {
           if (!my_media[id]) { // check if media already created
             my_media[id] = new Media(src, onSuccess, onError);
           }
      
           my_media[id].play();
      
         }
      
      但当我播放第二个声音时,第一个声音并没有停止

      整个代码:

      // Wait for device API libraries to load
              //
              document.addEventListener("deviceready", onDeviceReady, false);
      
              // device APIs are available
              //
              function onDeviceReady() {
                  var my_media = new playAudio();
              }
      
              // Audio player
              //
              var my_media = null;
              var mediaTimer = null;
      
              // Play audio
              //
      my_media = {}; // init the play object
      
         function playAudio(src, id) {
           if (!my_media[id]) { // check if media already created
             my_media[id] = new Media(src, onSuccess, onError);
           }
      
           my_media[id].play();
      
         }
      
       //playAudio('file:///android_asset/www/media/1.mp3');
      
              // Pause audio
              //
              function pauseAudio() {
                  if (my_media) {
                      my_media.pause();
                  }
              }
      
              // Stop audio
              //
              function stopAudio() {
                  if (my_media) {
                      my_media.stop();
                  }
                  clearInterval(mediaTimer);
                  mediaTimer = null;
              }
      
              // onSuccess Callback
              //
              function onSuccess() {
                  console.log("playAudio():Audio Success");
              }
      
              // onError Callback
              //
              function onError(error) {
                  alert('code: '    + error.code    + '\n' +
                        'message: ' + error.message + '\n');
              }
      
              // Set audio position
              //
              function setAudioPosition(position) {
                  document.getElementById('audio_position').innerHTML = position;
              }
      
      工作完美:

                function onDeviceReady() {
                  var my_media = new playAudio();
              }
      
              // Audio player
              //
              var my_media = null;
              var mediaTimer = null;
      
              // Play audio
              //
      my_media = {}; // init the play object
      
         function playAudio(src, id) {
           if (!my_media[id]) { // check if media already created
             my_media[id] = new Media(src, onSuccess, onError);
           }
      
           my_media[id].play();
      
         }
      
      但当我播放第二个声音时,第一个声音并没有停止

      整个代码:

      // Wait for device API libraries to load
              //
              document.addEventListener("deviceready", onDeviceReady, false);
      
              // device APIs are available
              //
              function onDeviceReady() {
                  var my_media = new playAudio();
              }
      
              // Audio player
              //
              var my_media = null;
              var mediaTimer = null;
      
              // Play audio
              //
      my_media = {}; // init the play object
      
         function playAudio(src, id) {
           if (!my_media[id]) { // check if media already created
             my_media[id] = new Media(src, onSuccess, onError);
           }
      
           my_media[id].play();
      
         }
      
       //playAudio('file:///android_asset/www/media/1.mp3');
      
              // Pause audio
              //
              function pauseAudio() {
                  if (my_media) {
                      my_media.pause();
                  }
              }
      
              // Stop audio
              //
              function stopAudio() {
                  if (my_media) {
                      my_media.stop();
                  }
                  clearInterval(mediaTimer);
                  mediaTimer = null;
              }
      
              // onSuccess Callback
              //
              function onSuccess() {
                  console.log("playAudio():Audio Success");
              }
      
              // onError Callback
              //
              function onError(error) {
                  alert('code: '    + error.code    + '\n' +
                        'message: ' + error.message + '\n');
              }
      
              // Set audio position
              //
              function setAudioPosition(position) {
                  document.getElementById('audio_position').innerHTML = position;
              }
      

      我试图实施你的解决方案,但没有成功。如果您能用完整的代码将您的解决方案添加到我上面的代码中,我将不胜感激。如果你能增加两个声音而不是一个,那会更有帮助。感谢您指定哪些不起作用?您是否提供了两个不同的ID?只是想澄清一下:例如,我想添加3个音频文件,并使用带有唯一按钮的“onclick”播放每个文件。谢谢。。。它正在工作。但是如何将每个声音的播放链接到一个“onclick”按钮。请随意接受这个答案,如果它解决了问题,我试图实现你的解决方案,但没有成功。如果您能用完整的代码将您的解决方案添加到我上面的代码中,我将不胜感激。如果你能增加两个声音而不是一个,那会更有帮助。感谢您指定哪些不起作用?您是否提供了两个不同的ID?只是想澄清一下:例如,我想添加3个音频文件,并使用带有唯一按钮的“onclick”播放每个文件。谢谢。。。它正在工作。但是如何将每个声音的播放链接到“onclick”按钮。如果这个答案已经解决了问题,请随意接受它,删除它,因为它应该是一个注释,而不是一个答案伴侣。删除它,因为它应该是一个注释,而不是一个答案伴侣。