mcpField
M
music

music

github.com/marswaveai创意与媒体81702 次安装5 周前更新
代码仓库

关于 music

music 是通过 `listenhub music` 命令行使用 Mureka 的 ListenHub 技能,可生成、混音和分析音乐。它适用于音乐创作与音频分析请求,生成任务异步处理,分析命令则同步返回。

主要功能

  1. 01根据提示词或歌词生成歌曲
  2. 02为现有歌曲替换歌词并混音
  3. 03制作器乐及图片或视频配乐
  4. 04延长歌曲或生成单独音轨
  5. 05识别歌词、描述音频并分离音轨

适用场景

  1. 01根据提示词创作原创歌曲
  2. 02为歌曲替换歌词并重新创作
  3. 03为图片或视频制作配乐
  4. 04提取歌词或分离音频轨道

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/marswaveai/skills --skill music

安装后在 Claude Code 中输入/music确认已加载。

附带文件references/music-api.md

详细介绍

适用场景

  • 用户想通过提示词和/或歌词生成原创 AI 音乐
  • 用户想用新歌词混音/重新创作现有歌曲
  • 用户想生成纯器乐曲,或为图像或视频配乐
  • 用户想延长歌曲,或分离/生成单个音轨
  • 用户想分析音频——识别歌词、描述歌曲或分离音轨
  • 用户说“音乐”、“music”、“生成音乐”、“generate music”、“翻唱”/“混音”/“remix”、“续写”/“extend”、“纯音乐”/“instrumental”、“配乐”/“soundtrack”、“分轨”/“stem”、“识别歌词”、“作曲”、“compose”、“create a song”或“做一首歌”

不适用场景

  • 用户想进行文本转语音朗读(使用 /speech)
  • 用户想制作播客讨论(使用 /podcast)
  • 用户想制作带旁白的讲解视频(使用 /explainer)
  • 用户想将语音音频转录为文本,而不是转录歌曲歌词(使用 /asr)

用途

由 listenhub music CLI 调用 Mureka 提供方的完整 ListenHub 音乐工具包。功能包括:

生成(异步——返回任务以供轮询):

  1. generate — 文本和/或歌词 → 新歌曲。可选风格、标题、器乐曲,以及克隆的 --vocal-id。
  2. remix — 现有歌曲 + 新歌词 → 重新创作。输入可以是音频文件、音频 URL 或提供方歌曲 ID。
  3. instrumental — 根据提示词生成纯器乐曲,或通过参考音频引导生成。
  4. soundtrack — 为图像或视频配乐。
  5. track — 从歌曲中分离或生成单件乐器/人声音轨。
  6. extend — 延长歌曲。
  7. cover (已弃用) — 较旧的翻唱流程;建议优先使用 remix。

分析(同步——立即返回结果):

  1. recognize — 带逐行时间戳的歌词。
  2. describe — 描述、标签、流派、乐器。
  3. stem — 将歌曲拆分为独立音轨(ZIP 下载 URL)。

任务管理: list(最近任务)和 get <taskId>(获取单个任务的状态/结果)。

生成命令可使用的模型:auto(默认)、mureka-7.6、mureka-8、mureka-9、mureka-o2。完整的各命令参数参考请参阅 references/music-api.md。

硬性约束

  • 进行任何交互前,始终按照 shared/config-pattern.md 读取配置
  • 按照 shared/cli-patterns.md 执行模式、错误处理和交互模式
  • 始终遵循 shared/cli-authentication.md 检查身份验证
  • 切勿将文件保存到 ~/Downloads/ 或 .listenhub/;将生成内容保存到当前工作目录,并使用便于识别且基于主题的名称(参见 shared/config-pattern.md § 生成内容命名)
  • 无需选择说话者——音乐生成不使用说话者选择
  • 文件限制(均最大 10 MB):音频 mp3/m4a(track 也接受 wav);图像 jpg/jpeg/png/webp;视频 mp4/mov/avi/mkv/webm
  • 所有时间范围标志的单位均为秒(--generate-start/--generate-end)
  • 对于异步生成命令,使用较长的超时时间:run_in_background: true,timeout: 660000(600s+)。同步命令(recognize、describe、stem)会立即返回
  • cover 已弃用——除非用户明确要求使用 cover,否则应引导用户使用 remix
每次遇到多选步骤,都必须使用 AskUserQuestion 工具——不得以纯文本列出选项。一次只问一个问题。等待用户回答后再进行下一步。收集完所有参数后,汇总选择并请用户确认。用户明确确认前,不得调用任何 CLI 命令。

步骤 -1:CLI 身份验证检查

