Javascript生成方波声音

javascript generate square wave sound

本文关键字:声音 方波 Javascript      更新时间:2023-09-26

我想使用信号"1 0 0 0"生成一个方波声音。每个码(0,1)有一个图案,如图所示。

例如,代码1将产生500µs的声音,然后在1000µs时停止。信号应该从零到最大的正振幅,不会有任何负振幅。这个声音的频率是10KHz。

基本上我需要从移动设备(iPhone, Android和Windows phone 8)产生这种声音。我使用Cordova框架。有什么建议吗?

检查

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我用它来创建一个钢琴应用程序与Cordova前一段时间。