【发布时间】:2015-05-15 02:28:21
【问题描述】:
免责声明:nodeJS 和音频解析的新手
我正在尝试在 node-icecast 的帮助下通过 expressJS 应用程序代理数字广播流,效果很好。我正在获取收音机的 mp3 流,并通过 node-lame 将 mp3 解码为 PCM,然后将其发送到扬声器。所有这些都直接来自 github 项目的自述文件示例:
var lame = require('lame');
var icecast = require('icecast');
var Speaker = require('speaker');
// URL to a known Icecast stream
var url = 'http://firewall.pulsradio.com';
// connect to the remote stream
icecast.get(url, function (res) {
// log the HTTP response headers
console.error(res.headers);
// log any "metadata" events that happen
res.on('metadata', function (metadata) {
var parsed = icecast.parse(metadata);
console.error(parsed);
});
// Let's play the music (assuming MP3 data).
// lame decodes and Speaker sends to speakers!
res.pipe(new lame.Decoder())
.pipe(new Speaker());
});
我现在正在尝试设置一个服务来使用 Doreso API 识别音乐。问题是我正在使用流并且没有文件(而且我对可读和可写流的了解还不够,而且学习速度很慢)。我一直在寻找一段时间来尝试写入流(理想情况下写入内存),直到我有大约 10 秒的时间。然后我会将那部分音频传递给我的 API,但是我不知道这是否可能,也不知道从哪里开始切片 10 秒的流。我想可能会尝试将流传递给 ffmpeg,因为它有一个 -t 选项持续时间,也许这可能会限制它,但是我还没有让它工作。
任何将视频流缩短到 10 秒的建议都很棒。谢谢!
更新:改变了我的问题,因为我最初认为我正在获取 PCM 并转换为 mp3 ;-) 我倒退了。现在我只想在流仍然为扬声器提供信息时切掉部分流。
【问题讨论】:
-
基本上,而不是将其通过管道传输到 lame.Decoder() 中,您应该将它的 n 秒或字节转储到内存或文件中。一旦你有了它,你可能可以直接把它交给你提到的那个 API。
-
谢谢。我喜欢这样的声音,虽然我不确定我会如何在 n 秒/字节(read newbie)内将其转储出来,也许你可以提供一个例子?作为答案?我想这就是我要找的。span>
标签: node.js audio pcm icecast node-lame