遵循 shared/cli-authentication.md。如果未安装 CLI 或用户尚未登录,则自动安装并自动登录——绝不可要求用户手动运行命令。

步骤 0:配置设置

遵循 shared/config-pattern.md 的步骤 0(零提问启动)。

如果文件不存在——静默创建默认配置并继续:

mkdir -p ".listenhub/music"
echo '{"outputMode":"download","language":null}' > ".listenhub/music/config.json"
CONFIG_PATH=".listenhub/music/config.json"
CONFIG=$(cat "$CONFIG_PATH")

不要询问任何设置问题。 直接进入交互流程。

如果文件已存在——静默读取配置并继续:

CONFIG_PATH=".listenhub/music/config.json"
[ ! -f "$CONFIG_PATH" ] && CONFIG_PATH="$HOME/.listenhub/music/config.json"
CONFIG=$(cat "$CONFIG_PATH")
设置流程(仅限用户主动重新配置)

仅当用户明确要求重新配置时才运行。显示当前设置:

当前配置 (music):
  输出方式:{inline / download / both}
  语言偏好:{zh / en / 未设置}

然后询问:

  1. outputMode:遵循 shared/output-mode.md § 设置流程问题。

  2. Language(可选):“默认语言?”

    • “中文 (zh)”
    • “English (en)”
    • “每次手动选择” → 保持 null

收集完答案后,立即保存:

NEW_CONFIG=$(echo "$CONFIG" | jq --arg m "$OUTPUT_MODE" '. + {"outputMode": $m}')
if [ "$LANGUAGE" != "null" ]; then
  NEW_CONFIG=$(echo "$NEW_CONFIG" | jq --arg lang "$LANGUAGE" '. + {"language": $lang}')
fi
echo "$NEW_CONFIG" > "$CONFIG_PATH"
CONFIG=$(cat "$CONFIG_PATH")

交互流程

第 1 步:能力

选择能力。如果用户的意图已经明确,则跳过提问(例如,“翻唱”/“混音”/“remix” → remix;“作曲”/“compose”/“做一首歌” → generate;“纯音乐”/“instrumental” → instrumental;“续写”/“extend” → extend;“分轨”/“stem” → stem;“识别歌词” → recognize)。

Question: "想做什么?"
Options:
  - "原创 (Generate)" — 用文字 / 歌词生成全新歌曲
  - "混音 (Remix)" — 基于已有歌曲 + 新歌词重新创作
  - "纯音乐 (Instrumental)" — 生成无人声的器乐
  - "配乐 (Soundtrack)" — 为图片或视频配乐
  - "其他" — 续写 / 单轨 / 识别歌词 / 描述 / 分轨

如果用户选择“其他”,请继续使用 AskUserQuestion 列出以下选项:续写 (Extend)、单轨 (Track)、识别歌词 (Recognize)、描述 (Describe)、分轨 (Stem)。

get <taskId> 和 list 不是交互流程——用户询问任务状态时,直接运行。

第 2 步:收集输入(按能力)

使用下方各能力对应的字段。询问必需输入;提供可选输入。对于任何音频/图像/视频文件,在确认前都要验证:

  • 本地路径:确认文件存在,且扩展名与该命令允许的列表匹配(参见 Hard Constraints / references/music-api.md)。
  • URL:按原样接受(CLI 会进行验证)。
  • 大小:拒绝超过 10 MB 的本地文件。
FILE_SIZE=$(stat -f%z "{path}" 2>/dev/null || stat -c%s "{path}" 2>/dev/null)
if [ "$FILE_SIZE" -gt 10485760 ]; then echo "File exceeds 10 MB limit"; fi

generate — --prompt 和/或 --lyrics(至少提供一项);可选 --style、--title、--model、--instrumental、--vocal-id。

remix — 恰好提供一个输入来源:--audio(文件)/ --audio-url / --provider-song-id;另需 --lyrics 和 --prompt(两者均必需);可选 --style、--title、--model。

instrumental — --prompt / --reference-audio 二选一;可选 --title、--model。

soundtrack — --image / --video 二选一;可选 --prompt、--title、--model。

track — 恰好提供一个输入来源 --audio / --provider-song-id;--generate-type(以下选项之一:Vocals|Instrumental|Drums|Bass|Guitar|Keyboard|Percussion|Strings|Synth|FX|Brass|Woodwinds);可选 --prompt;仅当类型为 Vocals 时提供 --lyrics;--vocal-gender male|female;--generate-start/--generate-end(秒);--model。

extend — 一个输入来源 --audio / --provider-song-id;可选 --prompt、--model。

