在线音频点播系统的设计与实现

 2022-01-17 11:01

论文总字数:18797字

目 录

然后输入nox_adb connect 127.0.0.1:62001如出现下图即连接成功。

图3.9 模拟器连接

3.5所需技术

本系统网络音乐播放和下载的实现主要就是靠Gson和Http Client把从服务器上获得的数据进行快速的解析然后得到歌曲的地址等信息从而进行播放和下载。

需求分析

4.1播放器的功能分析

通过检查项目提出的要求,能够得到项目的需求模块。接下来将写出系统的功能需求,和播放器的基本功能,我们的系统由下面的几个模块来构成:本地音乐播放模块,在线音乐播放模块,在线搜索模块,收藏音乐模块,个性化推荐模块。下面将详细的讲述各种功能需求分析。

4.2系统的功能模块

图4.1系统的功能模块图

4.3系统的控制

图 4.2 系统的基本控制图

当系统启动后,用户可以选择在登陆界面进行登陆,如没有账号可以选择注册。用户可以单击播放按键,系统将播放用户点击的歌曲并在下方显示播放进度条。当系统处于正在播放音乐的状态时,用户单击暂停按键,系统将暂停状态。同样的当运行时,用户点击停止按钮,系统将被停止。如果用户单击“上一首”音乐按键或者“下一首”音乐按钮,系统将播放下一首或者上一首音乐。此外用户还可以点击搜索按钮进行搜索,并点击下载或者试听按钮进项下载和试听音乐,并且可以进行音乐的删除。对于喜欢的音乐点击收藏按钮进行收藏,未登陆的用户无法使用收藏功能。针对所有用户,系统还会推荐各种各种流行音乐供用户选择。

4.4系统的功能需求分析

从时序图中可以看出播放器中信息发送和调用过程

图 4.3 播放时序图

4.5结构流程图

图4.4 结构流程图

4.6运行环境需求

操作系统:Android手机基于Linux操作系统

支持环境:Android 2.3.3 - 4.2版本

4.7界面需求

播放器界面需要将各种按钮合理摆放,界面的布局符合大众需求,颜色尽量让用户觉得舒适不宜太鲜艳,操作方法和各种按钮的功能要让用户能够一眼看的出来。项目需求的功能要能够实现并且不能够重复。需要能够兼容各种手机屏幕大小,不能出现显示错误。显示不能出现乱码。

系统算法分析

5.1推荐系统的概念

推荐系统(Recommendation System)简称RS。推荐最早是在生活中出现的,出门在外,吃饭购物等等事情的时候,总会有人给我们推荐各种东西,把这种行为放到系统中,便成了限制的推荐系统。根据不同的用户平时进行的操作,从各种操作比如点赞,收藏等行为中推断出用户的爱好,为用户节约搜索的时间,是用户体验更好。或者根据用户喜好的商品属性进行分析,比如有些用户买的甜食比较多系统就给这个用户推荐甜的东西。例如,你在淘宝购买了一系列衣服,之后淘宝就会根据你买的衣服向你推荐相似的衣服:

图5.1 淘宝推荐示例

5.2推荐算法的分类

事实上推荐有很多种,但是主流的推荐系统可以分为两类:

基于内容的推荐(content-based),主要是根据推荐项的性质推荐。

基于协同过滤的推荐(collaborative filtering),主要是根据user或者item之间的相似程度进行的推荐。

很明显的,基于协同过滤的推荐系统同样能够分成两种:

基于项的推荐系统(item-based),主要根据的是项和项之间的相似性进行推荐

基于用户的推荐系统(user-based),主要是根据用户和用户之间的相似性进行推荐

5.3算法简介

  1. 基于物品的协同过滤

此种协同过滤算法最早是在电商行业种得到充分的使用的,提出是由亚马逊公司提出的。电商通过这种方法调查用户对于各种商品的喜爱程度并计算出物品之间的相似度,然后将相似度最高的商品一次对剑给用户。例如,用户去淘宝买了鼠标的人也买了键盘,说明这两个商品是相似的,那么当用户搜索键盘时,系统将自动给他推荐鼠标。

基于物品的协同过滤算法的优点和缺点:

优点:两个物品之间的距离(相似性)可以根据很多的用户的评价进行分析得出来,在一段时间内这两个物品的相似度趋于稳定。所以,基于物品的协同过滤算法能够提前计算距离,在线的部分能够跟快且稳定的产生推荐的列表。

缺点:不同方面的物品之间有着较高的相似度时,就会推荐出问题,比如,可能就会喜欢《高等数学》的用户推荐《英语大全》。

  1. 基于用户的协同过滤

简单的来说就是,A用户和B用户兴趣差不多,A用户喜欢的物品,对于B用户而言也会喜欢。基于用户的协同过滤算法一般是这样进行的:通过收集很多用户对各种商品的喜好的相似程度,计算出两个用户之间的相似度,然后对目标用户跟周围的用户相似度进行对比,找到高相似度的其他用户没然后将其他用户喜好的物品推荐给目标用户。

基于用户的协同过滤的优点和缺点:

