# HeoMusicSever
**Repository Path**: sunshineluo/HeoMusicSever
## Basic Information
- **Project Name**: HeoMusicSever
- **Description**: 基于HeoMusic开发的简易NodeJS后端,可播放任意歌曲
- **Primary Language**: NodeJS
- **License**: AGPL-3.0
- **Default Branch**: master
- **Homepage**: https://music.2leo.top
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-01-01
- **Last Updated**: 2025-01-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#
HeoMusicSever

基于HeoMusic开发的音乐后端组件,可播放自己存储的任意歌曲。不受限制。
## 使用方法
1.在本地准备好music文件夹,存放带有歌曲元信息的歌曲和歌词。
2.初始化项目,然后运行`npm install`。
3.运行项目后端,地址为`http://localhost:9000/api/music-files`。
4.运行后得到的数据格式如下:
```
{
"name": "BY2 - 凑热闹",
"artist": "BY2",
"url": "http://localhost:9000/music/BY2 - 凑热闹.mp3",
"cover": "http://localhost:9000/music/BY2 - 凑热闹-cover.jpg",
"lrc": "http://localhost:9000/lyrics/BY2 - 凑热闹.lrc"
},
```
5.打开music.html,修改` var remoteMusic = "http://localhost:9000/api/music-files"`
6.修改`js\localEngine.js`代码
```
var encodedLocalMusic = localMusic.map(item => ({
name: item.name,
artist: item.artist,
url: item.url ? encodeNonAscii(item.url) : "", // 如果 url 为空,则返回空字符串
cover: item.cover ? encodeNonAscii(item.cover) : "", // 如果 cover 为空,则返回空字符串
lrc: item.lrc ? encodeNonAscii(item.lrc) : "" // 如果 lrc 为空,则返回空字符串
}));
document.getElementById('heoMusic-page').classList.add('localMusic');
// 处理非 ASCII 字符的编码
function encodeNonAscii(str) {
// 如果传入的 str 是 null 或 undefined,返回空字符串
if (str == null) return "";
return str.replace(/[^\x00-\x7F]/g, function(c) {
return encodeURIComponent(c);
});
}
// 初始化 APlayer 播放器
const ap = new APlayer({
container: document.getElementById('heoMusic-page'),
lrcType: 3,
audio: encodedLocalMusic // 将已编码的音乐数据传递给播放器
});
// 设置媒体会话处理器
heo.setupMediaSessionHandlers(ap);
```
7.直接打开`music.html`查看效果即可。
## 小Bug
1.播放到含有中文歌词和其他语言的歌词时,优先显示的还是中文歌词。这个可能跟下载的歌曲歌词有关系,没有写拼接歌词部分,大佬们发挥一下。俺有点不会哦!中文歌曲是没有问题的!

## 已修复
1.播放到非中文歌曲时自动暂停播放的问题。
2.修复部分js调用问题。
3.新增musics.js文件,这是一个提高响应速度的后端文件版本,适合歌曲数量过多使用,通过Redis缓存歌曲的信息,提高前端的响应速度。
## 代码来源
[@张洪Heo](https://github.com/zhheo/HeoMusic)
## 许可
项目中包含的[Aplayer](https://github.com/DIYgod/APlayer)及[MetingJS](https://github.com/metowolf/Meting)的修改版本,他们均使用 MIT 协议
图标采用remixicon,使用 Apache 协议
## 声明
本代码仅供学习、个人自用,不可将进行大规模的提供服务以免造成侵权的问题,如出现问题,后果自负!本仓库也一并关闭!
## 结语
感谢大佬的开源,提供了这么漂亮的静态播放器呢,膜拜大佬啦!