recognize / describe / stem — 仅需 --audio。stem 还需要 --model audio-separation-1|audio-separation-2。

对于多选字段(model、generate-type、vocal-gender、instrumental 是/否),使用 AskUserQuestion 工具。自由文本字段(prompt、lyrics、style、title)接受纯文本。

第 3 步:确认

总结能力和所有已收集的参数,然后询问用户是否确认。示例:

generate:

准备生成音乐:
  能力:原创 (Generate)
  描述:{prompt / 无}
  歌词:{lyrics / 无}
  风格:{style / 自动}
  标题:{title / 自动}
  模型:{model / auto}
  人声:{带人声 / 纯音乐}
  Vocal ID:{vocal-id / 无}
  确认?

remix:

准备混音:
  能力:混音 (Remix)
  原曲:{audio / audio-url / provider-song-id}
  新歌词:{lyrics}
  描述:{prompt}
  风格:{style / 自动}
  标题:{title / 自动}
  模型:{model / auto}
  确认?

对于分析类能力(recognize / describe / stem),总结内容仅包括能力 + 输入音频(stem 还需包含分离模型);这些操作会同步运行,因此确认可以简单一些。

运行任何 CLI 命令前,必须等待用户明确确认。

工作流

异步生成命令

generate、remix、instrumental、soundtrack、track、extend、cover。

  1. 提交(后台运行),设置 run_in_background: true 和 timeout: 660000。始终传入 --json。只包含用户提供的标志;其余省略。

    generate:

    listenhub music generate \
      --prompt "{prompt}" \
      --lyrics "{lyrics}" \
      --model "{model}" \
      --style "{style}" \
      --title "{title}" \
      --instrumental \
      --vocal-id "{vocal-id}" \
      --json
    

    remix:

    listenhub music remix \
      --audio "{path}" \
      --lyrics "{lyrics}" \
      --prompt "{prompt}" \
      --style "{style}" \
      --title "{title}" \
      --json
    

    (--audio、--audio-url、--provider-song-id 三者中必须且只能使用一个)

    instrumental:

    listenhub music instrumental \
      --prompt "{prompt}" \
      --model "{model}" \
      --json
    

    (也可以使用 --reference-audio "{path}" 代替 --prompt)

    soundtrack:

    listenhub music soundtrack \
      --image "{path}" \
      --prompt "{prompt}" \
      --json
    

    (也可以使用 --video "{path}" 代替 --image)

    track:

    listenhub music track \
      --audio "{path}" \
      --generate-type "Vocals" \
      --lyrics "{lyrics}" \
      --vocal-gender "female" \
      --generate-start 0 --generate-end 30 \
      --json
    

    (也可以使用 --provider-song-id;仅当 --generate-type Vocals 时使用 --lyrics)

    extend:

    listenhub music extend \
      --audio "{path}" \
      --prompt "{how to continue}" \
      --json
    

    CLI 会在内部处理轮询。生成最多可能需要约 10 分钟。

  2. 告知用户任务已提交,完成后会通知他们。如果他们只有 taskId,可以使用 listenhub music get <taskId> --json 或 listenhub music list --json 查询。

  3. 收到完成通知后,呈现结果。CLI JSON 是一个任务对象;歌曲位于 tracks[0],费用为 creditCost,duration 的单位是秒。解析关键字段:

    AUDIO_URL=$(echo "$RESULT" | jq -r '.tracks[0].audioUrl // empty')
    TITLE=$(echo "$RESULT" | jq -r '[.tracks[0].title, .params.title, "Untitled"] | map(select(. != null and . != "")) | .[0]')
    # duration is seconds (older pre-rollout Mureka tasks may still be ms → a value ≥ 3600 means ms)
    DURATION=$(echo "$RESULT" | jq -r '.tracks[0].duration // 0' \
      | awk '{d=$1; if (d>=3600) d/=1000; printf "%d:%02d", int(d/60), int(d%60)}')
    CREDITS=$(echo "$RESULT" | jq -r '.creditCost // empty')
    

    从配置中读取 OUTPUT_MODE。遵循 shared/output-mode.md 中的行为说明。

    inline 或 both: 将音频 URL 显示为可点击链接。

    音乐已生成!
    
    标题:{title}
    在线收听:{audioUrl}
    时长:{duration}
    消耗积分:{credits}
    

    download 或 both: 还要下载文件。按照 shared/config-pattern.md § Artifact Naming 中的说明,根据标题生成 slug。

    SLUG="{slug}"  # e.g. "summer-breeze"
    NAME="${SLUG}.mp3"
    # Dedup: if file exists, append -2, -3, etc.
    BASE="${NAME%.*}"; EXT="${NAME##*.}"; i=2
    while [ -e "$NAME" ]; do NAME="${BASE}-${i}.${EXT}"; i=$((i+1)); done
    curl -sS -o "$NAME" "{audioUrl}"
    
    已保存到当前目录:
      {NAME}
    
