Html 如何构建一个类似soundcloud的播放器?

Html 如何构建一个类似soundcloud的播放器?,html,html5-canvas,html5-audio,soundcloud,web-audio-api,Html,Html5 Canvas,Html5 Audio,Soundcloud,Web Audio Api,在的帮助下,我能够为mp3文件绘制波形。我也可以用 为了获取托管在我自己的服务器上的音频文件的json数据,我不必依赖soundcloud。到现在为止,一直都还不错。现在,我面临的下一个挑战是 在音频播放过程中填充波形中的颜色 单击波形上的任意位置,音频应从该点开始播放 有人做过类似的事情吗?我试图研究SoundCloudJSSDK,但没有成功。如有任何关于此方向的提示,将不胜感激。关于更改颜色,我先前的回答可能会有所帮助: 关于在单击波形时移动位置,您可以执行以下操作: 假设您已经从相对于画

在的帮助下,我能够为mp3文件绘制波形。我也可以用 为了获取托管在我自己的服务器上的音频文件的json数据,我不必依赖soundcloud。到现在为止,一直都还不错。现在,我面临的下一个挑战是

  • 在音频播放过程中填充波形中的颜色
  • 单击波形上的任意位置,音频应从该点开始播放
    有人做过类似的事情吗?我试图研究SoundCloudJSSDK,但没有成功。如有任何关于此方向的提示,将不胜感激。

    关于更改颜色,我先前的回答可能会有所帮助:

    关于在单击波形时移动位置,您可以执行以下操作:

    假设您已经从相对于画布调整的单击事件中获得了一个
    x
    位置

    /// get a representation of x relative to what the waveform represents:
    var pos = (x - waveFormX) / waveformWidth;
    
    /// To convert this to time, simply multiply this factor with duration which
    /// is in seconds:
    audio.currentTime = audio.duration * pos;
    
    希望这有帮助

    更新

    随着越来越多的用户使用移动设备,
    requestAnimationFrame
    不仅优化了性能,还优化了功耗。因此,当处于不同选项卡或浏览器选项卡不可见时,浏览器可能会暂停或降低rAF的帧速率。这可能导致基于位置的方法在切换选项卡时延迟或根本不渲染波形

    我建议始终使用基于时间的方法,这样FPS或其他行为都不会中断波形的绘制

    您可以强制波形在实际当前时间更新,因为幸运的是我们可以将其附加到音频元素的
    currentTime
    属性

    在rAF回路中,使用上述“反向”公式简单地更新如下位置:

    pos = audio.currentTime / audio.duration * waveformWidth + waveformX
    

    当选项卡再次可见时,此方法将确保波形根据音频的实际时间位置继续。

    至于更改颜色,我前面的回答可能会有所帮助:

    关于在单击波形时移动位置,您可以执行以下操作:

    假设您已经从相对于画布调整的单击事件中获得了一个
    x
    位置

    /// get a representation of x relative to what the waveform represents:
    var pos = (x - waveFormX) / waveformWidth;
    
    /// To convert this to time, simply multiply this factor with duration which
    /// is in seconds:
    audio.currentTime = audio.duration * pos;
    
    希望这有帮助

    更新

    随着越来越多的用户使用移动设备,
    requestAnimationFrame
    不仅优化了性能,还优化了功耗。因此,当处于不同选项卡或浏览器选项卡不可见时,浏览器可能会暂停或降低rAF的帧速率。这可能导致基于位置的方法在切换选项卡时延迟或根本不渲染波形

    我建议始终使用基于时间的方法,这样FPS或其他行为都不会中断波形的绘制

    您可以强制波形在实际当前时间更新,因为幸运的是我们可以将其附加到音频元素的
    currentTime
    属性

    在rAF回路中,使用上述“反向”公式简单地更新如下位置:

    pos = audio.currentTime / audio.duration * waveformWidth + waveformX
    

    当选项卡再次可见时,此方法将确保波形根据音频的实际时间位置继续。

    至于更改颜色,我前面的回答可能会有所帮助:

    关于在单击波形时移动位置,您可以执行以下操作:

    假设您已经从相对于画布调整的单击事件中获得了一个
    x
    位置

    /// get a representation of x relative to what the waveform represents:
    var pos = (x - waveFormX) / waveformWidth;
    
    /// To convert this to time, simply multiply this factor with duration which
    /// is in seconds:
    audio.currentTime = audio.duration * pos;
    
    希望这有帮助

    更新

    随着越来越多的用户使用移动设备,
    requestAnimationFrame
    不仅优化了性能,还优化了功耗。因此,当处于不同选项卡或浏览器选项卡不可见时,浏览器可能会暂停或降低rAF的帧速率。这可能导致基于位置的方法在切换选项卡时延迟或根本不渲染波形

    我建议始终使用基于时间的方法,这样FPS或其他行为都不会中断波形的绘制

    您可以强制波形在实际当前时间更新,因为幸运的是我们可以将其附加到音频元素的
    currentTime
    属性

    在rAF回路中,使用上述“反向”公式简单地更新如下位置:

    pos = audio.currentTime / audio.duration * waveformWidth + waveformX
    

    当选项卡再次可见时,此方法将确保波形根据音频的实际时间位置继续。

    至于更改颜色,我前面的回答可能会有所帮助:

    关于在单击波形时移动位置,您可以执行以下操作:

    假设您已经从相对于画布调整的单击事件中获得了一个
    x
    位置

    /// get a representation of x relative to what the waveform represents:
    var pos = (x - waveFormX) / waveformWidth;
    
    /// To convert this to time, simply multiply this factor with duration which
    /// is in seconds:
    audio.currentTime = audio.duration * pos;
    
    希望这有帮助

    更新

    随着越来越多的用户使用移动设备,
    requestAnimationFrame
    不仅优化了性能,还优化了功耗。因此,当处于不同选项卡或浏览器选项卡不可见时,浏览器可能会暂停或降低rAF的帧速率。这可能导致基于位置的方法在切换选项卡时延迟或根本不渲染波形

    我建议始终使用基于时间的方法,这样FPS或其他行为都不会中断波形的绘制

    您可以强制波形在实际当前时间更新,因为幸运的是我们可以将其附加到音频元素的
    currentTime
    属性

    在rAF回路中,使用上述“反向”公式简单地更新如下位置:

    pos = audio.currentTime / audio.duration * waveformWidth + waveformX
    

    当选项卡再次可见时,此方法将确保波形根据音频的实际时间位置继续。

    谢谢Ken!不过我发现了一个问题。如果切换到其他选项卡,动画将停止!!它仅在选项卡处于活动状态时才起作用。这不适用于我的音乐项目,用户可能会在收听歌曲时切换到其他选项卡,或者在播放歌曲时切换到其他选项卡。你知道如何克服这种行为吗