2014-11-07 3 views
1

Я использую Web Audio для различных целей, и в то время как образцы, загруженные через URL-адрес и генераторы, работают правильно и правильно работают, создание настраиваемого исходного буфера - нет. Я попытался загрузить свой собственный AudioBuffer в AudioBufferSourceNode, используя код ниже и через отладчик Chrome-NetBeans. Я вижу, что он загружает буфер с данными, а ошибки не помечены, но когда вызывается start, звук не создается. Обратите внимание, что я просто заполняю буфер шумом, но я планирую заполнить его своими собственными волновыми данными. Я понимаю, что, вероятно, я заполняю буфер неправильным типом данных, но мне не удалось найти какую-либо документацию или примеры относительно правильного способа ее выполнения. Любая помощь будет оценена по достоинству.Заполнение моего собственного веб-аудио буфера не работает

var audioContext = new (window.AudioContext || window.webkitAudioContext)(); 
var frameCount = 2000; 
var sampleRate = 4000; 
var myBuffer = audioContext.createBuffer(2, frameCount, sampleRate); 

// FILL WITH WHITE NOISE 
for (var i = 0; i < frameCount; i++) { 
    myBuffer[i] = Math.random() * 2 - 1; 
} 
sourceNode = audioContext.createBufferSource(); 
sourceNode.buffer = myBuffer; 
sourceNode.connect(audioContext.destination); 
sourceNode.start(0); 

ответ

0

Это Synth шуметь внутри метода обратного вызова, который называется каждый раз, когда вы оказали еще один BUFF_SIZE количество образцов

var BUFF_SIZE = 2048; // spec allows, yet do not go below 1024 
var audio_context = new AudioContext(); 
var gain_node = audio_context.createGain(); 
gain_node.connect(audio_context.destination); 
var source_node = audio_context.createScriptProcessor(BUFF_SIZE, 1, 1); 

source_node.onaudioprocess = (function() { 

    return function(event) { 

     var synth_buff = event.outputBuffer.getChannelData(0); // mono for now 

     // FILL WITH WHITE NOISE 
     for (var i = 0, buff_size = synth_buff.length; i < buff_size; i++) { 
      synth_buff[i] = Math.random() * 2 - 1; 
     } 
    }; 
}()); 

source_node.connect(gain_node); 
Смежные вопросы