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

wam-extensions

v0.2.3

Published

Unofficial extensions to the Web Audio Module 2 API

Downloads

24

Readme

wam-extensions

Extensions to the Web Audio Module API

What?

WAM extensions are optional additions to the webaudiomodule API that extend the interaction between WAM plugin and host.

How?

WAM extensions are added to the browser context as window.WAMExtensions. WAM plugins can check for the existence of a specific extension, and then choose to load the special functionality or operate without the extension.

Why extensions? Why not build into core?

The idea behind WAM extensions came from documenting my pain points using AudioUnits in iOS to make music, and from looking at where DAWs have chosen to more tightly integrate their own plugins than what they are able to do with existing plugin technologies like VST or AU.

The problems solved by these extensions are not needed by 90% of WAM extensions. But where the extensions are used, they significantly improve the user experience. By keeping these extensions external, we can keep core focused on pluggable audio modules, and keep each extension focused on solving only the problem it was built to solve.

In most cases, if a host does not implement a WAM extension, the plugin should be able to still function. Some plugins require certain WAM extensions in order to function, but hosts are free to only implement the extensions necessary to provide the desired user experience.

Current extensions

Notes

Notes allows an audio plugin to publish a list of notes and names that it responds to. The host passes this note list to the sequencer plugins that are connected to the audio plugin.

For example, here is the pianoroll WAM without the notes extension:

And here is the pianoroll WAM with the notes extension, sending notes to the drumsampler WAM:

Clips

Clips provide a way for the host to organize and sequence a list of separate sequencer phrases, without any knowledge of the sequencer internals. The user is able to perform or arrange sequencer clips, but the sequencer is a pluggable WAM. For example, the sequencer may be a pianoroll where each clip is specific notes on the staff, or it may be a step sequencer, or it could be a random generator with clip-specific variables like seed and length.

ModulationTarget

This extension allows a WAM to directly modulate another WAM's parameter. This lets us build various automation styles as WAM plugins, and again push the responsibility out of the host. For example, a WAM plugin implementing this extension could implement an LFO or a step modulator, or more traditional style point-to-point automation.

Video

This extension allows WAMs to generate or process video. When instantiating, video WAMs register a delegate that gets passed a WebGLRenderingContext to initialize, and a second function that renders a new frame for the WebGL program. Video WAMs are also Audio WAMs, so they can analyze audio or MIDI to generate visuals or process both audio and video at the same time.

Future Extensions

An 'asset management' extension is required. It would let hosts organize, move, collect assets for a project. Plugins will defer to the host to load assets. Plugins may also create new assets and defer to the host to save them - allowing for workflows like re-sampling or generating audio and then importing into another plugin without leaving the project.