Shr*_*low 11 javascript html5 web-audio-api
我正在尝试保存webAudio API的输出以供将来使用,到目前为止我认为获取PCM数据并将其保存为文件将符合我的期望,我想知道webAudio或mozAudio是否已经支持保存输出流,如果不是如何可以我从输出流中获取pcm数据
除了尝试以某种程序化方式捕获Web音频之外,还没有很好的需求.这里的假设是你希望从当前正在浏览的页面上的JavaScript中执行的代码执行此操作,但这也不完全清楚.
正如Incognito指出的那样,您可以通过挂断回调在Chrome中执行此操作decodeAudioData().但是,如果您只是尝试捕获单个Web流的输出并将其解码为PCM以便在您选择的声音工具中使用,那么对于您的使用来说,这可能过于复杂.
对于媒体URL被遮挡或难以使用当前工具解码的情况,您可能会考虑的另一种策略是从您的基础声卡中捕获.这使您可以免费解码,如果(并且仅当)您的声卡无法有效地对流进行采样,则可能会降低采样率.
众所周知,无论如何,您已经通过数字方式编码模拟信号,因为您需要PCM编码.显然,只有拥有使用被采样文件的合法权利才能执行此操作.
无论您选择哪条路线,祝您好运.无论是程序化流分析还是现场采样,您现在都应该拥有足够的信息来继续.
编辑:基于来自OP的其他信息,这似乎是所需的解决方案(从此处和此处合并,使用NodeJS的实现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, buffer, function (err) {
if (err) throw err;
console.log('It\'s saved!');
});
}
}
Run Code Online (Sandbox Code Playgroud)
(警告:未经测试的代码.如果这不起作用,欢迎编辑.)
这有效地decodeAudioData从Web Audio API中取出,从提供的PCM解码PCM data,然后尝试将其保存到目标saveLocation.很简单,真的.