Typecho嵌入视频/音乐/多媒体这篇文章中,我对现有的音频嵌入方法不甚满意,因此决定自己写一个自定义音乐播放器的插件,实现自己博客想要的封面音乐功能。

本插件基于Typecho插件编写标准实现,主要代码工作由Claude3.5 Sonnet模型完成,实现时的相关提示词已附在本项目首页。

NOTE:经测试该插件目前存在浏览器加载上的问题,目前已关闭预览,暂时待修复

[music url="https://music.163.com/song/media/outer/url?id=1348568908.mp3" name="蜂鸟" artist="吴青峰" cover="http://www.manueld.me/usr/uploads/2024/09/433331566.png"]

[CustomMusicPlayer audio="http://www.manueld.me/usr/uploads/2024/09/1409321363.mp3" cover="http://www.manueld.me/usr/uploads/2024/09/433331566.png" title="歌曲名称" artist="歌手名字"]

插件实现原理

[CustomMusicPlayer netease="1348568908"]

在开发这个自定义音乐播放器插件时,我主要关注了以下几个关键点:

  1. 内容解析:我使用正则表达式来解析文章内容中的特定标记(如[music][netease])。这样可以方便地提取出音乐相关的信息,为后续的播放器渲染做准备。
  2. APlayer集成:选择使用APlayer库来渲染播放器。这个库提供了美观且功能丰富的HTML5音乐播放器,可以很好地满足我的需求。
  3. 网易云音乐支持:为了增加插件的实用性,我决定加入对网易云音乐的支持。通过调用非官方API,可以获取到歌曲的详细信息,包括封面和歌词等。
  4. 缓存机制:考虑到性能问题,我实现了一个简单的文件缓存系统。这可以有效减少对外部API的请求次数,提高加载速度。
  5. PJAX兼容:为了确保在使用PJAX的主题中也能正常工作,我添加了对PJAX事件的监听,并使用MutationObserver来监测DOM变化,确保播放器能在页面动态加载时正确初始化。

功能特性

经过一番努力,这个自定义音乐播放器插件最终实现了以下功能:

  1. 支持插入自定义音乐文件和网易云音乐
  2. 自动获取并显示歌曲封面和歌词(如果可用)
  3. 可以自定义播放器的主题颜色
  4. 支持设置是否自动播放
  5. 实现了缓存机制,提高了加载速度
  6. 兼容PJAX,支持动态内容加载

使用指南

要在文章中使用这个音乐播放器,有设计了两种插入方式:

1. 插入自定义音乐

可以使用以下格式在文章中插入自定义音乐:

[music src="音乐文件URL" name="歌曲名" artist="艺术家" cover="封面图片URL" lrc="歌词URL"]

各参数的含义如下:

2. 插入网易云音乐

对于网易云音乐,可以使用更简单的格式:

[netease id="音乐ID"]

只需要填入网易云音乐的歌曲ID即可。这个ID可以在网易云音乐网页版的URL中找到。例如,如果歌曲页面的URL是https://music.163.com/#/song?id=1234567,那么ID就是1234567

插件配置

在Typecho后台的插件配置页面,可以设置以下选项:

  1. 默认主题颜色:可以设置播放器的默认主题颜色,使用十六进制颜色代码。
  2. 缓存时间:可以设置音乐信息的缓存时间,单位是秒,默认为24小时。
  3. 自动播放:可以选择是否允许音乐自动播放(不过要注意,一些浏览器可能会阻止自动播放)。

注意事项

在使用这个插件时,有几点需要注意:

  1. 确保服务器支持cURL扩展,因为插件需要用它来获取网易云音乐的信息。
  2. 插件目录下的cache文件夹需要有写入权限,用于存储缓存文件。
  3. 由于使用了非官方的网易云音乐API,如果遇到获取信息失败的情况,可能需要更新API地址。