Webamp 官方示例全解析:从 5 分钟接入到多曲目、多皮肤与 Milkdrop 可视化配置
2026/9/23 22:03:22 网站建设 项目流程

Webamp 官方示例全解析:从 5 分钟接入到多曲目、多皮肤与 Milkdrop 可视化配置

【免费下载链接】webampWinamp 2 reimplemented for the browser项目地址: https://gitcode.com/gh_mirrors/we/webamp

Webamp 是一个用浏览器重新实现 Winamp 2 的开源播放器项目,本指南围绕官方文档 Examples 章节及其对应的 examples 目录,带你逐个吃透仓库中开箱即用的示例:从一行<script>标签的 Minimal 接入,到多曲目播放列表、多皮肤切换、初始窗口布局以及 Milkdrop 可视化等完整配置方案。读完本文,你将能够直接复制这些示例的配置结构,在自己的页面中快速集成并深度定制 Webamp。

示例全景:examples 目录里有什么

官方文档04_examples.md将示例集中存放在仓库的 examples 目录下,每个示例都是一个可独立打开运行的 HTML 页面(多数示例甚至无需构建工具,直接用浏览器打开本地文件即可运行),并配有各自的 README 说明。目录中的示例清单如下:

示例主题核心配置点
Minimal最小化接入script标签 +new Webamp()+renderInto()
Multiple Tracks多曲目播放列表initialTracks数组
Multiple Skins多皮肤切换availableSkins+initialSkin
Minimal Window Layout初始窗口布局windowLayout+enableDoubleSizeMode
Minimal MilkdropMilkdrop 可视化webamp/butterchurn入口

此外,仓库中还有两个更进阶的参考:webamp-demo 是一个功能更完整的综合示例(含桌面图标、SoundCloud 集成等),而 lazy 示例 演示了按需加载(lazy-loading)的模块化用法,本文后续会一并讲解。

Minimal:用<script>标签完成最小化接入

Minimal 示例(examples/minimal/index.html)展示了接入 Webamp 的最小可行路径:从免费 CDN 引入 Webamp bundle,从 CDN 引入音频与皮肤文件,然后写上几行 JavaScript 即可。你甚至可以直接在浏览器中打开这个本地 HTML 文件看到 Webamp 运行(见 examples/minimal/README.md)。

