开发MusicFree插件
MusicFree插件是什么
MusicFree是一个插件化的音乐播放器。它本身不包含任何音乐源,所有的功能都是通过插件的形式导入的。插件本质上是一个javascript函数,通过实现符合插件协议的javascript函数,即可完成特定音源的播放,这也就意味着只要能搜得到的音乐,那么就都可以播放。
插件的标准协议
一个MusicFree插件的结构如下:
1 | // packages里面预置了一些常用的包,包括axios,dayjs,cryptojs和cheerio,应该够用了 |
目前插件中的所有常量/函数如上,只有platform是必选参数,其他均为可选。
插件中定义了四种基本的媒体类型,分别是:
基础媒体类型:platform和id标识着唯一的一个媒体
1
2
3
4
5
6
7type IMediaBase = {
id: string;
platform: string;
$?: any; // 内部变量,不要给它赋值,会被覆盖
[k: symbol]: any;
[k: string]: any;
};音乐类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30interface IMusicItemBase extends ICommon.IMediaBase {
/** 其他属性 */
[k: keyof IMusicItem]: IMusicItem[k];
}
interface IMusicItem {
/** 歌曲在平台的唯一编号 */
id: string;
/** 平台 */
platform: string;
/** 作者 */
artist: string;
/** 标题 */
title: string;
/** 时长(s) */
duration: number;
/** 专辑名 */
album: string;
/** 专辑封面图 */
artwork: string;
/** 音源 */
url?: string;
/** 歌词URL */
lrc?: string;
/** 歌词 */
rawLrc?: string;
/** 其他可以被序列化的信息 */
[k: string]: any;
/** 内部信息 */
[k: symbol]: any;
}作者类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15interface IArtistItemBase extends ICommon.IMediaBase {
name: string;
id: string;
fans?: number;
description?: string;
platform: string;
avatar: string;
worksNum: number;
}
interface IArtistItem extends IArtistItemBase {
musicList: IMusic.IMusicItemBase;
albumList: IAlbum.IAlbumItemBase;
[k: string]: any;
}专辑类型
1
2
3
4
5
6
7
8
9
10interface IAlbumItemBase extends ICommon.IMediaBase {
artwork: string;
title: string;
date: string;
artist: string;
description?: string;
}
interface IAlbumItem extends IAlbumItemBase {
musicList: IMusic.IMusicItem[];
}
通过编写以上简单的脚本,并通过musicfree的插件导入,就可以使用插件完成对应的音乐行为了。