快速开始
This content is not available in your language yet.
下面快速介绍如何将 AMLL 歌词组件集成到你的项目中。请注意,AMLL 不提供 CDN 引入方式,必须使用 bundler。
有关除组件库之外的其他周围工具包,请直接查阅 API 参考。
安装 AMLL 核心库:
npm install @applemusic-like-lyrics/corepnpm add @applemusic-like-lyrics/coreyarn add @applemusic-like-lyrics/core此外,AMLL 将一些图形与动画库声明为 peer,这是为了复用项目中可能存在的相关依赖。一些包管理器或配置下可能会自动安装 peer,若没有,需要手动安装。
npm install @pixi/app @pixi/core @pixi/display @pixi/filter-blur @pixi/filter-bulge-pinch @pixi/filter-color-matrix @pixi/sprite jss jss-preset-defaultpnpm add @pixi/app @pixi/core @pixi/display @pixi/filter-blur @pixi/filter-bulge-pinch @pixi/filter-color-matrix @pixi/sprite jss jss-preset-defaultyarn add @pixi/app @pixi/core @pixi/display @pixi/filter-blur @pixi/filter-bulge-pinch @pixi/filter-color-matrix @pixi/sprite jss jss-preset-default使用 Vanilla 方式引入
Section titled “使用 Vanilla 方式引入”AMLL 核心库是框架无关的。无论是否使用框架,均可使用此方法引入。
import { LyricPlayer } from "@applemusic-like-lyrics/core";
// 创建歌词播放组件const player = new LyricPlayer();
// 将组件的元素添加到页面document.body.appendChild(player.getElement());
// 设置歌词player.setLyricLines([]);
// 设定当前播放时间player.setCurrentTime(0);
// 更新歌词组件动画player.update(0);其中的 setLyricLines 方法接受 LyricLine 类型的对象。在传入之后不应再修改这一对象的属性,否则可能导致问题。
setCurrentTime 方法与 update 方法接受当前播放进度(整数,单位毫秒)作为参数,在播放时需要逐帧调用。此外在每次 setLyricLines 之后也应调用一次 update 以更新内容。
你可以前往 API 参考:Core 核心 获取详细的接口文档。
使用 React 绑定
Section titled “使用 React 绑定”确保你已安装 react 和 react-dom 包。然后安装 AMLL React 绑定包:
npm install @applemusic-like-lyrics/reactpnpm add @applemusic-like-lyrics/reactyarn add @applemusic-like-lyrics/reactReact 绑定包拥有具名导出 LyricPlayer 作为核心组件。下面是一段示例。
import React, { useState } from "react";import { LyricPlayer } from "@applemusic-like-lyrics/react";import { parseTTML } from "@applemusic-like-lyrics/core";
const [currentTime, setCurrentTime] = useState(0);const [lyricLines, setLyricLines] = useState(0);const audio = document.getElementById("amll-audio"); // 获取 <audio> 元素
const parsedResult = parseTTML(`SomeTtmlText...`); // 对歌词进行处理setLyricLines(parsedResult); // 设置歌词
let lastTime = -1;const frame = (time) => { if (lastTime === -1) { lastTime = time; } if (!audio.paused) { const time = (audio.currentTime * 1000) | 0; setCurrentTime(time); } lastTime = time; requestAnimationFrame(frame); // 逐帧调用};requestAnimationFrame(frame);
function App() { return ( <> <audio id="amll-audio" src="Audio-Music-Src" controls /> <LyricPlayer lyricLines={lyricLines} // 设置歌词 currentTime={currentTime} // 通过逐帧调用函数,设置播放时间 /> </> );}export default App;你可以前往 API 参考:React 绑定 获取详细的接口文档。
使用 Vue 绑定
Section titled “使用 Vue 绑定”确保你已安装 Vue。然后安装 AMLL Vue 绑定包:
npm install @applemusic-like-lyrics/vuepnpm add @applemusic-like-lyrics/vueyarn add @applemusic-like-lyrics/vueVue 绑定包拥有具名导出 LyricPlayer 作为核心组件。歌词对象、播放进度等均以组件的响应式属性传入。下面是一段示例代码。
<template> <LyricPlayer :lyric-lines="amllLyricLines" :current-time="progressRef" :playing="playingRef" /> <audio src="..." ref="audioElRef"></audio></template>
<script setup lang="ts">import { onMounted, ref, useTemplateRef } from "vue";import type { LyricLine } from "@applemusic-like-lyrics/core";import { LyricPlayer } from "@applemusic-like-lyrics/vue";
import "@applemusic-like-lyrics/core/style.css";
const amllLyricLines: LyricLine[] = [];
const progressRef = ref(0);const playingRef = ref(false);
const audioElRef = useTemplateRef("audioElRef");
function onFrame() { if (audioElRef.value) progressRef.value = Math.round(audioElRef.value.currentTime * 1000); if (playingRef.value) requestAnimationFrame(onFrame);}
onMounted(() => { if (!audioElRef.value) return; audioElRef.value.addEventListener("play", () => { playingRef.value = true; requestAnimationFrame(onFrame); }); audioElRef.value.addEventListener("pause", () => { playingRef.value = false; });});</script><template> <LyricPlayer :lyric-lines="amllLyricLines" :current-time="progressRef" :playing="playingRef" /> <audio src="..." ref="audioElRef"></audio></template>
<script lang="ts">import { defineComponent } from "vue";import type { LyricLine } from "@applemusic-like-lyrics/core";import { LyricPlayer } from "@applemusic-like-lyrics/vue";
import "@applemusic-like-lyrics/core/style.css";
export default defineComponent({ components: { LyricPlayer, }, data() { return { amllLyricLines: [] as LyricLine[], progressRef: 0, playingRef: false, }; }, mounted() { const audioEl = this.$refs.audioElRef as HTMLAudioElement | null; if (!audioEl) return;
audioEl.addEventListener("play", () => { this.playingRef = true; this.onFrame(); });
audioEl.addEventListener("pause", () => { this.playingRef = false; }); }, methods: { onFrame() { const audioEl = this.$refs.audioElRef as HTMLAudioElement | null; if (audioEl) { this.progressRef = Math.round(audioEl.currentTime * 1000); }
if (this.playingRef) { requestAnimationFrame(this.onFrame); } }, },});</script>你可以前往 API 参考:Vue 绑定 获取详细的接口文档。