audio-buffer-list
Extension of BufferList for AudioBuffers. Handy and performant to deal with (possibly long) sequence of audio buffers − accumulate, read, stream, modify, delete etc.
Usage
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
abl.slice()
API
Table of Content
- new AudioBufferList(src?, opts?)
- list.append(buf)
- list.insert(idx?, buf)
- list.remove(idx?, len)
- list.delete(idx?, len)
- list.consume(len)
- list.slice(from?, to?)
- list.clone(from?, to?)
- list.map(fn, from?, to?)
- list.each(fn, from?, to?, opt?)
- list.reverse(from?, to?)
- list.repeat(times)
- list.copy(dst?, from?, to?)
- list.copyFromChannel(dst, ch, from?, to?)
- list.copyToChannel(src, ch, from?)
- list.split(a, b, c, ...)
- list.join(from?, to?)
- list.offset(idx)
- list.destroy()
- AudioBufferList.isInatance(arg)
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.delete(offset=0, count)
Same as list.remove
, but returns current list with deleted part being lost. That allows for different type of chainability.
list.consume(count)
Delete data from the beginning. Returns current list.
list.slice(start=0, end=-0)
Return sublist of the initial list. The data is not copied but returned as subarrays. list.slice()
just creates a duplicate that way.
list.clone(start=0, end=-0)
Return copy of the list, consisting of cloned buffers.
list.map((buffer, index, offset) => buffer|bool?, from=0, to=-0)
Create new list by mapping every buffer. Optionally pass offsets from
and to
to map only buffers covering the subset, keeping the rest unchanged. If no buffer returned from the mapper function then the old buffer will be preserved. If null
returned then the buffer will be discarded. offset
tracks absolute buffer
offset in new list, index
reflects buffer count.
list = list.map((buf, idx, offset) => {
for (let c = 0; c < channels; c++) {
let data = buf.getChannelData(c)
for (let i = Math.max(from - offset, 0), l = Math.min(to - offset, buf.length); i < l; i++) {
data[i] = process(data[i])
}
}
}, from, to)
list.each((buffer, index, offset) => {}, from=0, to=-0, {reversed}?)
Iterate over buffers from the indicated range. Buffers can be modified in-place during the iterating. Return false
to break the loop. Pass {reversed: true}
as the last argument to iterate in reverse order.
list.reverse(start=0, end=-0)
Reverse indicated part of the list. Modifies list in place, returns self.
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, ...)
Split list at the indicated indexes. That increases number of inner buffers.
list.join(start=0, end=-0)
Joins buffers from the indicated range.
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.
AudioBufferList.isInstance(arg)
Check if passed argument is instance of AudioBufferList.
See also