其完整结构如下:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> </head> <body> <div id="app" style="height: 100vh; position: relative"> <!-- Webamp will render as a child of this div --> </div> <script type="module"> import Webamp from "https://unpkg.com/webamp@^2/butterchurn"; const webamp = new Webamp({ initialTracks: [ { metaData: { artist: "DJ Mike Llama", title: "Llama Whippin' Intro", }, // NOTE: Your audio file must be served from the same domain as your HTML // file, or served with permissive CORS HTTP headers: url: "https://cdn.jsdelivr.net/gh/captbaritone/webamp@43434d82cfe0e37286dbbe0666072dc3190a83bc/mp3/llama-2.91.mp3", duration: 5.322286, }, ], }); webamp.renderInto(document.getElementById("app")); </script> </body> </html>

这个示例包含三个关键要素:

  1. 容器元素:页面需要一个用于承载 Webamp 的div,示例中给容器设置了height: 100vhposition: relative,Webamp 会渲染为该div的子元素。
  2. CDN 引入:通过<script type="module">https://unpkg.com/webamp@^2/butterchurn直接以 ES Module 方式导入Webamp类。官方文档 02_install.md 也给出了对应的 NPM 安装方式:npm install --save webampimport Webamp from "webamp/butterchurn"。注意这里使用的webamp/butterchurn入口自 2.2.0 起附带 Butterchurn 库(Milkdrop 可视化),如果你不需要 Milkdrop,也可以改用webamp@^2基础入口。
  3. renderInto():将 Webamp 渲染到指定 DOM 节点,返回一个 Promise,表示加载完成状态。

示例中 URL 注释给出的 CORS 提示非常关键:音频文件必须与 HTML 文件同域,或由服务器返回宽松的 CORS 响应头,否则浏览器会拦截跨域音频读取。更详细的说明见仓库文档 01_cors.md。

Multiple Tracks:用 initialTracks 构建多曲目播放列表

Multiple Tracks 示例 演示如何一次性配置多首曲目。核心是initialTracks数组,每个元素包含metaDataartisttitle)、urlduration三个字段:

<script type="module"> import Webamp from "https://unpkg.com/webamp@^2"; const webamp = new Webamp({ /** * Here we list three tracks. Note that the `metaData` fields and * duration are required to populate the playlist. If any of those * fields are omitted, Webamp will download at least part of each file * on initial page load in order to determine the missing information. */ initialTracks: [ { metaData: { artist: "DJ Mike Llama", title: "Llama Whippin' Intro" }, url: "https://cdn.jsdelivr.net/gh/captbaritone/webamp@43434d82cfe0e37286dbbe0666072dc3190a83bc/mp3/llama-2.91.mp3", duration: 5.322286, }, { metaData: { title: "Heroines", artist: "Diablo Swing Orchestra" }, url: "https://raw.githubusercontent.com/captbaritone/webamp-music/4b556fbf/Diablo_Swing_Orchestra_-_01_-_Heroines.mp3", duration: 322.612245, }, { metaData: { title: "We Are Going To Eclecfunk Your Ass", artist: "Eclectek", }, url: "https://raw.githubusercontent.com/captbaritone/webamp-music/4b556fbf/Eclectek_-_02_-_We_Are_Going_To_Eclecfunk_Your_Ass.mp3", duration: 190.093061, }, ], }); // Returns a promise indicating when it's done loading. webamp.renderInto(document.getElementById("app")); </script>

示例代码中的注释揭示了metaDataduration的作用机制:这两个字段用于在初次渲染时就填充播放列表;如果省略其中任意字段,Webamp 会在页面初始加载时下载音频文件的至少一部分,以便探测缺失的元数据与时长。因此,从性能和体验角度考虑,在你已知曲目信息的前提下,尽量把artisttitleduration都提供完整,可以避免初始加载时的额外网络请求。

Multiple Skins:用 availableSkins 实现皮肤切换菜单

Multiple Skins 示例 演示了多皮肤配置,关键配置项为availableSkins(可用的皮肤列表,会出现在 Options 菜单的 "Skins" 子菜单中)与initialSkin(启动时加载的默认皮肤):

const webamp = new Webamp({ // Optional. An array of objects representing skins. // These will appear in the "Options" menu under "Skins". // NOTE: These URLs must be served with the correct CORs headers. availableSkins: [ { url: "https://archive.org/cors/winampskin_Zelda_Amp/Zelda-Amp.wsz", name: "Zelda Amp", }, { url: "https://archive.org/cors/winampskin_Green-Dimension-V2/Green-Dimension-V2.wsz", name: "Green Dimension V2", }, { url: "https://archive.org/cors/winampskin_mac_os_x_1_5-aqua/mac_os_x_1_5-aqua.wsz", name: "Mac OSX v1.5 (Aqua)", }, ], initialSkin: { url: "https://archive.org/cors/winampskin_Zelda_Amp/Zelda-Amp.wsz", }, initialTracks: [/* ...同 Minimal 的曲目配置 */], });

要点说明:

  • availableSkins中的每个皮肤对象包含url.wsz皮肤文件的地址)与name(菜单中显示的名称)。示例中的皮肤文件托管在 Internet Archive 的/cors/路径下,该路径会返回带 CORS 头的响应,这是示例能够跨域加载皮肤的前提。
  • initialSkin指定页面打开时默认使用的皮肤,示例中指向availableSkins的第一项 Zelda Amp。
  • 与音频同理,皮肤 URL 同样必须带有正确的 CORS 响应头才能跨域加载(注释中明确给出了https://docs.webamp.org/docs/guides/cors的指引,对应仓库文档 01_cors.md)。

作为补充,你可以在仓库中找到若干真实的.wsz皮肤文件用于本地测试,例如 webamp-demo/skins 目录下的Zelda-Amp同类皮肤(如Green-Dimension-V2.wszMacOSXAqua1-5.wszTopazAmp1-2.wsz等),或 webamp/assets/skins/base-2.91.wsz 中的基础皮肤。

Minimal Window Layout:定制窗口的初始位置、尺寸与模式

Minimal Window Layout 示例 演示了如何通过windowLayout配置三个核心窗口(主窗口 main、均衡器 equalizer、播放列表 playlist)的初始布局:

const webamp = new Webamp({ windowLayout: { main: { position: { top: 0, left: 0 }, shadeMode: true, // 以"窄条"(shade)模式显示 closed: false, // 初始是否关闭窗口 }, equalizer: { position: { top: 230, left: 0 }, shadeMode: true, closed: false, }, playlist: { position: { top: 28, left: 0 }, shadeMode: false, size: { extraHeight: 3, extraWidth: 11 }, // 在默认尺寸基础上额外扩展的宽高 closed: false, }, }, enableDoubleSizeMode: true, // 允许双倍尺寸模式 });

每个窗口配置项的含义:

配置项类型说明
position{ top, left }窗口的初始像素坐标位置
shadeModeboolean是否以 shade(窄条)模式初始显示
closedboolean窗口初始是否处于关闭状态
size{ extraHeight, extraWidth }在窗口默认尺寸基础上额外扩展的像素宽高

示例将主窗口放在(0, 0)并启用 shade 模式、均衡器放在其下方(0, 230)也启用 shade 模式、播放列表放在(0, 28)且扩展了extraHeight: 3, extraWidth: 11enableDoubleSizeMode: true则开启双倍尺寸支持,用户可通过右键菜单切换 1x/2x 显示。类似地,lazy 示例 中还演示了包含 milkdrop 窗口的四窗口布局,并将四个窗口按纵向 116px 间距排布,可作为布局定制的进阶参考。

Minimal Milkdrop:开启 Butterchurn 可视化

Minimal Milkdrop 示例 展示了如何启用 Milkdrop 可视化。其与 Minimal 的唯一区别在于导入入口——使用带 Butterchurn 的webamp/butterchurn入口(从 2.2.0 版本开始提供),该入口已内置 Butterchurn 库:

<script type="module"> /** * Starting in version 2.2.0, Webamp includes a `webamp/butterchurn` * entrypoint which includes the Butterchurn library to enable the * Milkdrop visualizer. */ import Webamp from "https://unpkg.com/webamp@^2/butterchurn"; const webamp = new Webamp({ initialTracks: [ { metaData: { artist: "DJ Mike Llama", title: "Llama Whippin' Intro" }, url: "https://cdn.jsdelivr.net/gh/captbaritone/webamp@43434d82cfe0e37286dbbe0666072dc3190a83bc/mp3/llama-2.91.mp3", duration: 5.322286, }, ], }); webamp.renderInto(document.getElementById("app")); </script>

启用 Milkdrop 后,用户即可通过 Webamp 的 Milkdrop 窗口观看基于音频实时生成的视觉特效。如果希望控制 Milkdrop 的更多行为(例如默认打开、自定义预设),可以参考 lazy 示例 中的__butterchurnOptions配置,它展示了如何通过动态import()按需加载butterchurnbutterchurn-presets并自定义预设列表。

进阶参考:lazy 入口与 webamp-demo 综合示例

除上述 5 个官方文档列举的示例外,仓库还有两个值得关注的进阶参考:

1. lazy 示例:演示了webamp/lazy入口与按需加载。它通过requireJSZiprequireMusicMetadata两个回调动态加载jszipmusic-metadata,并通过__butterchurnOptions.importButterchurngetPresets按需加载 Butterchurn 与预设,从而减小首屏 bundle 体积。该示例使用 Vite + TypeScript 构建(见 examples/lazy/package.json 与 tsconfig.json)。关于减小 bundle 的更多思路,可参考官方文档 03_bundle-size.md。

2. webamp-demo:一个功能更完整的综合示例,集成了桌面图标(DesktopIcon)、SoundCloud 接入(SoundCloud.ts)、多皮肤选择(availableSkins.ts)以及 Butterchurn 配置(butterchurnOptions.ts),适合作为生产级集成的参考蓝图。

总结:如何选择适合自己的示例

  • 想最快看到效果:直接打开 Minimal,一个<script>标签加几行 JS 即可。
  • 需要多首曲目:参考 Multiple Tracks 的initialTracks数组,注意补齐metaDataduration以避免初始探测下载。
  • 需要皮肤切换能力:参考 Multiple Skins 的availableSkins+initialSkin,并确保皮肤文件带 CORS 头。
  • 需要控制窗口初始布局:参考 Minimal Window Layout 的windowLayoutenableDoubleSizeMode
  • 需要 Milkdrop 可视化:改用webamp/butterchurn入口(见 Minimal Milkdrop)。
  • 需要工程化集成:参考 lazy 示例(按需加载)与 webamp-demo(综合功能)。

以上所有示例的源码均可在当前仓库的 examples 目录下找到,每个示例目录内都有独立的 README 与可直接运行的index.html

【免费下载链接】webampWinamp 2 reimplemented for the browser项目地址: https://gitcode.com/gh_mirrors/we/webamp

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询