我有一个简单的合成器,可以在一段时间内播放音符:
// Creating audio graph
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var oscillator = audioCtx.createOscillator();
var gainNode = audioCtx.createGain();
oscillator.connect(gainNode);
gainNode.connect(audioCtx.destination);
// Setting parameters
oscillator.type = "sine";
oscillator.frequency.value = 2500;
// Run audio graph
var currentTime = offlineCtx.currentTime;
oscillator.start(currentTime);
oscillator.stop(currentTime + 1);
如何获取合成器发出的声音的PCM数据?我已经设法使用decodeAudioData对音频样本进行了此操作,但我无法找到基于加载样本的音频图形的等效项。
我特别想用OfflineAudioContext渲染音频图,因为我只关心尽可能快地检索PCM数据。
谢谢!
答案 0 :(得分:2)
您说您想要使用离线上下文,然后您实际上并未使用离线上下文。所以你应该做
var offlineCtx = new OfflineAudioContext(nc, length, rate)
其中nc
=渠道数量,length
是样本数量,rate
是您要使用的样本率。
创建图表,启动所有内容,然后执行
offlineCtx.startRendering().then(function (buffer) {
// buffer has the PCM data you want. Save it somewhere,
// or whatever
})
(我不确定所有浏览器是否支持来自离线上下文的承诺。如果没有,请使用offlineCtx.oncomplete获取数据。请参阅规范。)
答案 1 :(得分:0)
最终我在这里找到了答案:http://www.pp4s.co.uk/main/tu-sms-audio-recording.html#co-tu-sms-audio-recording__js但你不会喜欢它。显然,Audio API不够标准化,因此无法在所有浏览器上运行。所以我能够在Firefox中运行上面的代码,但不能运行Chrome。
基本想法: