Skip to main content

概述

Audio 模块是 Kira 的音乐生成和播放工作区,支持歌曲生成(generateMusic)、器乐生成(generateInstrumental)和添加人声(addVocals),与图片和视频编辑器共享同一个 Generator 页面。

组件层次

核心组件

AudioPlayerCard

主音频播放器,位于 Generator 和 Rewind 页面。
components/feature/common/generator/audio-player-card.tsx
功能说明
Howler.js 播放器HTML5 音频播放
CD 动画播放时旋转 CD 封面
同步歌词支持逐字高亮和自动滚动
进度条拖拽定位,时间显示
播放控制播放/暂停、循环、歌词切换

布局规格

参数桌面端移动端
卡片宽度424px自适应
卡片高度500px自适应
封面尺寸320×320px280×280px

同步歌词系统

支持逐字级别的歌词同步高亮:
  • SyncedWord 数据结构包含 textstartend 时间戳
  • 段落/行分组,支持 CJK(中日韩)智能空格检测
  • 实时高亮当前词,fill 动画效果
  • 自动滚动到当前行
  • 无同步数据时降级为纯文本歌词

CanvasAudioPlayer

Canvas 集成播放器,嵌入聊天画布中。
components/feature/common/generator/canvas-audio-player.tsx
  • 布局:桌面端安全宽度的 60%,移动端全宽减边距
  • 状态占位卡片:pending/processing 旋转渐变边框、failed 红色边框
  • OrbitingBorderBeam 动画用于 processing 状态

MusicGenerationCard

聊天消息中的音乐生成状态卡片。
components/feature/common/chat/message/assistant/music-generation-card.tsx
状态展示
pending / processing旋转渐变边框 + loading 动画
completed音频就绪
failed错误信息 + 重试按钮
insufficient_credits / plan升级/充值引导

MediaSelector

底部媒体切换轮播,支持图片、视频和音频混合展示。
components/feature/common/generator/media-selector.tsx
  • 合并图片、视频和音频,按 createdAt 排序
  • 音频缩略图显示封面 + 音符图标(无封面时显示默认图标)
  • 处理中的音频显示 OrbitingBorderBeam 动画(青色)
  • 类型特定的状态指示器

工具栏

PC 端

工具栏位置包含
PCAudioToolBar右侧边栏MusicGenerate, InstrumentalGenerate, AddVocals
PCTopToolBar顶部居中NewThread, Upload, AudioExport, Backward, Forward, Delete

移动端

工具栏位置包含
MobileAudioToolBar底部AI 标签页: MusicGenerate, InstrumentalGenerate, AddVocals;Basic 标签页: AudioExport, Backward, Forward, Delete
移动端音频工具栏使用 AI/Basic 标签页切换,与图片和视频工具栏保持一致的交互模式。

工具按钮

工具组件EditMode条件
歌曲生成MusicGenerategenerateMusic有 Credits
器乐生成InstrumentalGenerategenerateInstrumental有 Credits
添加人声AddVocalsaddVocals音频已完成 + hasVocals === false
音频导出AudioExport音频已完成

Selector 组件

MusicSelector

歌曲生成配置面板。
配置项说明
歌曲标题可选,AI 可自动生成
歌词文本输入,支持结构标签
音乐提示词风格/情绪描述
封面图片可选上传,使用 ImageUploaderProvider
发送格式:
::::poisson-function function=generateMusic title="..." lyrics="..." prompt="..." coverImageId="..."
::::

InstrumentalSelector

器乐生成配置面板。
配置项说明
曲目标题可选
器乐提示词风格描述(必填)
封面图片可选上传

AddVocalsSelector

人声添加配置面板。
配置项说明
人声风格风格标签(必填)
人声提示词人声描述(必填)
排除标签可选
高级设置Style Weight / Weirdness / Audio Weight 滑块 (0-100)

音频生成流程

1

进入音乐生成模式

用户点击 MusicGenerate / InstrumentalGenerate / AddVocals 按钮 → editMode 设为对应模式
2

配置参数

Selector 面板展开,用户设置歌词、提示词、封面等参数
3

发送请求

确认后通过 function-call 格式发送到 AI Agent
4

实时状态更新

WebSocket 推送音频状态变更,UI 实时更新
5

播放音频

生成完成后 AudioPlayerCard 自动加载播放

实时通知

通过 Centrifugo WebSocket 接收音频状态更新:
hooks/useMusicNotificationHandler.ts
消息类型处理
audio_status统一通知类型,根据 audio.status 字段更新 versions 缓存、当前选中音频、消息列表

更新目标

  1. Versions 缓存 — TanStack Query 数据中的音频列表
  2. 当前选中音频 — Zustand store 中的 currentSelectAudio
  3. Messages 缓存 — 聊天消息列表中的音乐生成卡片
  4. TempMessages 缓存 — 临时消息中的音乐生成卡片

状态管理

// store/poisson.ts
interface PoissonState {
  currentSelectAudio?: Audio;                              // 当前选中的音频
  currentSelectMediaType: "image" | "video" | "audio";     // 当前媒体类型
  editMode: EditMode;                                      // 包含音乐相关模式
}
方法说明
setCurrentSelectAudio(threadId, audio)设置当前选中音频
getCurrentSelectAudio(threadId)获取当前选中音频
setEditMode(threadId, "generateMusic")进入歌曲生成模式

音频数据模型

// models/version.ts
interface Audio {
  taskId: string;
  provider?: string;
  title?: string | null;
  lyrics?: string | null;
  prompt?: string | null;
  audioId?: string | null;
  coverId?: string | null;
  durationMs?: number | null;
  syncedLyrics?: Array<{ text: string; start: number; end: number }> | null;
  hasVocals?: boolean | null;
  hasInstrumental?: boolean | null;
  status: "pending" | "processing" | "completed" | "failed"
    | "insufficient_credits";
  errorMessage?: string | null;
  createdAt: string;
  blurhash?: string | null;
  url?: string;         // Signed URL
  coverUrl?: string;    // 封面 Signed URL
}

Hooks

Hook文件说明
useAudioPlayeruse-audio-player.tsHowler.js 播放器状态 (play/pause/seek/volume/loop)
useSubmitMusicTaskuseSubmitMusicTask.ts重新提交被阻塞的音乐任务
useMusicNotificationHandleruseMusicNotificationHandler.tsWebSocket 音频状态通知处理

Feed 音频

音频可以发布到用户 Feed:
平台组件展示
PCPCFeedCard封面图 + 音符图标
MobileMobileFeedCard封面图 + 音符图标

相关文档