要稍微详细一点:当您第一次创建新的波形时,您可以将自定义函数传递给innerColor。
看看Waveform.js库的source,你可以看到它们检查你是否传递了一个innerColor函数,如果是的话,它们会传递一些项目给你的函数来生成颜色:
// The source is in Coffeescript
i = 0
for d in @data
t = @width/@data.length
// This line is the one I'm referring to...
@context.fillStyle = @innerColor(i/@width, d) if typeof(@innerColor) == "function"
@context.clearRect t*i, middle - middle * d, t, (middle * d * 2)
@context.fillRect t*i, middle - middle * d, t, middle * d * 2
i++
所以他们遍历波形和i/@width
(这是传递给你的innerColor功能)每个“行”本质上是该行的波形的位置(表示为从一开始的百分比)是他们目前正在努力为其绘制颜色。如果你把这个比例,并计算出,如果曲目的currentTime
高于/低于这个数字,你可以给“线”特定的颜色,例如:
waveform = new Waveform({
container: document.getElementById('waveform'),
innerColor: function(percentageOfWaveform, d) {
// We don't need d
var songPercentage = yourAudioElement.currentTime/yourAudioElement.duration;
if (percentageOfWaveform > songPercentage) {
return 'gray';
} else {
return '#f60';
}
}
});
然后,你必须写一些逻辑每隔一段时间重新绘制波形以便更新。
waveform.redraw()
*应指出的是,我使用HTML5的音频而不是在SDK的标准SC.stream方法,所以yourAudioElement
是HTML5音频元素。