同步分析命令

recognize、describe、stem 会在同一次调用中返回结果——在前台运行(不使用后台运行或长超时),并立即呈现结果。

recognize(歌词 + 时间戳):

listenhub music recognize --audio "{path}" --json

describe(描述、标签、流派、乐器):

listenhub music describe --audio "{path}" --json

stem(分离的音轨 → ZIP 下载 URL):

listenhub music stem --audio "{path}" --model "audio-separation-2" --json

在 download/both 模式下,立即将 ZIP URL 下载到当前工作目录。

任务管理
listenhub music list --json            # recent tasks
listenhub music get "{taskId}" --json   # one task's status / result
成功生成后

如果用户明确指定了语言,请使用本次会话中使用的语言更新配置:

if [ -n "$LANGUAGE" ]; then
  NEW_CONFIG=$(echo "$CONFIG" | jq --arg lang "$LANGUAGE" '. + {"language": $lang}')
  echo "$NEW_CONFIG" > "$CONFIG_PATH"
fi

预计耗时:

  • 音乐生成:5-10 分钟

资源

  • 各命令的参数参考:references/music-api.md
  • CLI 身份验证:shared/cli-authentication.md
  • CLI 使用模式:shared/cli-patterns.md
  • 配置模式:shared/config-pattern.md
  • 输出模式:shared/output-mode.md

可组合性

  • 调用:无
  • 由以下内容调用:content-planner(阶段 3)

示例

生成原创音乐:

“帮我做一首关于夏天海边的歌”

  1. 检测:生成模式(“做一首歌”)
  2. 读取配置(首次运行时:使用 outputMode: "download" 创建默认配置)
  3. 推断:模式 = 生成,提示词 = “夏天海边的歌”
  4. 询问:风格?标题?是否为纯音乐?
  5. 确认摘要 → 用户确认
listenhub music generate \
  --prompt "关于夏天海边的歌" \
  --json

等待 CLI 返回结果,然后将 {slug}.mp3 下载到当前工作目录。

混音已有歌曲:

“用 demo.mp3 重新填词混音,把它做成 city pop 风格”

  1. 检测:混音功能(“混音”)
  2. 验证:demo.mp3 存在,格式为 mp3/m4a,大小低于 10 MB
  3. 询问:新歌词(--lyrics,必填)、提示词/方向(--prompt,必填)、风格、标题
  4. 确认摘要 → 用户确认
listenhub music remix \
  --audio "demo.mp3" \
  --lyrics "{new lyrics}" \
  --prompt "rework as upbeat city pop" \
  --style "city pop" \
  --json

等待 CLI 返回结果,然后将 {slug}.mp3 下载到当前工作目录。

生成纯音乐:

“为游戏片头创作一段电子音乐”

  1. 检测:纯音乐功能(“instrumental”)
  2. 推断:提示词 = “游戏片头电子音乐”
  3. 确认摘要 → 用户确认
listenhub music instrumental \
  --prompt "electronic track for a game intro" \
  --json

等待 CLI 返回结果,然后将 {slug}.mp3 下载到当前工作目录。

为视频配乐:

“给这段 clip.mp4 配一段紧张的背景音乐”

  1. 检测:配乐功能(“配乐”),输入为视频
  2. 验证:clip.mp4 存在(mp4/mov/avi/mkv/webm),大小低于 10 MB
  3. 推断:提示词 = “紧张的背景音乐”
  4. 确认摘要 → 用户确认
listenhub music soundtrack \
  --video "clip.mp4" \
  --prompt "tense, suspenseful background score" \
  --json

识别歌词(同步):

“帮我识别 song.mp3 里的歌词”

  1. 检测:歌词识别功能(“识别歌词”)
  2. 验证:song.mp3 存在,大小低于 10 MB
  3. 在前台运行,并显示带时间戳的歌词
listenhub music recognize --audio "song.mp3" --json

分离音轨(同步):

“把 track.mp3 分轨”

  1. 检测:音轨分离功能(“分轨”)
  2. 询问:分离模型(audio-separation-1 / audio-separation-2)
  3. 在前台运行;在下载模式下,将 ZIP URL 中的文件下载到当前工作目录
listenhub music stem --audio "track.mp3" --model "audio-separation-2" --json

评论

支持 Markdown