优点:时效性强,适用于个性化兴趣不太明显的方面。

缺点:是很难想要找到有意义的邻居的集合的,大部分用户只不过是两个人之间只有很少一部分的共同爱好,少有的那部分共同评分的物品还大部分都是大明星的歌曲或者电影之类。新的用户在只评价过很少的一部分商品的时候,个性化的推荐是不能对其进行使用的。

  1. 基于内容的推荐

该算法主要是根据物品的属性然后对物品之间的相似性进行计算然后进行推荐。基于内容推荐的算法是目前最简单的推荐算法,但容易受到对文字、图像等方面进行的详细的描述程度的限制,对于没有详细的文字或者图像描述的物品就无法使用此种推荐。基于内容的推荐本质上是将各种商品的属性进行收集整理,对商品的各种属性进行计算,得到用户对于各种商品的相似度,然后将相似度高的商品推荐给用户。一开始,基于内容的推荐与基于协同的过滤算法有一些相似之处。但是这种算法跟用户对于商品的评价没有关系,只需要根据商品的属性就可以推出对用户的推荐,不被商品的类型所限制,比较有的商品比较冷门评论少就无法使用协同过滤推荐。基于内容的算法本质上是通过对信息的获得和对有效信息的分析,过滤得到的。

5.4数据的收集

在推荐系统里面,物品分为两中元素:用户和物品:即(user)、(item)。通过对用户对物品的偏好程度可以构成相似度的效用矩阵。然而得到的这个矩阵是非常稀疏的,很多数据都是空白的,毕竟不是所有的用户都会把买过的商品一个个评论过去,还有的商品比较冷门没有很多的用户购买,所以他的评论之类的也是非常少的。有的用户甚至没有评论的习惯,这些都是导致矩阵种数据缺少的原因。所以这时候就需要通过推荐系统来推算出矩阵中的那些空白的数据,我们不需要对所有位置的值都进行预测,可以适当的省掉一些从而加快进度。

收集数据有两种方式方式:显示偏好和隐式偏好。

数字型显式偏好:收集此类型的数据需要用户自觉的为买过的商品进行打分、挑选、分享、购买、收藏等操作。这些操作会获得一些数值,比如打分就会获得一个整数等等。

文本型显式偏好:用户购买商品后,不管好坏通常都会对商品进行点评,然后通过用户对商品点评的内容可以看出用户对商品的喜好或者讨厌,从而得到这些用户对商品的偏好值。

隐式偏好:此类数据是通过一些用户的操作来收集的。这类数据不需要用户进行特别的操作,简单的点击,关闭等等的操作就可以得到这些数据。比如点击返回用户访问的次数,返回一个整数就可以计算用户的偏好等等。

很明显的,数字型显式偏好得到的数据都是较为精准的,因为用户直接将数据提供了出来,但是通过这种方法取得的数据很少的,一般情况下,很少由顾客会主动点击评分之类的东西,毕竟很浪费时间也没什么收益,对于没有人买的商品就更是这样了。隐式偏好的缺点同样很明显:噪音大。由于有些不可回撤的操作,比如有些用户可能点错界面,点进了不爱看的文章或者点击了不想买的东西。有些时候点击进入页面然后有事出门了导致页面停留时间过长等等问题。所以做好去除噪音的工作是对于隐式数据收集准确性的关键,不然得到的数据也是不准确的。

5.5数据的处理

此次系统设计过程中运用到的数据处理方法是余弦相似度算法。

该计算方法计算的是空间向量中两个向量夹角的余弦值从而得出几个item的相似值,然后对得出的相似值通过比较得出最高的相似值,将最高的item推荐给用户。

实现代码如下:

In [52]: def cosine_dis(x,y):

num=sum(map(float,x*y))

denom=np.1inalg. norm(x)* np.1inalg. norm(y)

return round(num/float(denom),3)

......

In [53]: print cosine_dis(np. array([3,45,7,2]), np. array([2,54,13,15])) 0.972

系统的设计与实现

6.1欢迎界面的模块设计

系统登陆界面采用一个SplashActivity来完成用来显示系统的logo和开场白,系统在登陆界面出现时进行一些Activity的初始化,保证系统中的下一个功能能够能快的出现在用户面前,登陆界面是必要的。

代码如下:

public class SplashActivity extends BaseActivity {
private static final String SPLASH_FILE_NAME = "splash";

@Bind(R.id.iv_splash)
private View iv Splash;
......
int year = Calendar.getInstance().get(Calendar.YEAR);
tvCopyright.setText(getString(R.string.copyright, year));

checkService();
}

图6.1 欢迎界面

6.2用户登陆界面的模块设计

用户启动程序后可通过该界面进行用户登陆,用户信息直接保存在服务端。用户的登陆界面由基本的控件构成,通过自定义一个View类,重新构造View,重写onDraw()实现一个验证码。

代码如下:

剩余内容已隐藏,请支付后下载全文,论文总字数:18797字

相关图片展示:

您需要先支付 80元 才能查看全部内容!立即支付

该课题毕业论文、开题报告、外文翻译、程序设计、图纸设计等资料可联系客服协助查找;