Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alexanderwallin/custom-audio-node-connect
🔌 A tiny module that allows you to connect custom audio nodes in your Web Audio API audio chain
https://github.com/alexanderwallin/custom-audio-node-connect
Last synced: 4 days ago
JSON representation
🔌 A tiny module that allows you to connect custom audio nodes in your Web Audio API audio chain
- Host: GitHub
- URL: https://github.com/alexanderwallin/custom-audio-node-connect
- Owner: alexanderwallin
- Created: 2016-12-01T19:08:43.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-05-20T23:07:48.000Z (over 7 years ago)
- Last Synced: 2024-10-30T07:49:30.382Z (16 days ago)
- Language: JavaScript
- Size: 2.93 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# custom-audio-node-connect
**`custom-audio-node-connect`** shims the [`AudioNode.connect`](https://developer.mozilla.org/en-US/docs/Web/API/AudioNode/connect) method and lets you choose which audio nodes to actually connect to each other.
This is useful if you want your own custom nodes/effects to be chainable just like any other node.
The code in this module [is copied](https://github.com/Theodeus/tuna/blob/master/tuna.js#L153) straight from the terrific [`tuna`](https://github.com/Theodeus/tuna) by [Theodeus](https://github.com/Theodeus). All cred goes there!
## Installation
```sh
npm i -S custom-audio-node-connect
```## Usage
```js
import enableCustomConnects from 'custom-audio-node-connect'
import BitCrusher from './my-effects/BitCrusher.js'const ctx = new AudioContext()
// Every time `AudioNode.connect(someAudioNode)` is called, the `inputSelector`
// function will be called to determine what to actually connect to.
//
// In this imaginary example, BitCrusher objects has an `input` property
// which is a regular GainNode. If someAudioNode has an `input` property,
// we let the connecting node connect to that, otherwise we just return
// the node as is.
const inputSelector = (node) => node.input || node
enableCustomConnects(ctx, inputSelector)// Create an AudioNode, here an oscillator, together with an instance
// of our custom BitCrusher effect.
const osc = ctx.createOscillator()
osc.frequency.value = 440
const crushEffect = new BitCrusher()// Connecting now works seemlessly. You'll have to implement the
// BitCrusher's `connect()` and `disconnect()` methods yourself. :(
osc.connect(crushEffect)
crushEffect.connect(ctx.destination)
```## API
### `enableCustomConnects(audioContext, inputSelector)`
##### `audioContext`
An [`AudioContext`](https://developer.mozilla.org/en-US/docs/Web/API/AudioContext) instance.
##### `inputSelector`
```js
(node: any) => AudioNode
```A function that takes any object passed to `AudioNode.connect()` and return and `AudioNode` that the connecting node should connect to.
## See also
* [`audio-param-shim`](https://github.com/alexanderwallin/audio-param-shim) - An AudioParam shim that lets you act on value changes in any way you want
* [`Theodeus/tuna`](https://github.com/Theodeus/tuna) - An audio effects library for the Web Audio API.