2013-05-15 3 views
1

Я попытался сделать простую телефонную связь, в которой можно сыграть несколько песен. До сих пор мое приложение может играть песню, но когда я нажмите два раза кнопку воспроизведения:Phonegap, stop audio

<button onclick="playAudio('test.mp3')">Play Some Audio</button> 

Он снова играет песню, так что эхо-сигнал можно услышать, вместо того, чтобы сначала остановить звук, а затем на букву из начало песни. Я пробовал суровые вещи, но работает моя кнопка остановки. Api для остановки звука можно найти здесь: http://docs.phonegap.com/en/2.0.0/cordova_media_media.md.html#media.stop Это моя кнопка остановки:

<button onclick="stopAudio()">Stop Some Audio</button> 

и весь проект:

 <body> 
    <h1>Playing Audio</h1> 
     <button onclick="playAudio('test.mp3')">Play Some Audio</button> 
     <button onclick="stopAudio()">Stop Some Audio</button> 
     </div> 
    <script type="text/javascript" src="cordova-2.4.0.js"></script> 
    <script type="text/javascript" src="js/index.js"></script> 
    <script type="text/javascript"> 
     app.initialize(); 
     function playAudio(src) { 
     if (device.platform == 'Android') { 
      src = '/android_asset/' + src; 
     } 

     var media = new Media(src, success, error_error); 

     media.play(); 

    } 

    function success() { 
     // ignore 
    } 

    function error_error(e) { 
     alert('great error'); 
     alert(e.message); 
    } 

    function stopAudio() { 
    if (media) { 
    var media = new Media(src, success, error_error); 
     media.stop(); 
     } 
    } 
    </script> 
</body> 

Так, может быть кто-нибудь знает, как сделать эту кнопку остановки работы? Извините за мой плохой англичан и приветствия из Германии!

ответ

2

Вы можете создать флаг при воспроизведении звука audioPlaying и каждый раз проверять этот флаг, чтобы снова воспроизвести звук. Это самое прямое решение здесь.

Также вы используете два разных экземпляра вашего объекта Media, когда вы вызываете стоп на нем, вы ссылаетесь на совершенно другой экземпляр. Вам необходимо увеличить объем вашего медиа-объекта, см. Ниже:

EDIT: Добавлено audioPlaying = false; к функции остановки, чтобы предотвратить ее застревание.

<body> 
<h1>Playing Audio</h1> 
    <button onclick="playAudio('test.mp3')">Play Some Audio</button> 
    <button onclick="stopAudio()">Stop Some Audio</button> 
    </div> 
<script type="text/javascript" src="cordova-2.4.0.js"></script> 
<script type="text/javascript" src="js/index.js"></script> 
<script type="text/javascript"> 
    var audioPlaying = false; 
    var media; 
    app.initialize(); 
    function playAudio(src) { 
     if (audioPlaying === false) { 
      if (device.platform == 'Android') { 
       src = '/android_asset/' + src; 
      } 

      media = new Media(src, success, error_error); 

      media.play(); 
      audioPlaying = true; 
     } else { 
      //audio is already playing 
     } 
    } 

function success() { 
    // ignore 
} 

function error_error(e) { 
    alert('great error'); 
    alert(e.message); 
} 

function stopAudio() { 
if (media) { 
    media.stop(); 
    audioPlaying = false; 
    } 
} 
</script> 

+0

ваш ответ абсолютно верно! Но вы нашли какую-либо возможную причину, что стоп-звук не работает? Вот пример, который работает: http://docs.phonegap.com/en/2.7.0/cordova_media_media.md.html#media.stop –

+0

С предоставленным кодом stop теперь должен работать, вы запускали код: media = новый Media() дважды. В результате то, что вы на самом деле делаете, это вызов игры на одном объекте и остановка на другом несвязанном объекте. Создавая один экземпляр в рамках обеих функций, стоп должен работать. Рад помочь вам отладить еще – Yoda

+0

, к сожалению, он не работает. То, что я также заметил, заключается в том, что после воспроизведения звука аудиозапись остается ложной, так что я могу играть только один раз. –

1

создать глобальную переменную var media; и присвоить ему значение при нажатии кнопки воспроизведения. вместо его инициализации снова и снова

измените свой код, как эта надежда, он будет работать.

<body> 
    <h1>Playing Audio</h1> 
     <button onclick="playAudio('test.mp3')">Play Some Audio</button> 
     <button onclick="stopAudio()">Stop Some Audio</button> 
     </div> 
    <script type="text/javascript" src="cordova-2.4.0.js"></script> 
    <script type="text/javascript" src="js/index.js"></script> 
    <script type="text/javascript"> 
     var media; 
     app.initialize(); 
     function playAudio(src) { 
     if (device.platform == 'Android') { 
      src = '/android_asset/' + src; 
     } 

     media = new Media(src, success, error_error); 

     media.play(); 

    } 

    function success() { 
     // ignore 
    } 

    function error_error(e) { 
     alert('great error'); 
     alert(e.message); 
    } 

    function stopAudio() { 
    if (media) { 
     media = new Media(src, success, error_error); 
     media.stop(); 
     } 
    } 
    </script> 
</body>