草庐IT

基于微信小程序开发——音乐播放器

WayneLJL 2023-04-15 原文

一、功能简介

      本系统开发用于体验客户注册登录后,可以随时查看当前网yi云音乐的咨询与最新消息,采用访问并请求网yi云音乐自主研发node.js开源网页资源的方法,搭建可选择播放音乐型小程序,可以实现最基本的音乐播放、收藏、搜索、以及增删歌单等操作。主要围绕登录用户与游客两个角色进行开发,游客在未注册的情况下只能查看资讯并试听歌曲,只有登录后才能管理歌单并添加歌曲至最喜爱歌单或自己需要的歌单。具体功能归纳如下:

(一)、游客、普通用户:

1.可以播放音乐、模糊搜索音乐

2.可以操作背景切换夜间模式与日常模式

3.可以查看音乐咨询、跳转到网yi云视频发现界面

(二)、普通用户:

1.可以将正在播放的音乐添加到最喜爱歌单

2.可以创建歌单、修改歌单、删除歌单

3.可以将搜索到的歌曲添加至用户所创歌单

二、开发环境描述

1.硬件:多媒体计算机

2.软件:(1)安装xmapp软件并连接到Apache服务器;

(2)安装navicat等数据库可视化操作工具并连接至mysql5.6版本以上的数据库;

(3)微信小程序调试基础库2.2版本以上,并采用云开发环境;

(4)Windows系列操作系统

三、演示效果视频

CourseBigHomework - 微信开发者工具

四、数据库设计

1.概念设计

        根据音乐播放系统的需求分析和功能概述,我简单将该播放系统的实体以及实体属性,并在这里采用E-R图的方式抽象成信息结构即概念模型,其中根据实体间联系,画出E-R图,如图所示:

2.逻辑设计

        将上一阶段已经设计好的基本E-R图,转换为与选用的数据库管理系统所支持的数据模型相符合的逻辑结构,即关系模型的转化。此处,根据本音乐播放系统的设置,将用户、歌曲、歌单、喜爱列表列为实体,转化为适当的关系模式,则具体属性与关系设置如下:

关系模式(关系模型)

(1)用户(用户编号,用户名,密码,性别,手机号,生日,地区,用户头像);

(2)歌曲(歌曲编号,歌曲名,歌曲作者,歌曲专辑,歌曲链接,歌曲图像链接,歌单编号);

(3)歌单(歌单编号,歌单名,歌单信息,歌单海报,用户编号);

(4)喜爱列表(喜爱歌曲编号,歌曲名称,歌曲作者,歌曲图像路径,歌曲链接,用户编号);

3.物理设计

        通过关系模型,我们能进一步确立实体间的相互关系,从而方便我们进行下一步操作,按照存储结构和存取方法我们构成了数据库物理结构,这里主要根据我们总结得出的关系模型,进行表结构的建立,做出具体表格结构示意图,由于系统结构庞大,表格体现选择以比赛项目信息表的部分典型字段为例,如下所示:

表1 最喜爱歌单信息likesonglist表

字段名

数据类型

长度

是否允许null值

约束

备注

likesong_id

int

10

主键、唯一

喜爱歌曲编号

likesong_name

varchar

50

歌曲名称

likesong_author

varchar

50

歌曲作者

likesong_image

varchar

100

歌曲图像路径

likesong_audio

varchar

100

歌曲链接

user_id

int

10

用户编号

        根据上述的需求分析,以及功能的确认与设计,我们这里采用对架构的理解,即在正式开始功能实现之前,对整体架构有一个模型似的认识,对每一个分区的实现效果进行区分,方便后期对项目制作时间的可行性分配,因此,这里我们采用常和数据库E-R图配套出线的总体设计图,来展示后面对过程中每一分区的功能实现。具体总体设计图如图所示:

 4.数据库操作设计(仅以部分效果为例)

        根据UI设计界面,传入静态数据后,分析逻辑思路,进行动态插入,连入数据库。

(1)首先是登录注册的数据库设计,注册即增添用户信息,发送请求,同时检测是否有相同用户登录,而登录即对用户信息进行匹配,返回结果。如上图所示。接着根据用户登录后的信息存入全局变量globalData,从而判断某些操作是否有权可以执行。

(2)接着是首页对歌曲的搜索查找,根据所提供的信息,设置数据库语言limited来限制输出的条数。

(3)同样为搜索操作的还有自定义导航栏对歌曲信息的搜索、喜爱歌单通过用户编号对歌曲的搜索、个人界面对用户自定义歌单的搜索,以及用户歌单内歌曲信息的搜索。

(4)增添操作这里以增添歌单以及增添歌曲至歌单为例,当用户搜索出自己想要的歌曲时,可以通过加号动态添加至自己所需要添加的歌单,代码展示如下:

