audio
Version:
Audio loading, editing, and rendering for JavaScript
22 lines (19 loc) • 831 B
JavaScript
import { opRange } from '../plan.js'
const mix = (chs, ctx) => {
let source = ctx.args[0], sr = ctx.sampleRate, chLen = chs[0].length
if (typeof source === 'number') throw new TypeError('mix: expected audio instance or Float32Array[], not a number')
let sLen = Array.isArray(source) ? source[0].length : source.length
let [s] = opRange(ctx, chLen)
let srcOff = Math.max(0, -s), dstOff = Math.max(0, s)
let n = Math.min(sLen - srcOff, chLen - dstOff)
if (ctx.duration != null) n = Math.min(n, Math.round(ctx.duration * sr) - srcOff)
if (n <= 0) return chs
let src = ctx.render(source, srcOff, n)
for (let c = 0; c < chs.length; c++) {
let m = src[c % src.length]
for (let i = 0; i < n; i++) chs[c][dstOff + i] += m[i]
}
return chs
}
import audio from '../core.js'
audio.op('mix', { process: mix })