除了尝试捕获之外,对这里的要求没有很好的了解网络音频 https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html以某种编程方式。这里的假设是您希望通过当前正在浏览的页面上以 JavaScript 执行的代码来执行此操作,但这也不完全清楚。
正如隐身所指出的那样,您可以在 Chrome 中使用回调挂起来执行此操作decodeAudioData() https://stackoverflow.com/a/10067038/517815。但是,如果您只是想捕获单个 Web 流的输出并将其解码为 PCM 以在您选择的声音工具中使用,那么这对于您的使用来说可能过于复杂。
对于媒体 URL 被遮挡或难以使用当前工具进行解码的情况,您可能会考虑的另一种策略是从底层声卡捕获 http://www.askdavetaylor.com/how_do_i_capture_an_internet_audio_stream.html。这为您提供免费解码,但如果(且仅当)您的声卡无法有效地对流进行采样时,可能会降低采样率。
据我们所知,无论如何,您已经通过对 PCM 编码的渴望对模拟信号进行了数字编码 http://en.wikipedia.org/wiki/Pulse-code_modulation。显然,只有当您拥有使用采样文件的合法权利时才可以这样做。
不管你选择哪条路,祝你好运。无论是程序化的流剖析还是点采样,您现在应该拥有足够的信息来继续。
Edit:根据OP的附加信息,这似乎是所需的解决方案(合并自here https://stackoverflow.com/questions/7700273/play-mp3-file-after-uploading-it-with-html5-drag-and-drop-upload and here http://nodejs.org/docs/v0.4.8/api/fs.html#file_System, using NodeJS 的实现fs http://nodejs.org/docs/v0.4.8/api/fs.html#file_System):
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!');
});
}
}
(警告:未经测试的代码。如果这不起作用,欢迎编辑。)
这有效地脱出decodeAudioData
from 网络音频 API https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html,从提供的 PCM 中解码data
,然后尝试将其保存到目标saveLocation
。真的很简单。