showList(e){
  var id = e.currentTarget.dataset.id;
  var app =getApp();
  var List = app.globalData.songList;
  let info =""
  for (let index = 0; index < List.length; index++) {
    info = info+List[index].songlist_id+"."+List[index].songlist_name+" ";}
  wx.showModal({cancelColor: 'cancelColor',
    title:"请输入你想添加的歌单:",
    placeholderText:info,
    editable:true,
    success:(res)=>{
    ......

         效果展示如下:

 (5)最后是关于歌单的增删改查,用户可以在个人信息界面对所有已经存在的歌单进行查看,并可以根据按钮进行修改操作,也可以通过加号动态弹出的信息框进行增添操作,最后通过删除按钮进行删除。效果图展示如下:

五、设计思路描述

1.登录注册页面设计

        本页面的UI采用英文叠加中文的样式,实现水印的特殊展示效果,并将页面主题表明在最上方,而输入框信息栏的切换与课上讲述的tabs文件夹类似,也是swiper组件与wxss样式的连用,使用户可以通过点击顶部选项卡来切换不同的登录方式,这里由于需要传值的部分只有手机号与密码,因此我直接使用data传值,而不是form表单的submit事件。如果用户没有账号,可以点击立即注册跳转到注册界面。部分代码如下: 

<van-popup wx:if="{{ poppable }}" custom-class="van-calendar__popup--{{ position }}"
close-icon-class="van-calendar__close-icon" show="{{ show }}" round="{{ round }}"
position="{{ position }}" closeable="{{ showTitle || showSubtitle }}"
close-on-click-overlay="{{ closeOnClickOverlay }}" bind:enter="onOpen" bind:close="onClose" bind:after-enter="onOpened"bind:after-leave="onClosed">
  <include src="./calendar.wxml" />
</van-popup>

        效果图展示如下:

 2.首页设计

        首页这里的设计页面顶部采用的是自定义导航栏与轮播图swiper叠用,内容部分由数据库查找歌曲按照自定义组件输出为推荐歌曲,通过request请求网yi云音乐的官方API获取热门歌单与推荐歌单的信息,再通过横向scroll-view组件进行滑动展示。部分代码展示如下:

onChange({ detail }) { 
  var app = getApp();
  appinstance.globalData.isDarkSwitch = detail
  this.setData({checked: appinstance.globalData.isDarkSwitch})
  if (this.data.checked) {this.setData({DarkColor: appinstance.globalData.isDarkColor})
  app.globalData.dark=true;
  wx.setNavigationBarColor({frontColor: '#ffffff',backgroundColor: '#000000'});
  wx.setPageStyle({style:{background:"black",color:"white"}});
  wx.setTabBarStyle({backgroundColor: '#000000',color:"#ffffff"})
  app.globalData.dark=true;} else {this.setData({DarkColor:
  appinstance.globalData.isNotDarkColor})
  ......},

        效果图展示如下:

        同时我给搜索栏的歌曲以及推荐歌单的歌曲一起绑定的鼠标单击事件,点击后对点击的歌曲进行信息传值,并打开audio控件来进行歌曲播放。具体代码展示如下:

<view class="content-item" wx:for="{{searchSongList}}" wx:key="id">
    <view class="profile">
        <image class="profile-pic" src="{{item.song_image}}"></image>
        <view class="username">
            <text class="name">{{item.song_name}}</text>
        </view>
        <image src="/images/personal/增加.png"style="height: 60rpx;width: 60rpx;"bindtap= "showList" data-id="{{item.song_id}}"></image>
    </view>
    <view class="iconfont icon-arrow-right" style="color:#fff"></view>
</view>
<van-empty image="{{(SearchSingerList[0] || SearchSongList[0]) == undefined ? 'search' : ''}}" description="搜索内容显示区" />
</van-popup>

         效果图展示如下:

         最后便是暂停键的设置,audio组件有一个最大的鄙陋就是,当你通过其他方式来调用该组件进行播放时,它自己本身的暂停按钮便不会显示,因此,我们需要通过自定义一个暂停按钮来控制它进行暂停操作。具体代码展示如下:

timeupdateEvent(e){
    var progress = parseInt((e.detail.currentTime/e.detail.duration)*100)
    var minute = parseInt((e.detail.duration-e.detail.currentTime)/60);
    var second = parseInt((e.detail.duration-e.detail.currentTime)%60);
    if(second<10){this.setData({progress: progress+"%",remainTime:minute+":0"+second})
    }else{this.setData({ progress: progress+"%",remainTime:minute+":"+second})}},

         效果图展示如下:

3.发现页面设计

        该页面的设计仅仅是模拟网yi云音乐的第二底部选项卡的效果,即可以根据自己的喜好查看视频,同样与首页类似,通过请求访问网yi云音乐专属的API网站,获取信息资源后,利用自定义组件循环展示所访问的信息。具体效果展示如下:

  

4.个人界面设计

        除了头像框与用户名在用户登录后会动态修改后,这个界面的会员开通部分,也可以模拟下滑拖动效果,尽可能的实现现实中已经存在的操作方法。顶端设计皆为静态操作,即没有进行额外的页面设计,而底部的组成,则主要由最喜欢的音乐与歌单部分构建,其中歌单部分采用了swiper组件,即可以动态滑轮切换,而创建已存在的歌单,也可以通过movable-view与movable-area进行滑动删除。具体页面展示效果如下所示:

5.歌单界面设计

        最后的设计,是喜爱歌单与我的歌单的界面设计,整体界面采用类似的展示布局,仅仅在每条数据的插入显示上有不同的效果,同时可以链接歌曲进行调用audio控件播放,依然采用了自定义组件通过json文件中usingcomponent进行引用。具体展示效果如下所示:

        部分代码如下:

<view class="favourite-container">
    <view class="SingNumber">
        <van-icon name="music" size="33" color="#00b26a" />
        <text class="count">共{{favouriteList.length}}首</text>
    </view>
    <Sing wx:for="{{favouriteList}}" wx:key="id" title="{{item.likesong_name}}" Auther="{{item.likesong_auther}}" bindtap="tapEvent" data-params="{{item}}"></Sing>
</view>

至此,该微信小程序设计的音乐播放器系统的基本功能与界面展示完毕。如对您有所帮助,望留下宝贵一赞!谢谢!

        需源码 请私信扣扣  1092644308

有关基于微信小程序开发——音乐播放器的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  4. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  5. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  6. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  7. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  8. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  9. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  10. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

随机推荐