|
@@ -78,9 +78,10 @@ export default class Crunker {
|
|
|
const output = this._context.createBuffer(this._maxNumberOfChannels(buffers), this._sampleRate * this._maxDuration(buffers), this._sampleRate)
|
|
|
buffers.forEach((buffer, index) => {
|
|
|
const offsetNum = Math.round(times[index] * this._sampleRate) //时间偏差
|
|
|
- for (let channelNumber = 0; channelNumber < buffer.numberOfChannels; channelNumber++) {
|
|
|
+ for (let channelNumber = 0; channelNumber < output.numberOfChannels; channelNumber++) {
|
|
|
const outputData = output.getChannelData(channelNumber)
|
|
|
- const bufferData = buffer.getChannelData(channelNumber)
|
|
|
+ // buffers 有可能是单声道,当单声道的时候 取第一个声道的值
|
|
|
+ const bufferData = buffer.getChannelData(buffer.numberOfChannels < 2 ? 0 : channelNumber)
|
|
|
for (let i = bufferData.length - 1; i >= 0; i--) {
|
|
|
// 当合并大于1或者小于-1的时候可能会爆音 所以这里取最大值和最小值
|
|
|
const combinedValue = outputData[i + offsetNum] + bufferData[i]
|