2015-09-17 104 views
0

我想使用信号“1 0 0 0”生成方波声音。每个代码(0,1)都有一个如picture所示的模式。javascript生成方波声音

例如,代码1会产生500μs的声音,而停止1000μs。信号应该从零到最大正振幅,不会有任何负振幅。声音的频率为10KHz。

基本上我需要从移动设备(iPhone,Android和Windows Phone 8)生成此声音。我正在使用Cordova框架。有什么建议么?

回答

1

入住这

var frequency = 10000; 
var data = { 
    1: {duration:500, sleep:1000}, 
    0: {duration:500, sleep:500} 
} 
var audio = new window.webkitAudioContext(); 


//function creates an Oscillator. In this code we are creating an Oscillator for every tune, which help you control the gain. 
//If you want, you can try creating the Oscillator once and stopping/starting it as you wish. 
function createOscillator(freq, duration) { 
    var attack = 10, //duration it will take to increase volume full sound volume, makes it more natural 
     gain = audio.createGain(), 
     osc = audio.createOscillator(); 

    gain.connect(audio.destination); 
    gain.gain.setValueAtTime(0, audio.currentTime); //change to "1" if you're not fadding in/out 
    gain.gain.linearRampToValueAtTime(1, audio.currentTime + attack/1000); //remove if you don't want to fade in 
    gain.gain.linearRampToValueAtTime(0, audio.currentTime + duration/1000); //remove if you don't want to fade out 

    osc.frequency.value = freq; 
    osc.type = "square"; 
    osc.connect(gain); 
    osc.start(0); 


    setTimeout(function() { 
     osc.stop(0); 
     osc.disconnect(gain); 
     gain.disconnect(audio.destination); 
    }, duration) 
} 

function play() { 
    //your pattern 
    var song = [1,0,1,1];  

    timeForNext = 0; 
    for (i=0;i<song.length;i++){    
     duration = data[song[i]].duration; 
     //use timeout to delay next tune sound 
     window.setTimeout(function(){ 
      createOscillator(frequency, duration); 
     },timeForNext);   
     timeForNext+=data[song[i]].sleep;  
    } 
} 

//play the music 
play(); 

此链接有一些好的信息http://www.bit-101.com/blog/?p=3896我用它在不久前创建科尔多瓦钢琴应用程序。尽管如此,还没有发表。

+0

非常感谢您的帮助。我想是这样,而不是“timeForNext + = data [song [i]] sleep;”,我们必须写下“timeForNext = timeForNext + data [signal [i]]。duration + data [signal [i]]。以获得适当的睡眠延迟。 – Shahxeb