Опан1,
Я имел в виду, что для decodeAudioData не нужно знать sampleRate и numberOfChannels, чтобы получить AudioBuffer, просто передается ArrayBuffer всего файла и всё, а для createBuffer нужно знать, потому что, если использовать дефолтный sampleRate, то у разных пользователей он может оказаться разным и получится, например, разная продолжительность:
// Известна только длина массива
var length = 44100 * 100;
// Пользователь 1
var ctx1 = new AudioContext({ sampleRate: 44100 });
// Пользователь 2
var ctx2 = new AudioContext({ sampleRate: 48000 });
// Допустим это моно (непонятно откуда это известно):
var buf1 = ctx1.createBuffer(1, length, ctx1.sampleRate);
var buf2 = ctx2.createBuffer(1, length, ctx2.sampleRate);
// Проверим утверждение
console.assert(buf1.duration == buf2.duration, '%s != %s', buf1.duration, buf2.duration);