2012-03-01 5 views
4

У меня есть немного проблемы с ограничением продолжительности этого осциллятора примерно до 10 секунд с использованием audiolib.js. Когда я использовал библиотеку dsp.js, я ограничивал продолжительность использованием bufferSize, но я абсолютно не знаю, как это сделать, используя библиотеку audiolib.js ... Любая помощь будет отличной! Пока я нахожусь в этом, кто-нибудь сможет сказать мне максимальную и минимальную частоту и амплитуду?Неполадка, ограничивающая длительность генератора в JavaScript

$(document).ready(function() { 

    //var context = new webkitAudioContext(); 
    var playing; 
    var dev = audioLib.AudioDevice(audioCallback, 2); 
    var osc = audioLib.Oscillator(dev.sampleRate, 440); 
    //var bfo = audioLib.Oscillator(dev.sampleRate, 1.0); 
    //osc.addAutomation('frequency', bfo, 0.5, 'modulation'); 
    osc.waveShape = 'pulse'; 

    function audioCallback(buffer, channelCount) { 
     if (playing) { 
      //bfo.generateBuffer(buffer.length/channelCount); 
      osc.append(buffer, channelCount); 
      //remove the audiocallback function 
     } 
    } 

    $('#playButton').click(function() { 
     playing = true; 
    }); 

}); 

Cheers!

+0

Что вы подразумеваете под "max и min Частота и амплитуда"? Из осциллятора? – kindohm

ответ

1

Частота дискретизации является количество пробников в секунду, так что вы можете рассчитать количество образцов для воспроизведения путем умножения раз частота дискретизации 10 секунд:

var maxSamples = dev.sampleRate * 10; 

Вы могли бы использовать его как это:

$(document).ready(function() { 

    var playing; 
    var dev = audioLib.AudioDevice(audioCallback, 2); 
    var osc = audioLib.Oscillator(dev.sampleRate, 440); 
    var maxSamples = dev.SampleRate * 10; 
    var totalSamples = 0; 
    osc.waveShape = 'pulse'; 

    function audioCallback(buffer, channelCount) { 
     if (playing) { 
      osc.append(buffer, channelCount); 
      totalSamples += buffer.length/channelCount; 
      if (totalSamples >= maxSamples) { 
       // remove audioCallback 
       dev.kill(); 
      } 
     } 
    } 

    $('#playButton').click(function() { 
     playing = true; 
    }); 

}); 
+0

Спасибо, это здорово ... Не беспокойтесь о максимальной/минимальной частоте/амплитуде. Как удалить AudioCallback? –

+0

Я обновил код выше, чтобы включить вызов dev.kill(). Согласно автору audiolib.js, это предпочтительный (и единственный) метод. К сожалению, вам нужно будет создать новый экземпляр AudioDevice, чтобы снова запустить резервное копирование звука, но это единственный способ удалить звуковой обратный вызов. – kindohm

+0

Jon_091 - это ответ на ваш вопрос или вы все еще ищете дополнительную информацию, прежде чем пометить ответ как принятый? – kindohm