You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Liquidsoap检测Icecast MP3流BPM并定时保存至本地文件?

使用Liquidsoap检测Icecast MP3流BPM并定时写入文件的解决方案

1. 更新Dockerfile以添加依赖

Liquidsoap的BPM检测功能依赖libsoundtouch库,官方镜像可能未预装,需在Dockerfile中添加安装步骤:

FROM savonet/liquidsoap:8101608

# 安装BPM检测所需的依赖库
RUN apt-get update && apt-get install -y --no-install-recommends \
    libsoundtouch1 \
    && rm -rf /var/lib/apt/lists/*

# 复制脚本到镜像内
COPY script.liq /usr/src/app/script.liq

# 启动命令
CMD ["liquidsoap", "/usr/src/app/script.liq"]

2. 编写Liquidsoap脚本(script.liq)

脚本需完成三个核心操作:拉取Icecast流、检测BPM、每10秒写入文件:

# 替换为你的Icecast流地址
stream_url = "http://你的Icecast服务器地址:端口/流路径.mp3"

# 拉取Icecast流
input_stream = input.http(stream_url)

# 启用BPM检测(检测结果会附加到流的元数据中)
bpm_stream = bpm(input_stream)

# 定义写入BPM到文件的函数
def write_bpm() =
    # 获取当前流的元数据
    current_meta = source.metadata(bpm_stream)
    # 提取BPM值(未检测到时显示N/A)
    bpm_val = list.assoc("bpm", current_meta, "N/A")
    # 写入到本地文件(每次覆盖内容)
    file.write("/usr/src/app/current_bpm.txt", bpm_val ^ "\n")
end

# 设置定时任务:每10秒执行一次写入操作
thread.run.every(10., write_bpm)

# 保持流处理活跃(Liquidsoap要求至少有一个输出才能维持源运行)
output.dummy(bpm_stream)

关键说明

  • BPM检测需要一定的音频数据积累,前几次写入可能显示N/A,等待数秒后会输出有效数值。
  • 若需要持久化保存BPM文件,可在Docker运行时挂载本地目录到/usr/src/app/,避免容器销毁后丢失数据。
  • output.dummy仅用于维持流的处理进程,不会重新广播流;若需要转发处理后的流,可替换为output.icecast等输出模块。

内容的提问来源于stack exchange,提问作者Jannik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 04:27:22