我找到了一个用于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文件调用的方法吗?