我试图保存来自webAudio API的输出以供将来使用,到目前为止,我认为获取PCM数据并将其保存为一个文件将会达到我的期望,我想知道如果webAudio或mozAudio已经支持保存输出流,如果不是如何我从输出流中获取pcm数据
解决方法
尝试以某种程序化的方式捕获
web audio时,这里的要求不是很好.这里的推测是,您希望通过当前正在浏览的页面上的JavaScript中执行的代码执行此操作,但这还不完全清楚.
Incognito指出,you can do this in Chrome by using a callback hanging off decodeAudioData()
.但是,如果您只是想要捕获单个Web流的输出并将其解码为PCM,以在您选择的声音工具中使用,则可能会对您的用途过于复杂.
您可能会考虑的另一个策略是,当媒体网址被隐藏或使用当前工具进行难以解码的情况下,您可能会考虑这一策略,即capture from your underlying sound card.这样可以免费解码,如果(且仅当)您的声卡无法有效地采集流.
我们知道,you’re already encoding analog signals digitally anyway via your desire for PCM encoding.显然,只有在您有合法权利使用被采样的文件时,才能做到这一点.
不管你选择的路线,最好的运气给你.无论是程序化的流解剖还是抽样,您现在应该有足够的信息来进行.
编辑:根据OP的其他信息,这似乎是所需的解决方案(从here和here合并,使用NodeJS’ implementation of fs
):
var fs = require('fs'); function saveAudio(data,saveLocation) { var context = new (window.AudioContext || window.webkitAudioContext)(); var source = context.createBufferSource(); if(context.decodeAudioData) { context.decodeAudioData(data,function(buffer) { fs.writeFile(saveLocation,buffer,function (err) { if (err) throw err; console.log('It\'s saved!'); }); },function(e) { console.log(e); }); } else { var buffer = context.createBuffer(data,false /*mixToMono*/); fs.writeFile(saveLocation,function (err) { if (err) throw err; console.log('It\'s saved!'); }); } }
(警告:未经测试的代码,如果这不行,欢迎编辑.)
这有效地从the Web Audio API卷出了decodeAudioData,从提供的数据解码PCM,然后尝试将其保存到目标saveLocation.很简单,真的