画布蒙版帮助带自定义音频播放器洗涤器/波形



我有两个png,一个是白色的,另一个是红色的。

<img class="rangeHorizontal" id="seek"     src="http://i.imgur.com/hRHH9VO.png">
            <img id="seekFill" src="http://i.imgur.com/WoJggN0.png">
当歌曲不播放时,它应该是白色的,当歌曲播放时,它

应该随着歌曲的进行而填充红色,并且分别前后擦洗时也应该填充红色。

我已经能够糊里糊涂地浏览除 Canvas 部分之外的大部分游戏功能。

目前,两个 png 是相互叠加的,

当歌曲播放整个红色 png 叠加层时,.. 不仅仅是显示一部分,..这很难解释,但我有一个小提琴,所以事情变得更加清晰。

https://jsfiddle.net/tallgirltaadaa/q9qgyob0/

想要的结果就像这个播放器一样,它也使用两个 png 方法:

http://codecanyon.net/item/zoomsounds-neat-html5-audio-player/full_screen_preview/4525354?ref=hkeyjun

如果有人能帮助我一点,我会喜欢它。我整个早上都在蒙版并试图使用画布,但没有运气。

经历的代码有点太多,但这里有一种技术可以用来绘制图像的剪辑版本。根据需要实施 -

现场示例

在每timeupdate

  • 画布已清除
  • 白色底部图像被绘制出来(您可以根据需要缩放它们)
  • 计算进度(当前时间/持续时间)
  • 红色顶部图像是使用剪切参数绘制的:

即。

ctx.drawImage(image, sx, sy, sw, sh,  dx, dy, dw, dh);

完整的示例代码(由于API的使用而不得不替换音乐)-

var imgBg = new Image(),
    imgFg = new Image(),
    count = 2;
imgBg.onload = imgFg.onload = init;
imgBg.src = "http://i.imgur.com/hRHH9VO.png";
imgFg.src = "http://i.imgur.com/WoJggN0.png";
function init() {
  if (--count) return;   // makes sure both images are loaded
  
   var canvas = document.querySelector("canvas"),
       ctx = canvas.getContext("2d"),
       audio =  document.querySelector("audio");
  
  canvas.width = imgBg.naturalWidth;
  canvas.height = imgBg.naturalHeight;
  
  render();
  
  audio.volume = 0.5;
  audio.addEventListener("timeupdate", render);
  
  function render() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.drawImage(imgBg, 0, 0);
    
    // calc progress
    var pst = audio.currentTime / audio.duration;
    
    // draw clipped version of top image
    if (pst > 0) {
      ctx.drawImage(imgFg, 0, 0, (canvas.width * pst)|0, canvas.height,  // source
                           0, 0, (canvas.width * pst)|0, canvas.height); // dst
    }
  }
}
body {background:#ccc}
canvas {width:600px;height:auto}
<audio src="https://raw.githubusercontent.com/epistemex/free-music-for-test-and-demo/master/music/kf_colibris.mp3" controls></audio>
<canvas></canvas>

最新更新