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

audio-buffer-list

v5.0.0

Published

Data structure for sequence of AudioBuffers

Downloads

1,279

Readme

audio-buffer-list Build Status unstable Greenkeeper badge

Extension of BufferList for AudioBuffers. Handy and performant to deal with (possibly long) sequence of audio buffers − accumulate, read, stream, modify, delete etc.

Usage

npm install audio-buffer-list

const AudioBufferList = require('audio-buffer-list')
const AudioBuffer = require('audio-buffer')
const util = require('audio-buffer-utils')

let abl = new AudioBufferList(util.create([0, .1, .2, .3]), util.create(100))

abl.append(util.create(100))

abl.length // 204
abl.slice() // <AudioBuffer 0, .1, .2, .3, 0...>

API

Table of Content

new AudioBufferList(source, options?)

Creates new audio buffer list instance, new is not strictly required.

source can be AudioBuffer, AudioBuffer array, AudioBufferList or AudioBufferList array.

options may provide numberOfChannels, context for web audio API context and sampleRate.

The created list instance contains the following properties:

  • list.buffers − sequence of audio buffers with actual data.
  • list.length − total length of list in samples, i.e. sum of inner buffer lengths.
  • list.duration − total duration of the audio list, i.e. sum of buffers durations.
  • list.numberOfChannels − detected from the buffer with max number of channels in the list. Can be set by options.
  • list.sampleRate − just for convenience with AudioBuffer interface.

list.append(buffer)

Insert new AudioBuffer, AudioBufferList or array of them to the end.

list.insert(offset=0, buffer)

Put new AudioBuffer, AudioBufferList or array of them at the offset.

list.remove(offset=0, count)

Remove number of samples from the list starting at the offset. count can possibly be negative, then items are removed on the left side from the offset. offset can also be negative, meaning to remove from the end. Retuns removed sublist instance.

list.slice(start=0, end=-0)

Return sublist of the initial list. The data is not copied but returned as subarrays.

list.map(mapper, from=0, to=-0, {reversed: false})

Map buffers from the interval defined by from and to arguments. Modifies list in-place.

Mapper function has signature (buffer, idx, offset) => buffer. buffer is an audio buffer to process, idx is buffer number, and offset is first buffer sample absolute offset. If mapper returns undefined, the buffer is preserved. If mapper returns null, the buffer is discarded. If mapper returns false, iterations are stopped.

Pass {reversed: true} option to walk in reversed order.

list = list.map((buf, idx, offset) => {
  for (let c = 0; c < channels; c++) {
    let data = buf.getChannelData(c)

    //start buffer from the subset may start earlier than the subset
    //end buffer from the subset may end later than the subset
    for (let i = 0, l = buf.length; i < l; i++) {
      data[i] = process(data[i])
    }
  }
}, from, to)

list.repeat(count)

Repeats contents of the list specified number of times. Modifies list in-place, returns self.

list.copy(dest?, start=0, end=-0)

Put data into destination AudioBuffer or create one. It is like slice, but returns an AudioBuffer.

list.copyFromChannel(dest, channel, startInChannel=0, end=-0)

Put data from the channel to destination FloatArray. Optional startInChannel defines offset in the channel to start from.

list.copyToChannel(src, channel, startInChannel=0, end=-0)

Put data from the source FloatArray into channel, optionally starting at startInChannel offset.

list.split([a, b, c, ...], d, e, ...)

Split list at the indicated indexes. That increases number of inner buffers.

list.join(start=0, end=-0)

Joins buffers from the indicated range. Returns an AudioBuffer with joined data.

list.offset(idx)

Return [bufIdx, offset] pair for any sample number. bufIdx is the number of buffer in the list, offset is sample offset inside of that buffer.

list.destroy()

Clean up list.

See also