好友
阅读权限 30
听众
最后登录 1970-1-1
遗憾迟香
发表于 2020-12-27 11:12
本帖最后由 遗憾迟香 于 2021-3-18 10:46 编辑
V1.0.0.7 更新时间:2021-03-18
优化解析算法,移除杂牌音乐源
支持播放列表快捷修改 V1.0.0.6 更新时间:2021-02-04
调整音乐源,移除虾米音乐
支持酷狗,QQ音乐歌单解析
V1.0.0.5
解决下载的歌词无法被其它软件识别
优化解析算法
V1.0.0.4 更新时间:2020-12-28
更换序列化格式为json
本次更新完毕将清空播放列表
建议更新,否则无法使用在线解析
本次更新需要替换所有文件
项目名称:遗憾迟香音乐助手 ( 在线音乐播放器 )
开发工具: Visual Studio 2012,Fidder
开发语言: C#
下载地址: https://yhcx.lanzoux.com/b0a3g7csh
密码:421t
WEBAPI已开放,返回格式:json
调用方法:
搜索:
http://服务器地址/search.aspx?source=音乐源&word=关键字&page=页码&num=每页返回数量
歌曲解析:
http://服务器地址/getdata.aspx?source=音乐源&id=音乐编号&name=曲名&artist=艺术家&album=专辑&picid=封面编号
精确查找(全网搜索,返回最优结果)(不区分大小写,不要有错别字):
http://服务器地址/research.aspx?name=歌名&artist=歌手名&similar=精确度(0-1)
快速解析(功能同上,搜索完毕会直接重定向) (不区分大小写,不要有错别字):
http:// 服务器地址 /quickredirect.aspx? name=歌名&artist=歌手名&similar=精确度(0-1)
网页版:
http://服务器地址/demo.aspx
服务器地址:
free48752.hosthd1.ldvps.com
5.180.76.28:52864 (备用)
音乐平台对应音乐源名(区分大小写):
主流平台聚合:Together1
网易云音乐:Netease
酷我音乐:Kuwo
酷狗音乐:Kugou
QQ音乐:QQ
虾米音乐:Xiami
咪咕音乐:Migu
需求分析
现在独家版权的音乐越来越多 , 有些歌只能在网易云上听 , 有些只能在 QQ 音乐上听 , 当我们听歌时难免会需要跑全网去搜索 , 甚至要下载所有音乐的客户端 , 现开发一款绿色软件整合全网音乐 , 方便检索各大音乐平台的信息 . 该软件的主要功能如下 :
1.汇聚全网音乐
将主流音乐平台的音乐整合到一个软件中 .
支持平台:
网易云音乐
酷我音乐
酷狗音乐
QQ音乐
虾米音乐
咪咕音乐
......
暂不支持无损,音质128-320k不等
2.采用 C/S架构 ,搭建 WEBAPI解析音乐
每个音乐平台都有不同的音乐解析算法 , 而且不断更新 , 当算法更新时 , 使用 WEBAPI 可以避免客户端频繁更新
3.动态 LRC歌词显示
实现 LRC 歌词字幕的动态展示与编辑功能 .
4.下架歌曲自动重新查询
各大音乐平台曲库并不完美 , 遇到下架歌曲在所难免 , 这时候让机器帮助用户重新搜索全网
5.新歌 ,热歌推送
本软件可以实现全网音乐查询 , 但当用户仅使用本软件听歌的话可能不会了解最近就行的歌 , 所以歌曲推送功能必不可少
6.扁平化简约设计
官方的音乐客户端界面难免会做的花里胡哨 , 复杂的功能会让用户摸不清头脑 , 本软件将只保留必要的功能
用例规约(部分)
用例名称: 搜索
用例说明:
搜索音乐
前置条件:
进入搜索界面
基本事件流:
1. 进入搜索界面,输入关键字,选择音乐源
2.点击搜索按钮
3.判断输入的内容是否为空,若不为空,执行4
4.客户端请求服务器,服务器返回搜索结果
其它事件流:
无
异常事件流
1. 输入的关键字为空,则不会请求服务器
2.搜索失败,显示错误信息
后置条件
搜索成功,显示结果
用例名称: 解析音乐
用例说明:
加载出音乐播放地址
前置条件:
双击音乐列表
基本事件流:
1. 双击搜索结果列表
2.客户端请求服务器,服务器返回解析结果
其它事件流:
无
异常事件流
所选音乐为付费或下架音乐,无法解析,自动搜索全部音乐源
后置条件
搜索成功,显示结果
本软件与传统数据库编程的区别
数据库编程
本软件
基本功能
增删改查
只有查
查询方式
直接使用SQL语句查询
通过GET/POST请求公开的WEBAPI,利用其返回的JSON/XML中提取数据,不同音乐平台API与解析算法不同
功能设计 1.用例图
2.音乐平台类图
3.解析模式时序图
4.程序组件图(已省略三层架构)
5.界面设计
搜索界面
播放界面
迷你播放器
设置界面
备用服务器地址:
5.180.76.28:52864
host906116786.s479.pppf.com.cn
批量操作界面
歌单解析(目前仅支持网易)
支持全民k歌解析,输入@+歌手uid(不是k歌号)
内置lrc动态歌词编辑器(有待完善)
结束语
从小我就对计算机感兴趣 , 喜欢研究一些 it 方面的知识 .
初三下学期 , 我从网上下载了一款名叫 < 音乐间谍 > 的软件 , 但下载之后却打不开 , 显示需要安装 .NET Framework, 我就有个疑惑 , 为什么主流音乐软件不需要 .NET 呢 ? 这个问题我困惑了好久 , 直到中考完的暑假我才明白 , 这与软件功能无关 , 与软件所用的编程语言有关 , 需要 .NET Framework 的程序都是用 C#( 当时只管叫 ”C 井 ”) 编的 .
此处省略800字
l 致谢:感谢提供过帮助的同学和提供过指导的教师。
参考文献: [1] 李春葆 曾平 喻丹丹 .C# 程序设计教程 [M]. 北京:清华大学出版社, 2019.1 [2] 何玉洁 . 数据库原理与应用教程 [M]. 北京 : 机械工业出版社 ,2016.4
附录 : 主要源程序
[C#] 纯文本查看 复制代码
/// <summary>[/size]
[size=26.6667px] /// 音乐实体[/size]
[size=26.6667px] /// </summary>[/size]
[size=26.6667px] [Serializable()][/size]
[size=26.6667px] public class Music[/size]
[size=26.6667px] {[/size]
[size=26.6667px] /// <summary>[/size]
[size=26.6667px] /// ID[/size]
[size=26.6667px] /// </summary>[/size]
[size=26.6667px] public string Id { get; set; }[/size]
//曲名
public string Name { get; set; }
/// <summary>
/// 艺术家
/// </summary>
public string Artist { get; set; }
/// <summary>
/// 专辑
/// </summary>
public string Album { get; set; }
/// <summary>
/// 封面ID
/// </summary>
public string PicId { get; set; }
/// <summary>
/// 封面链接
/// </summary>
public string PicUrl { get; set; }
/// <summary>
/// 歌词
/// </summary>
public Lyric Lrc { get; set; }
/// <summary>
/// 播放地址
/// </summary>
public string Url { get; set; }
/// <summary>
/// 来源
/// </summary>
public string Source { get; set; }
/// <summary>
///
/// </summary>
public object Tag { get; set; }
}
[C#] 纯文本查看 复制代码
/// <summary>
/// 数据访问层接口
/// </summary>
public interface IMusic
{
/// <summary>
/// 搜索
/// </summary>
/// <param name="word">关键字</param>
/// <param name="page">页码</param>
/// <param name="num">搜索数量</param>
/// <returns></returns>
List<Music> Search(string word, int page, int num);
/// <summary>
/// 歌单解析
/// </summary>
/// <param name="id">歌单号</param>
/// <returns></returns>
List<Music> SearchCollection(string id);
/// <summary>
/// 获取信息
/// </summary>
/// <param name="m">实体</param>
/// <returns></returns>
bool GetData(Model.Music m);
/// <summary>
/// 获取歌词
/// </summary>
/// <param name="m">实体</param>
void GetLrc(Model.Music m);
}
[C#] 纯文本查看 复制代码
namespace DALFactory
{
public static class DataAccess
{
public static IDAL.IMusic CreateMusic(string source)
{
if (source.Contains('.'))
{
return (IDAL.IMusic)(Assembly.Load("DAL").CreateInstance(source));
}
else { return (IDAL.IMusic)(Assembly.Load("DAL").CreateInstance("DAL." + source)); }
}
}
}
[C#] 纯文本查看 复制代码
/// <summary>
/// 业务逻辑层
/// </summary>
public class MusicBLL
{
/// <summary>
/// 数据访问层对象
/// </summary>
public IMusic Source { get; set; }
/// <summary>
/// BLL有参构造
/// </summary>
/// <param name="s"></param>
public MusicBLL(string s)
{
Source = DALFactory.DataAccess.CreateMusic(s);
}
/// <summary>
/// 默认构造
/// </summary>
public MusicBLL()
{ }
/// <summary>
/// 搜索
/// </summary>
/// <param name="word">关键字</param>
/// <param name="page">页码</param>
/// <param name="num">返回数量</param>
/// <returns></returns>
public List<Music> Search(string word, int page, int num)
{
List<Music> list = new List<Music>();
if (string.IsNullOrEmpty(word.Trim()))
{ return list; }
list = word.Contains("@") ?
SearchCollection(word.Substring(1, word.Length - 1))
: Source.Search(word, page, num);
return list;
}
/// <summary>
/// 歌单解析
/// </summary>
/// <param name="id">歌单ID</param>
/// <returns></returns>
public List<Music> SearchCollection(string id)
{
List<Music> list = Source.SearchCollection(id);
return list;
}
/// <summary>
/// 重新搜索
/// </summary>
/// <param name="s">下架的歌曲</param>
/// <param name="similar">最低准确率</param>
/// <returns></returns>
public Music ReSearch(Music s, double similar)
{
string[] source = Info.ResearchSource;
List<Music> list = new List<Music>();
List<Music> result = new List<Music>();
foreach (string i in source)
{
try
{
IMusic dal = DALFactory.DataAccess.CreateMusic(i);
list = dal.Search(s.Name, 1, 30);
foreach (Music j in list)
{
i.ToString();
double num = j.SimilarWith(s);
if (num >= similar)
{
j.Tag = num;
if (dal.GetData(j))
{
if ((double)j.Tag >= 0.99)
{
s = j;
return j;
}
result.Add(j);
}
}
}
}
catch (Exception)
{
}
}
if (result.Count == 0)
{ throw new Exception("对不起,未能找到你想要的歌曲资源"); }
return result.Aggregate((u, v) => (double)u.Tag < (double)v.Tag ? u : v);
}
/// <summary>
/// 获取信息
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public bool GetData(Model.Music m)
{
if (HttpHelper.CheckUri(m.Url))
{ return true; }
return Source.GetData(m);
}
/// <summary>
/// 获取歌词
/// </summary>
/// <param name="m"></param>
public void GetLrc(Model.Music m)
{
Source.GetLrc(m);
}
}
免费评分
查看全部评分
本帖被以下淘专辑推荐:
· 软件合辑 | 主题: 3356, 订阅: 2414
· 电脑工具 | 主题: 548, 订阅: 475
· 精品软件 | 主题: 133, 订阅: 49