riffusion-app-hobby
用 Stable Diffusion「画」出频谱图,再转成音乐——文字转 AI 作曲的创新实践
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用 Stable Diffusion「画」出频谱图,再转成音乐——文字转 AI 作曲的创新实践
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有想过,只要输入一句「爵士钢琴,舒缓放松」,就能得到一段专属的背景音乐?Riffusion 让这件事变成了现实——它不是直接生成音频,而是让 Stable Diffusion「画出」音乐的频谱图,再把频谱图转成声音。
想象一下,当你用文字描述一段音乐时,AI 其实是在脑海中构建一段声波的「可视化图像」。Riffusion 正是抓住了这个原理,将文本到图像的生成能力嫁接到了音乐生成领域。
Riffusion 诞生于 2022 年底,由美国创业者 Seth Forsgren 和工程师 Hayk Martiros 共同开发,两人是多年的创客伙伴。项目最初只是一个周末兴趣项目,目的是探索「能不能用 Stable Diffusion 做点不一样的事」。他们在 GitHub 首页写下了「stable diffusion for real-time music generation」,没想到迅速在社交媒体上病毒式传播,项目 Star 数在数周内从零冲到数万。
Riffusion 的核心思路非常巧妙:不对音频波形直接建模,而是对音频的**频谱图(Spectrogram)**进行图像生成。Stable Diffusion 本身对图像的理解能力极强,只要将音乐转化为频谱图图像,就能利用 SD 的强大生成能力来「作曲」,再通过逆变换得到真实音频。这一技术路径大大降低了音乐生成的门槛,因为 SD 社区积累了大量的图像生成经验可以直接复用。
目前 Riffusion 已被收录在 Hugging Face 的模型库中,其底座模型 riffusion-model-v1 基于 Stable Diffusion v1.5 微调而来,原始 SD 模型的 CLIP 文本编码器已经具备对音乐概念的语义理解能力,为微调提供了良好基础。项目虽已标记为「不再活跃维护」,但其核心思路仍在持续影响后续的 AI 音乐生成研究。
从代码结构来看,Riffusion App 采用的是前后端分离架构:前端是一个纯静态的 Next.js 应用,负责 UI 交互和音频播放;推理生成部分完全依赖外部 Flask 后端服务(riffusion-inference)。
前端采用 Next.js + TypeScript 构建,页面入口为 pages/index.tsx,采用 React Hook 管理状态,核心状态包括:
推理请求由 ModelInference.tsx 组件发起,通过 API 调用外部 Flask 服务(RIFFUSION_FLASK_URL 环境变量指定),请求体包含 start/end 两组提示词、采样步数、去噪强度等参数。后端返回频谱图图像 URL 和音频 URL,前端负责展示和播放。
一个有趣的细节是 ModelInference.tsx 支持 URL Query String 初始化参数,用户可以通过 URL 参数直接指定推理参数(如 ?alphaVelocity=0.3&seed=42&guidance=7.5),这使得 Riffusion 具备很强的可分享性——用户可以直接把生成链接分享给朋友。
Riffusion 最令人惊艳的地方在于其可视化效果。ThreeCanvas.tsx 使用 @react-three/fiber 和 @react-three/drei 在浏览器中构建了一个 3D 空间,频谱图不再是一张静态图片,而是一系列在三维空间中连续飞行的「光栅」。
SpectrogramViewer.tsx 实现了核心渲染逻辑:
Shader 层面,shaders.js 定义了自定义的顶点着色器(处理频谱高度映射)和片元着色器(色调调整),通过 GLSL 代码精确控制频谱图像素到 3D 几何的映射关系。这套可视化方案在技术上有一定门槛,但也正因此成为了 Riffusion 区别于其他 AI 音乐工具的核心视觉标签。
音频播放层使用 Tone.js(专业 Web Audio 库),负责同步音频播放与 3D 动画的进度。AudioPlayer.tsx 组件管理音频加载、播放/暂停和进度控制。
必须直面的现实是:Riffusion App 本身只是一个「壳」,真正的 AI 生成能力需要独立的推理后端。README 明确说明「You will need a large GPU that can run stable diffusion in under five seconds」,推荐使用 NVIDIA GPU 运行 Stable Diffusion,且推理耗时需控制在 5 秒以内才能保证实时体验。
部署需要两套环境:
npm install && npm run dev,无需 GPU两套服务通过本地 HTTP 接口通信,前端 .env.local 配置 RIFFUSION_FLASK_URL=http://127.0.0.1:3013/run_inference/ 即可。项目没有提供 Dockerfile 或 docker-compose,这在有多服务依赖的场景下给部署带来了一定复杂度。
Riffusion 的出现证明了「跨模态迁移」在 AI 生成领域的巨大潜力——将图像生成能力嫁接到音频领域,不需要重新训练一个完整的音频生成模型。但其局限性同样明显:
尽管如此,Riffusion 开创的「图像生成模型 → 频谱图 → 音频」技术路径,为后续 AudioGen、MusicGen 等专门音频模型的研究提供了重要启发。其 2600+ 的 Star 数也证明了市场对「低门槛 AI 音乐创作工具」的强烈需求。
图1:Riffusion 组织头像
