AudioBuffer.copyFromChannel() - копіює дані з вказаного каналу в масив.
AudioBuffer.copyFromChannel(destination, channelNumber, startInChannel);
AudioBuffer - об'єкт AudioBuffer.
destination - зміна типу масиву Float32Array в яку необхідно скопіювати дані з вказаного каналу.
channelNumber - номер каналу з якого необхідно скопіювати дані.
startInChannel - не обов'язково вказувати. З якого індексу починати копіювати дані. Значення по замовчуванню 0.
copyFromChannel() метод об'єкту AudioBuffer який копіює дані вказаного каналу в масив Float32Array.
var audioCtx = new window.AudioContext();
var myArrayBuffer = audioCtx.createBuffer(2, 10, audioCtx.sampleRate);
var mas = new Float32Array(myArrayBuffer.length); //створюємо масив куди будемо копіювати дані каналу
myArrayBuffer.copyFromChannel(mas, 0); //копіюємо дані з 1 каналу
alert(mas);
var audioCtx = new window.AudioContext();
var myArrayBuffer = audioCtx.createBuffer(2, 45000, audioCtx.sampleRate); //створюємо буфер на 2 канали
//заповнюємо буфер випадковими даними
for(var channel=0; channel<myArrayBuffer.numberOfChannels; channel++){
var nowBuffering = myArrayBuffer.getChannelData(channel);
for(var i=0;i<myArrayBuffer.length;i++){
nowBuffering[i]=Math.random()*2-1;
}
}
var mas = new Float32Array(myArrayBuffer.length);
myArrayBuffer.copyFromChannel(mas, 0);
alert(mas);
Також можна скопіювати дані каналу присвоївши зміній результат метода AudioBuffer.getChannelData():
var audioCtx = new window.AudioContext();
var myArrayBuffer = audioCtx.createBuffer(2, 5, audioCtx.sampleRate);
var mas = new Float32Array(myArrayBuffer.length); //створюємо масив куди будемо копіювати дані каналу
//заповнюємо буфер випадковими даними
for(var channel=0; channel<myArrayBuffer.numberOfChannels; channel++){
var nowBuffering = myArrayBuffer.getChannelData(channel);
for(var i=0;i<myArrayBuffer.length;i++){
nowBuffering[i]=Math.random()*2-1;
}
}
myArrayBuffer.copyFromChannel(mas, 0); //копіюємо дані з 1 каналу за допомогою copyFromChannel
var mas2=myArrayBuffer.getChannelData(0); //копіюємо дані з 1 каналу через присвоєння
alert('1: '+mas+' \n2: '+mas2);