0.13.4 • Published 11 months ago

@dank-inc/banger v0.13.4

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

Is it a banger?

answer. yes.

This is a WebAudio API library written with Typescript

infinite polyphony! randomized sounds!

Usage

Banger

  • single soundfile player
  • pitch variation
  • polyphonic!

Example

const banger = new Banger({
  name: 'Kick',
  arrayBuffer: await getWav(
    'https://cwilso.github.io/MIDIDrums/sounds/drum-samples/CR78/kick.wav',
  ),
})

banger.loading // state while sources is loading (can be used for ui loading screens)

banger.play() // plays the sound!

MultiBanger

  • takes a folder of sounds
  • randomizes playing of said sounds
  • does the things the Banger does
  • is dank
  • probably needs some kind of optimization

Example

const files = [
  'https://cwilso.github.io/MIDIDrums/sounds/drum-samples/CR78/kick.wav',
  'https://cwilso.github.io/MIDIDrums/sounds/drum-samples/CR78/snare.wav',
  'https://cwilso.github.io/MIDIDrums/sounds/drum-samples/CR78/hihat.wav',
  'https://cwilso.github.io/MIDIDrums/sounds/drum-samples/CR78/tom1.wav',
  'https://cwilso.github.io/MIDIDrums/sounds/drum-samples/CR78/tom2.wav',
  'https://cwilso.github.io/MIDIDrums/sounds/drum-samples/CR78/tom3.wav',
]

const multiBanger = new MultiBanger({
  name: 'drumz',
  arrayBuffers: await getWavs(files),
})

multiBanger.loading // while sources are loading.

multiBanger.play() // plays a random sound!

Additional Parameters

along with the basic usage you see above, both players takes the following params in the constructor

type PlayerParams = {
  volume?: number // set the volume of the player 0..1
  reverse?: boolean // play audio in reverse
  loop?: boolean // play audio in a loop!
  drift?: number // detunes the audio this random amount each play
}

Spatial Audio (wip)

currently only 2d panning, attenuation, and head simulation, but it's still fun to use.

const ttib = new SpatialLooper({
  name: 'Looper: Tezos Till I Bezos',
  loop: true,
  arrayBuffer: await getWav(map['tezos'].src),
  onLoaded: () => console.log('>> ttib loaded'),
  onEnded: () => console.log('>> ttib sound ended'),
  onFail: console.error,
  // @ts-ignore
  worldPosition: state.sourceWorldPosition,
  // @ts-ignore
  audibleDistance: 100, // distance in units until audio is not heard
})

// if audio emitter position has changed
ttib.setWorldPosition(
  sourcePosition, // [x, y, z] (y is up)
)

// upon changing of listener position
const [angle, distance] = ttib.get3dValues(
  listenerWorldPosition,
  listenerWorldOrientation
)

ttib.setSpatialValues(angle, distance)

Todo

0.13.4

11 months ago

0.12.0

1 year ago

0.12.1

1 year ago

0.13.1

1 year ago

0.12.2

1 year ago

0.13.2

1 year ago

0.12.3

1 year ago

0.13.3

1 year ago

0.11.8

2 years ago

0.11.9

2 years ago

0.11.7

2 years ago

0.11.10

2 years ago

0.11.11

2 years ago

0.11.12

2 years ago

0.11.5

2 years ago

0.11.6

2 years ago

0.8.4

2 years ago

0.10.0

2 years ago

0.11.0

2 years ago

0.9.0

2 years ago

0.11.1

2 years ago

0.11.2

2 years ago

0.8.3

2 years ago

0.11.3

2 years ago

0.11.4

2 years ago

0.8.1

2 years ago

0.8.0

2 years ago

0.8.2

2 years ago

0.3.0

3 years ago

0.2.0

3 years ago

0.5.0

3 years ago

0.7.0

3 years ago

0.6.1

3 years ago

0.6.0

3 years ago

0.1.1

3 years ago

0.1.0

3 years ago