Canvas Mask帮助/自定义音频播放器擦洗器/波形

时间:2015-04-20 22:41:16

标签: javascript html5 audio canvas image-masking

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

<img class="rangeHorizontal" id="seek"     src="http://i.imgur.com/hRHH9VO.png">
            <img id="seekFill" src="http://i.imgur.com/WoJggN0.png">

当没有播放的歌曲应该是白色的时候,当歌曲进入时,它应该在歌曲进行时填充红色,并且在分别向前和向前擦洗时也应该填充。

除了Canvas部分之外,我已经能够完成大部分游戏功能。

目前这两个pngs叠加在一起,当歌曲播放整个红色png叠加在顶部时,...而不仅仅是显示一部分,...它很难解释,但我有一个小提琴这样的东西变得更加清晰。

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

期望的结果是喜欢这个玩家,它也使用两个png方法:

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

如果有人能帮我一点,我会喜欢它..我一直在屏蔽并试图在整个早上使用帆布而没有运气。

1 个答案:

答案 0 :(得分:1)

有一些代码需要经过,但这里有一种技术可用于绘制图像的剪辑版本。根据需要实施 -

实例

每个timeupdate

  • Canvas已清除
  • 绘制白底图像(您可以根据需要缩放)
  • 计算进度(当前时间/持续时间)
  • 使用剪切参数绘制红顶图像:

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

完整示例代码(由于API使用而必须替换音乐) -

&#13;
&#13;
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
    }
  }
}
&#13;
body {background:#ccc}
canvas {width:600px;height:auto}
&#13;
<audio src="https://raw.githubusercontent.com/epistemex/free-music-for-test-and-demo/master/music/kf_colibris.mp3" controls></audio>
<canvas></canvas>
&#13;
&#13;
&#13;