npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

gl-waveform

v4.3.3

Published

Performant waveform renderer with WebGL

Downloads

74

Readme

gl-waveform unstable Build Status

Display time-domain data with WebGL. Provides fair performance / quality among other renderers:

  • no performance deterioration - O(n) for update, O(c) for rendering.
  • no memory limit - O(c * n).
  • no float32 error introduced by shader, at any scale/range/amount of data.
  • floating step compensation for non-regular sample sets.
  • unique render method of adjustable join-width via sample range sdev.

Demo 1, Demo 2

Usage

Install package as

npm i gl-waveform

Examplary set up is

let Waveform = require('gl-waveform')

// new component instance creates new canvas and puts that to document
let waveform = new Waveform()

// update method sets state of the component: data, color etc.
waveform.update({
	data: [0, .5, 1, .5, 0, -.5, -1, ...],
	color: 'gray',
	range: [0, 44100]
})

// render method draws frame, needs to be called when state is changed
waveform.render()

// push method appends new data
waveform.push(newData)
waveform.render()

API

waveform = new Waveform(arg|options?)

arg can be:

  • gl - existing webgl context.
  • regl - existing regl instance.
  • canvas - canvas element to initialize waveform on.
  • container - html element to use as a container for new canvas with webgl context.
  • waveform - gl-waveform instance to create a view for. In this case, the data will be shared.
  • none - new fullscreen canvas in the <body>.

options can provide:

Property | Meaning ---|--- gl, regl, canvas, container | Same as arg. pixelRatio | Device pixel ratio, by default window.devicePixelRatio. clip | Viewport area within the canvas, an array [left, top, width, height] or rectangle {x, y, width, height}, see parse-rect. flip | Use inverted webgl viewport direction (bottom → top) instead of normal canvas2d direction (top → bottom). By default false. pick | If picking data is required. By default true. Disabling reduces memory usage and increases push performance.

waveform.update(options)

Update state of the renderer instance. Possible options:

Property | Meaning ---|--- data | Array or typed array with sample values. Usually it contains values from -1..+1 range, but that can be adjusted via amplitude property. Can be a regl-texture instance or a list of textures, to share data between instances. If you need time series data, have a look at tick-array package to normalize input data values. range | Visible data x-range, an array [start, end] offsets or a number of the last samples to show. Can also be a 4-value array [xStart, minAmplitude, xEnd, maxAmplityde] compatible with other gl-components, in this case amplitude property is ignored. Negative number value counts data from the end. null range displays all available data. amplitude | Amplitudes range, number or array [min, max]. null value uses data min/max. color | Trace line color. Can be a color string or an array with float or uint values, eg. [0,0,1,1] or uint8<[100,120,255,255]>, see color-normalize. thickness | Trace line width, number in pixels or a string with units, eg. 3em.

waveform.set(data, offset=0)

Put samples data by the offset. Existing data by that offset is rewritten.

waveform.push(data)

Append new samples to the end.

waveform.render()

Draw trace frame according to the state.

waveform.pick(event|x)

Get information about samples at x coordinate relative to the canvas. Returns an object with props:

Property | Meaning ---|--- average | Average value for the picking point. The one actually visible on the screen. sdev | Standard deviance for the picking point. x, y | Actual coordinates of picking value relative to canvas. offset | An array with [left, right] offsets within data.

waveform.clear()

Clear viewport area dedicated for the instance.

waveform.destroy()

Dispose waveform instance, data and all assiciated resources.

Properties

  • waveform.gl - WebGL context.
  • waveform.canvas - canvas element.
  • waveform.regl - regl instance.

License

© 2018 Dmitry Yv. MIT License