Можно ли автоматически остановить первый звук при воспроизведении второго? - PullRequest
1 голос
/ 30 сентября 2019

Я пытаюсь создать приложение для 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>

Я пытаюсь воспроизвести, например, 5 звуков, и каждый раз, когда я нажимаю на один из них, остановка воспроизведениянемедленно. Спасибо за вашу помощь:)

Ответы [ 4 ]

0 голосов
/ 01 октября 2019

Отлично работает:

          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;
        }
0 голосов
/ 01 октября 2019

Вот как я использовал ваш код:

       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, чтобы играть в нее.
0 голосов
/ 01 октября 2019

Этот код автоматически воспроизводит звук:

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>
0 голосов
/ 01 октября 2019

Первый звук продолжает воспроизводиться, потому что вы проверяете следующее условие, которое возвращает 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);
...