【问题标题】:Analyse audio stream using Ruby使用 Ruby 分析音频流
【发布时间】:2012-11-06 00:50:18
【问题描述】:

我正在寻找一种方法来分析互联网收音机的内容。我想编写一个 ruby​​ 客户端,它可以从流中获取当前曲目、下一曲目、乐队、bpm 和其他元信息(例如,广播中的广播)。 有人知道怎么做这个吗?以及如何将该流录制到 mp3 或 aac 文件中?

也许有一个图书馆已经可以做到这一点,我到目前为止还没有。

问候

【问题讨论】:

    标签: ruby stream audio-streaming audio-recording internet-radio


    【解决方案1】:

    我会回答你的两个问题。

    元数据

    您所寻求的并非完全可能。下一首曲目的信息不可用(请记住,并非所有电台都只是播放播放列表中的歌曲......许多都提供现场内容)。 BPM 等高级元数据不可用。你得到的只是这样的:

    Some Band - Some Song
    

    {artist} - {song title} 的格式也不总是被遵循。

    有了这些注意事项,您可以通过连接到流 URL 并使用以下请求标头请求元数据来从流中获取元数据:

    Icy-MetaData: 1
    

    这告诉服务器发送元数据,该元数据被交错到流中。每 8KB 左右(由服务器在响应标头中指定),您会发现一大块要解析的元数据。我在这里写了一个关于如何解析的详细答案:Pulling Track Info From an Audio Stream Using PHP 之前的问题是特定于语言的,但你会发现我的答案可以很容易地用任何语言实现。

    将流保存到磁盘

    音频播放软件通常对错误非常有弹性。 SHOUTcast 服务器建立在此主体之上,并且不了解通过它们的数据。它们只是从编码器接收数据,当客户端请求流时,它们开始在任意点发送该数据。

    您可以在保存流数据时利用这一优势。可以简单地将流数据写入文件。大多数音频播放器都可以毫无问题地播放它们。我已经用 MP3 和 AAC 对此进行了测试。

    如果您想要一个更符合标准的文件,您将不得不使用库或自己解析流以在适当的帧上进行拆分,然后处理代码中的位库问题。这是很多工作,通常不值得做,除非您发现您的文件存在真正的兼容性问题。

    【讨论】:

    • 谢谢,我也找到了你的其他答案;)
    猜你喜欢
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2020-09-18
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多