在JavaScript中逐块播放声波

时间:2018-08-12 16:27:27

标签: javascript audio

我找到了一个用于JS的程序,该程序可以计算0.5秒或选择使用什么时间的正弦波序列。然后打开音频输出以添加波形序列。

var context = new AudioContext();
var musicRunning=true;

var volume = 0.2, seconds = 0.5, tone = 441, sinNr=0
var arr0 =[context.sampleRate * seconds]
var buf0 = new Float32Array(context.sampleRate * seconds)

var buffer0 = context.createBuffer(1, (context.sampleRate * seconds), context.sampleRate)
var source0 = context.createBufferSource();

function playSound(arr,buf,source) {
    createSineChunk(arr)
    for (var i = 0; i < arr.length; i++) buf[i] = arr[i]
    var buffer = context.createBuffer(1, buf.length, context.sampleRate)
    buffer.copyToChannel(buf, 0)
    source.buffer = buffer;
    source.connect(context.destination);
}
function startSound(source)
{
    source.start(0);
}
function sineWaveAt(sampleNumber, tone) {
    var sampleFreq = context.sampleRate / tone
    return Math.sin(sampleNumber / (sampleFreq / (Math.PI*2)))
}
function createSineChunk(arrIntern) {
    for (var i = 0; i < context.sampleRate * seconds; i++) {
        arrIntern[i] = sineWaveAt(sinNr, tone) * volume
        sinNr++;
    }
}
playSound(arr0,buf0,source0)
startSound(source0)

我想找到一种不断向输出中添加新声音块的方法,以便可以与声波进行交互,例如更改音量等。是否有任何方法可以向输出中添加更多缓冲块?谢谢

编辑: 也许有一种方法可以逐块添加数据到流中,并让该流被

捕获
navigator.mediaDevices.getUserMedia(constraints)
.then(function(stream) {
     source = audioCtx.createMediaStreamSource(stream);
})

在Java中,有多种方法可以实现,但是我不想使用Javaserver。仅用于处理音频,javaapplet可以替代从javascript文件调用的方法吗?

0 个答案:

没有答案