2016-06-27 2 views
7

여기 내 플레이 기능입니다. 볼 수 있듯이 여러 위치에서 0으로 설정할 수 있습니다. 이는 아무런 효과가 없습니다. 나도 0.8, 0.2로 설정하려고 노력했습니다. 작동하지 않아도 상관 없습니다. 나는 또한 문자열 값이 아닌 값을 시도했는데, 값이 Obj-C 모듈 내부의 float val로 변환되면서 별 문제가되지 않습니다. 또한 NSLogged 값이 제대로 전달되고 있는지 확인하고 있습니다.코르도바 미디어 플러그인 setVolume() 작동하지 않습니다.

iPad로 테스트하기 iOS 9.2 | 코르도바 6.2 | Cordova Media Plugin 2.3.1.

play: function(src, seekTime) 
     { 
      App.Log.info('Playing audio source', src); 
      seekTime = seekTime ? seekTime : 0; 
      var obj = { 
       source: src, 
       startTime: new Date().getTime(), 
       seekTime: seekTime, 
       duration: 0, 
       preloadedNext: false, 
       audioSource: false 
      }; 
      obj.audioSource = new Media(src, function(event){ 
       $this.player().onAudioEnd(event, obj); 
      }, function(){ 
       //on error 
      }, function(status) 
      { 
       obj.audioSource.setVolume("0.0"); 
       if(status == 2){ 
        obj.audioSource.setVolume("0.0"); 
        obj.audioSource.seekTo(obj.seekTime * 1000); 
        obj.timer = setInterval(function(){ 
         obj.seekTime++; 
         obj.duration = obj.audioSource._duration; 
         if(obj.duration < 0){ 
          return; 
         } 
         if(obj.seekTime >= (obj.duration - $this.default.fadeTime)) 
         { 
          if(obj.preloadedNext){ 
           return; 
          } 
          obj.preloadedNext = true; 
          $this.player().preloadNext(obj); 
         } 
        }, 1000); 
       } 

      }); 
      obj.audioSource.setVolume("0.0"); 
      obj.audioSource.play(); 
      obj.audioSource.setVolume("0.0"); 
      obj.audioSource.seekTo(obj.seekTime * 1000); 
      console.log('Audio Source', JSON.stringify(obj)); 
      $this.playing.push(obj); 
} 

어떤 도움이나 지침이 굉장합니다.

+0

issues.cordova.io – jcesarmobile

+0

에 대한 버그 보고서 작성을 고려하면 'Android'버전을 확인 했습니까? 나는 잠시 나에게 'mac'이 없지만 실행을 확인 했습니까? https://github.com/apache/cordova-plugin-media/blob/master/src/ios에서'if'를 입력하십시오. /CDVSound.m#L260? – oak

+0

@ anthony.c 나는 샘플 앱에서 미디어 플러그인을 시험해 보았고 setvolume은 완벽하게 작동합니다. 내 github에 테스트 애플 리케이션을 게시했습니다 - https://github.com/gandhirajan/Cordova_Media 도움이되는지 확인하십시오. 또한 내가 언급 한 플러그인 버전이 2.3.1이라는 것을 알았지 만 추가 명령을 사용하여 플러그인을 추가하면 최신 버전을 사용할 수 있습니다. 2.3.0 베타 버전에서 테스트하고 싶습니다. 마스터 지점을 확인하고 도움이되는지 확인하십시오. 계속 게시 됨 – Gandhi

답변

1

다음 샘플 코드는 잘 작동과 안드로이드 & iOS 기기에서 테스트 :

index.html을 :

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="utf-8" /> 
     <meta name="format-detection" content="telephone=no" /> 
     <!-- WARNING: for iOS 7, remove the width=device-width and height=device-height attributes. See https://issues.apache.org/jira/browse/CB-4323 --> 
     <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" /> 
     <link rel="stylesheet" type="text/css" href="css/index.css" /> 
     <meta name="msapplication-tap-highlight" content="no" /> 
     <title>Hello World</title> 
    </head> 
    <body> 
     <button id="playMp3">Play MP3</button><br><br> 
     <button id="playMp3Mild">Play MP3 Mild</button><br><br> 
     <button id="playRemoteFile">Play Remote File</button> 

     <script type="text/javascript" src="cordova.js"></script> 
     <script type="text/javascript" src="js/index.js"></script> 
    </body> 
