import makeAudioBuffer from '../utils/makeAudioBuffer'
import getBufferListLength from './getBufferListLength';

const cache = new Map<AudioBuffer[], AudioBuffer>();

export default (buffers: AudioBuffer[]) => {
  const cached = cache.get(buffers);
  if (cached) {
    return cached;
  }
  const output = makeAudioBuffer({
    numberOfChannels: buffers[0].numberOfChannels,
    length: getBufferListLength(buffers),
    sampleRate: buffers[0].sampleRate
  });
  let offset = 0;
  for (let i = 0; i < buffers.length; i ++) {
    for (let c = 0; c < output.numberOfChannels; c ++) {
      output.copyToChannel(buffers[i].getChannelData(c), c, offset);
    }
    offset += buffers[i].length;
  }
  cache.set(buffers, output);
  return output;
}