</html> 

하는 index.js :

document.addEventListener('deviceready', onDeviceReady, false); 

function onDeviceReady() { 
    document.querySelector("#playMp3").addEventListener("touchend", playMP3, false); 
    document.querySelector("#playMp3Mild").addEventListener("touchend", playMp3Mild, false); 
    document.querySelector("#playRemoteFile").addEventListener("touchend", playRemoteFile, false); 

}; 

function playMP3() { 
    var mp3URL = getMediaURL("sounds/button-1.mp3"); 
    var media = new Media(mp3URL, null, mediaError); 
    media.setVolume(1.0); 
    media.play(); 
} 

function playMp3Mild() { 
    var mp3URL = getMediaURL("sounds/button-1.mp3"); 
    var media = new Media(mp3URL, null, mediaError); 
    media.setVolume(0.1); 
    media.play(); 
} 

function playRemoteFile() { 
    var media = new Media("http://SERVER_IP:PORT/media/test.mp3"); 
    media.setVolume(0.1); 
    media.play(); 
} 

function getMediaURL(s) { 
    if(device.platform.toLowerCase() === "android") return "/android_asset/www/" + s; 
    return s; 
} 

function mediaError(e) { 
    alert('Media Error'); 
    alert(JSON.stringify(e)); 
} 

샘플 앱은 github page에서 다운로드 할 수 있습니다. 미디어 및 장치 플러그인을 추가하여 테스트하십시오. 더 많은 정보는 샘플 앱의 README 파일에서 찾을 수 있습니다. 희망이 도움이됩니다.

+1

@DavidNathan 안녕하세요, David,이 문제가 내 대답과 어떤 관련이 있는지 이해하지 못합니다. – Gandhi

0

이 방법으로 문제가 해결 될지는 모르겠지만 setVolume이 너무 일찍 호출되어 볼륨이 0으로 설정되지 않았을 수 있습니다. 내 솔루션을 개선하기 위해이 코드를 사용해보고 몇 가지 로그를보고 해 주시겠습니까?

play: function(src, seekTime) 
     { 
      App.Log.info('Playing audio source', src); 
      seekTime = seekTime ? seekTime : 0; 
      var obj = { 
       source: src, 
       startTime: new Date().getTime(), 
       seekTime: seekTime, 
       duration: 0, 
       preloadedNext: false, 
       audioSource: false 
      }; 
      obj.audioSource = new Media(src, function(event){ 
       $this.player().onAudioEnd(event, obj); 
      }, function(){ 
       //on error 
      }, function(status) 
      { 
       obj.audioSource.setVolume("0.0"); 
       if(status == 2){ 
        obj.audioSource.setVolume("0.0"); 
        obj.audioSource.seekTo(obj.seekTime * 1000); 
        obj.timer = setInterval(function(){ 
         obj.seekTime++; 
         obj.duration = obj.audioSource._duration; 
         if(obj.duration < 0){ 
          return; 
         } 
         if(obj.seekTime >= (obj.duration - $this.default.fadeTime)) 
         { 
          if(obj.preloadedNext){ 
           return; 
          } 
          obj.preloadedNext = true; 
          $this.player().preloadNext(obj); 
         } 
        }, 1000); 
       } 

      }); 
      //obj.audioSource.setVolume("0.0"); 
      obj.audioSource.play(); 
      setTimeout(function() { //try to set volume to 0 after 10 milliseconds 
       obj.audioSource.setVolume("0.0"); 
      }, 10); 
      setTimeout(function() { //try to seekTo after 1 second 
       obj.audioSource.seekTo(obj.seekTime * 1000); 
      }, 1000); 
      console.log('Audio Source', JSON.stringify(obj)); 
      $this.playing.push(obj); 
} 
+0

if (status == 2) {} 블록에서 위의 내용을 확인하면 답장 시간을내어 주셔서 감사합니다 ... status = 2 인 경우 오디오 파일이 "Running State"에 있음을 의미하므로 요점은 내가 아직 그 블록 밖에서 준비가되지 않았더라도 볼륨 조절이 가능하도록해야합니다. –

0

1 초 동안 음소거 지연을 설정하여 적어도 지연된 동작이 올바르게 발생하는지 확인할 수 있습니까? (제거 프로세스)

setTimeout(function() { 
obj.audioSource.setVolume("0.0"); 
}, 1000); 
관련 문제