基于Android音乐播放器的设计与实现(同名22054).doc_第1页
基于Android音乐播放器的设计与实现(同名22054).doc_第2页
基于Android音乐播放器的设计与实现(同名22054).doc_第3页
基于Android音乐播放器的设计与实现(同名22054).doc_第4页
基于Android音乐播放器的设计与实现(同名22054).doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

滨江学院滨江学院 移动通信程序设计移动通信程序设计 课程设计课程设计 题题 目目 基于基于 Android 系统的音乐播放器系统的音乐播放器 院院 系系 滨江学院 专专 业业 计算机科学与技术 学生姓名学生姓名 王 兵 学学 号号 20112308057 二二 一一 四四 年年 六六 月月 十十 日日 摘要摘要 随着生活水平的提高 娱乐已成为非常主流的话题 人们不仅需要通过音乐陶冶 情操 而且越来越多的人倾向于使用音乐 视频等娱乐和放松自己 这大大促进了媒体 软件的发展 本文旨在介绍研究常用数字音频编码和解码的相关知识 并结合 VS2008 编 写多功能音乐播放器 了解音乐播放器功能的实现 掌握开发音乐播放器所需的相关知 识 采用了面向对象软件工程方法 其开发主要包括应用程序界面设计和后台代码运行 两个方面 实现了多功能音乐播放器在计算机上的应用 可以在很大程度上满足用户的 需求 该系统主要具备 音乐播放控制 音乐文件控制 音量控制 下载控制 歌词控制 进度控制 音乐剪辑等功能模块 关键字 关键字 音乐播放器 音频编码格式 TechSmith Screen Capture Codec FFmpeg C Visual Studio 2008 目目 录录 1 前言 4 1 1 选题的背景及意义 4 1 2 网络流行音乐播放器简介 4 2 系统相关技术及开发平台介绍 5 2 1 开发应用技术介绍 5 2 2 开发及运行坏境 7 3 系统的分析 8 3 1 可行性分析 8 3 2 常见的几种音频格式及其特点 9 3 3 需求分析 10 4 系统设计 12 4 1 系统概要设计 12 4 2 系统功能设计及描述 12 5 系统功能实现 14 5 1 歌曲添加模块 15 5 2 歌曲列表模块 19 5 3 播放控制模块 20 5 4 音量控制模块 23 5 5 进度控制模块 24 5 6 滚动字幕模块 24 5 7 歌曲下载模块 29 5 8 歌曲剪辑模块 31 结 论 35 参 考 文 献 36 致 谢 37 1 1 前言前言 1 11 1 选题的背景及意义选题的背景及意义 音乐是情感的艺术 美妙动听的音乐来源于情感 又潜移默化地影响情感 让我们 进入瑰丽多彩的虚化与现实的意境之中 向上追溯百年或千年 直至最原始的音乐诞生 之初 我相信音乐是为了倾诉而不是表现 是自然的流露而不是技巧的夸张 是自我的 沉醉而不是别人的掌声 因为爱与感动 因为生命的圆满与缺憾 因为思想的灵动与创 造 所以音乐不单在乐谱上 更在我们的心中 众所周知任何格式的音乐都要通过音乐播放软件播放 那么音乐播放软件是通过什 么样的原理实现音乐的播放的呢 音乐播放器就是音频解码器的可视化操作界面 其实 质是针对各种音频编码格式的解码器 例如 APE 格式调用的是 Monkey s Audio 解码器 FLAC 格式调用的是 FLAC 解码器 MP3 调用的是 lame 解码器 大部分音乐播放器都支持 多种音乐格式的文件 这是因为这些播放器将不同的音频解码器打包起来 并制作统一 的播放界面 从而让使用者能够方便地播放和聆听各种音乐 伴随着改革开放人们的生活水平普遍提高如今音乐已成为越来越多人的心灵寄托 随着因特网在我国的普及随之而来的是各式各样的播放器软件 尽管未来的音乐播放器将具备各种丰富多彩的功能 但作为一款多媒体软件 音频 应用才是最基本的 也是最能决定获取用户数量的因素 基于上述分析音质高 外形美观 小巧且功能强大是未来播放器发展的主流趋势 作为一个音乐爱好者兼软件工程专业的一员若能编写一款小巧功能强大的音乐播放器无 疑是一件很有成就感的事情 1 21 2 网络流行音乐播放器简介网络流行音乐播放器简介 本小节举例介绍目前网络上流行的几款音乐播放器 比如国产千千静听 酷狗音乐等 比较分析了它们各自特有的功能 此外还集中介绍了常见的几种编码格式以及它们各自 的特点 1 2 11 2 1 千千静听千千静听 千千静听是一款专为用户定制的全新一代的免费听歌下载音乐播放器软件 提供百万 首歌曲免费试听下载 拥有最新 最流行的歌曲 提供第一时间音乐资讯 超高品质 320kbps 的音乐歌曲下载 给耳朵更优质的享受 超炫的智能语音搜歌功能让听歌更加 快捷 免费的手机铃声歌曲下载 轻松拖拽歌词 保持歌词同步 支持边听边唱 支持 在线播放下载 流量限额提醒功能 软件特色 1 高精度音质 完美还原听觉 2 在线自动下载歌词 卡拉 OK 式同 步显示 3 软件小 运行快 支持众多插件 自由编辑歌词 由你做主 4 自由转换 MP3 WMA APE WAV 等多种音频格式 批量修改歌曲标签信息 5 个性化皮肤 多种视觉效果享受永远免费 1 2 21 2 2 酷狗音乐酷狗音乐 酷狗音乐是中国领先的数字音乐交互服务提供商 互联网技术创新的领军企业 致力 于为互联网用户和数字音乐产业发展提供最佳的解决方案 公司的使命是成为亚太地区 最大的数字音乐销售推广企业 自公司创建以来 一直在数字音乐发展上大胆尝试 先 后与几十家唱片公司 版权管理机构合作探索发展 积累了数万首数字音乐版权 并在 推动广范围的跨行业 跨平台合作上做出努力 在艰巨的全球音乐数字化进程中做出自 身的贡献 全球最受欢迎的免费中文播放软件 流行音乐搜索平台 软件特色 1 迷你界面 界面更酷 绚丽流行 保持了 Windows Vista 和 XP 下的 完美表现 让人耳目一新 2 卡拉 OK 酷狗独创 卡拉 OK 歌词显示 多种模式 边 听边唱 让你听歌更好玩 3 支持本地音乐播放完美音质 支持所有的音频文件 本地 文件拖放 同时支持网络高速下载和本地播放 4 超强搜索和下载优化歌曲搜索引擎 提高搜索准确度 智能化节约带宽 可关闭网络功能 5 流行音乐资讯酷狗榜单家族 狗友推荐 酷吧 狗窝 最新流行音乐一网打尽 好听的音乐来 找 你 6 个性化手 机炫铃 DIY 让拥有张扬个性的铃声 7 音频格式我选择我的歌曲我制作 音质音效我决 定 8 收音机动感音乐识别体验精选多家电台 收听全球风云变化 更能识别电台中的音 乐 2 2系统相关技术及开发平台介绍系统相关技术及开发平台介绍 本系统是采用面向对象的软件开发方法 基于微软的 Visual Studio Net 开发平台 以 C 作为本系统的开发语言实现音乐播放器预定的需求功能 2 12 1 开发应用技术介绍开发应用技术介绍 2 1 12 1 1 TechSmithTechSmith ScreenScreen CaptureCapture CodecCodec 简介简介 TechSmith Screen Capture Codec 是 TechSmith 公司开发的 Camtasia Studio 的一个组件 用于压缩 Camtasia Recorder 中的视频文件 最大的优点是可以保证图像的质量 截取的 屏幕经过多次压缩 还能保证高质量 比传统的压缩方式相比 优势十分明显 Camtasia Studio 是 TechSmith 旗下一款专门录制屏幕动作的工具 无论在何种颜色模 式下它都能轻松地对屏幕动作进行记录 包括声音 图像 鼠标的移动轨迹等 此外 它还能够对音频片段进行编辑 压缩 剪接从而实现多种音效的播放 它还能输出包括 Flash SWF FLV AVI WMV M4V CAMV MOV RM GIF 动画等多种常见格式 是制作视频演示的绝佳工具 其实 Camtasia Studio 已不仅仅是一个录屏工具了 它包括 了 5 个组件 Camtasia 录像器 菜单制作器 音频编辑器 剧场及播放器 本播放器在运行之前需要安装 TechSmith Screen Capture Codec 组件 此组件会和系统 一起打包发行 用户也可以自己从网上下载更高版本的组件 只有安装此组件才能实现 播放器中的歌词剪切功能 2 1 22 1 2 FFmpegFFmpeg 简介简介 FFmpeg 在 Linux 平台下开发 但它同样也可以在其它操作系统环境中编译运行 包 括 Windows Mac OS X 等 这个项目最早由 Fabrice Bellard 发起 现在由 Michael Niedermayer 维护 许多 FFmpeg 的开发人员都来自 MPlayer 项目 而且当前 FFmpeg 也 是放在 MPlayer 项目组的服务器上 项目的名称来自 MPEG 视频编码标准 前面的 FF 代表 Fast Forward 使用本播放器如果要对 flv 格式的文件进行播放则要安装 FFmpeg 2 1 32 1 3 VisualVisual StudioStudio Net Net 集成开发环境简介集成开发环境简介 NET 平台为创建新一代分布式 Web 应用提供了所有工具和技术 表示技术 构件技 术和数据库技术 NET 平台支持标准的 Internet 协议 包括 HTTP 超文本传输协议 XML 可扩展标记语言 和 SOAP 简单对象访问协议 等 从而实现了异构系统间应 用程序的集成和通信 即用户和供应商可将在此平台上开发的产品和服务无缝地嵌入自 身的业务进程和日常活动的信息架构中 NET 平台建立在开放系统结构基础之上 集 Microsoft 在软件领域的主要技术成就于 一身 NET 平台包括一下 4 种核心技术 NET Framework NET 企业服务器 构件模块 服务和 Visual Studio NET NET Framework 是 NET 平台核心中的核心 它为 NET 平台下应用程序的运行提供 基本框架 如果把 Windows 操作系统比作一幢摩天大厦的地基 那么 NET Framework 就 是摩天大厦中由钢筋和混凝土搭成的框架 NET 企业服务器是 Microsoft 为企事业单位提供的技术服务中的一部分 它包括 Microsoft BizTalk Server Microsoft Commerce Server Host Integration Server Exchange Server SQL Server 等技术的开发工具包 构建模块服务主要是 Microsoft 提供的 COM 组件服务和 XML Web 服务技术 利用 构建模块服务开发应用程序模块 可以迅速地组装一个功能完备的软件 Visual Studio NET 是 NET 平台的主要开发工具 由于 NET 平台是建立在开放系统结 构基础之上的 因此应用程序开发人员也可以使用其它开发工具 2 1 42 1 4 C C 语言简介语言简介 C 原为音乐标记 读 Sharp 是一种面向对象的编程语言 主要用于开发可以运行在 NET 平台上的应用程序 C 语言是微软公司开发的基于 NET Framework 的一种编程语言 它继承了 C C 优良传统 又借鉴了 Java 的很多特点 微软对 C 的定义是 C 是从 C 和 C 派生出来的一种简单 现代 面向对象和类型安全的编程语言 C 主要是从 C C 编程语言家族移植过来的 C 和 C 的程序员能够很快熟悉它 C 试图结合 Visual Basic 的快速开发能力和 C 的强大灵活的能力 2 C 是 2000 年 6 月微软公司发布的一种全新编程语言 是由 Anders Hejlsberg 和他的微 软开发团队所设计 具体如下特点 通用 支持跨平台 C 程序的客户端可以运行在不同类型的客户端上 如 PDA 手 机等 PC 装置 简单 主要体现在垃圾收集 指代等特性上 垃圾收集机制将减轻开发人员对内存的 管理负担 而指代功能更是可以让开发者不经过内部类就调用函数 利用 C 的这些 功能 可以使开发者通过较少的代码来实现更强大的应用程序 并且能够更好地避免 错误发生 从而缩短了应用系统的开发周期 面向对象设计 C 具有封装 继承和多态等面向对象程序语言的特征 与 Web 应用紧密的结合 C 支持绝大多数的 Web 标准 如 HTML XML SOAP 等 这是 C 最大的特点 使用它可以轻松开发各种企业级应用平台 安全性机制 消除软件开发中常见错误 如语法错误 NET 提供的垃圾回收器能够 帮助开发者有效的管理内存资源 兼容性 C 遵循 NET 的公共语言规范 CLS 能够保证与其它语言开发组件兼容 灵活的版本处理技术 C 在语言本身内置了版本控制功能 开发人员可以更加容易地 开发和维护 C 提供了完善的错误和异常触发机制 2 22 2 开发及运行坏境开发及运行坏境 硬件平台 CPU 奔腾双核 主频 2 0GHz 内存 1G 32 位 PC 机 160G 硬盘 软件平台 操作系统 Windows XP Win7 Win8 开发工具 Visual Studio 2008 本软件占用系统空间小 能满足用户对常见音频格式文件的播放要求 还具有歌曲 歌 词下载等功能 界面美观交互性好 易于用户理解操作 且不依赖于其它软件 消耗资 源少易维护 程序有较好的健壮性和正确性 运行该软件所需的坏境配置不高 能满足 绝大多数用户的需求 3 3 系统的分析系统的分析 3 13 1 可行性分析可行性分析 可行性研究 feasibility study 的目的 是弄清楚待开发的项目是不是可能实现和值得进 行 通常由系统分析员完成 并需写出可行性论证报告 如结论认为可行 即可制定项 目实施计划 同时开始软件开发 如结论认为不可行 则应提出终止该项目的建议 可 行性论证其实是在高层次上进行的一次大大简化了的需求分析与设计 但它的目的不是 去解决用户提出的问题 仅是确定这项开发是否值得进行 分析它存在哪些风险 换句 话来说 在投入大量精力前研究成功的可能性 减小可能出现的风险 即使研究的结论 是不值得进行 所花的精力也并不浪费 因为它避免了一次更大的浪费 下面我们将根 据本系统的特点具体描述以下可行性分析 3 3 1 13 1 1 经济可行性经济可行性 开发一个基于计算机的系统主要是为了获取较好的经济效益和社会效益 因此对待开 发系统的经济可行性论证就成为可行性研究的重要内容 成本 效益分析可用于评估系统 的经济合理性 给出系统开发的成本估算 并将估算的成本与获得的利润进行比对 从 经济的角度论证待开发系统是否可行 一般来说 基于计算机系统的成本主要由 4 部分 组成 1 购置并安装软硬件及有关设备的费用 2 系统开发费用 3 系统安装 运行和维护费用 4 人员培训费用 5 结合毕业设计的整个开发过程可知开发音乐播放器所需的全部软件平台都是免费的 所以在经济上是完全可行的 3 1 23 1 2 技术可行性技术可行性 技术可行性是可行性研究的关键内容 由于系统分析和定义过程与系统技术可行性评 估过程同时进行 此时系统的功能 性能和目标的不确定性会给技术可行性论证带来许 多困难 因此 技术可行性研究往往是系统开发过程中难度最大的工作 该音乐播放器 是用 C 语音开发的 调试比较简单 所需的计算机硬件配置要求不高 一般 PC 机完全 能满足开发要求 软件方面 基于微软 net 开发平台使用 C 面向对象的编程语音 它开 发速度快 简单易用 技术成熟 软件也容易从网上获得 完全能满足开发需求 3 1 33 1 3 法理可行性法理可行性 法律可行性主要研究新系统的开发和使用是否会侵犯他人权益 是否触犯了国家的法 律法规 本次的毕业设计是由本人独立完成 开发的系统不会侵犯任何人的权益 所用 的软件都是通过合法途径获取 因此完全符合法律法规 综上所述 本系统的开发从经济上 技术上 法律上都是完全可行的 3 23 2 常见的几种音频格式及其特点常见的几种音频格式及其特点 MP3MP3 格式 格式 MP3 的全称是 Moving Picture Experts Group Audio Layer MP3 是 Fraunhofer IIS 研究所的杰出成果 在 MP3 出现前 以有损方式进行音频编码最好的效果 能够压缩到 4 1 而强大的 MP3 可以实现 12 1 的高压缩比 正是因为这种性能的巨大提 升 并且在实现高压缩比的同时还能够保持较好的音质 所以使得 MP3 迅速地流行起来 MP3 是世界上第一个实用化的有损压缩编码方案 几乎所有的播放软件都支持它 也曾 今产生了许多第三方的编码工具 MP3 编码质量分为 固定码率 CBR 平均码率 ABR 和动态码率 VBR 4 特点 音质好 压缩比比较高 被大量软件和硬件支持 应用广泛 WMAWMA 格式 格式 WMA 就是 Windows Media Audio 编码后的文件 它是微软公司推出的 与 MP3 格式齐名的一种新的音乐格式 WMA 在压缩比和音质方面都超过了 MP3 更是 远胜于 RA Real Audio 即使在较低的采样频率下也能产生较好的音质 WMA 针对的不 是单机市场 而是网络 竞争对手就是网络媒体市场中著名的 Real Networks WMA 格 式有非常高的压缩率 一般为 1 18 因此它的文件所占空间比相应的 MP3 文件少一半 这是通过提高音质 减少数据流量的方法来实现更高的压缩率的 此外它还有很强的防 盗版功能 特点 低码率下的音质表现难有对手 4 WAVWAV 格式 格式 WAV 是微软 Windows 系统本身自带的音频格式 因为 Windows 系统的 普及性 此格式已经成了当前最主流的音频格式之一 WAV 文件里面存放的每一块数据 都有自己独立的标识 通过这些标识可以告诉用户究竟是什么数据 WAV 格式的设计非 常灵活 该格式本身与任何媒体数据都不冲突 只要有软件支持 我们甚至可以在 WAV 格式里面存放图像 在 Windows 平台上 通过 ACM 结构及相应的驱动程序 例如 CODEC 编码 解码器 可以在 WAV 文件中存放超过 20 种的压缩格式 比如 ADPCM GSM CCITT G 711 G 723 和 MP3 等 4 特点 音质非常好 被大量软件所支持 RARA 格式格式 RA 格式是 Real Networks 公司所开发的一种新型流式音频 Real Audio 文件 格式 这是网上接触得非常多的一种格式 大部分音乐网站的在线试听都采用了 Real Audio 这种格式完全针对的就是网络上的媒体市场 支持非常丰富的功能 最大的优点 就是这种格式可以根据听众的带宽来控制自己的码率 在保证流畅的前提下尽可能提高 音质 4 特点 码率可控 支持多种音频编码 可边读边放 3 33 3 需求分析需求分析 软件需求是指用户对目标软件系统在功能 性能 行为 设计约束等方面的期望 需 求分析就是通过对应用问题及其坏境的分析与理解采用一系列的分析方法和技术将用户 的需求逐步精确化 完全化 一致化 最终形成需求规模说明文档的过程 本节将从不 同的角度描述系统的需求 3 3 13 3 1 播放器的基本控制需求播放器的基本控制需求 在着手开发系统之前首先要明确该系统应该实现的一些最基本的功能 然后逐步细化 为每个功能创建一个模块 再对各个模块进行开发 通过分析我们得出一款音乐播放器 的基本控制如图 3 1 所示 歌曲下载 歌曲添加 播放 暂停 进度控制 上一曲 下一曲 音量控制 歌词显示 图 3 1 播放器基本控制图 3 3 23 3 2 功能需求功能需求 功能需求规定开发人员必须在产品中实现的软件功能 用户利用这些功能来完成任务 满足业务需求 功能需求有时也被称作行为需求 behavioral requirement 因为习惯上 总是用 应该 对其进行描述 功能需求描述是开发人员需要实现什么 功能需求定义 一个软件系统或组件的功能 也是一个系统需提供的功能及服务 功能可以用一组输入 行为及输出的组合来表示 功能需求可以是计算 技术细节 数据处理或其他说明系统 希望达成功能的内容 功能需求会以非功能性需求 或是质量需求 为其基础 结合音乐播放器所要实现的内容 我们列出用户操作的模块 其中每个模块对应一个 功能 用户启动程序进入主界面 用户可以通过添加模块添加本地歌曲 可以一首一首添也 可以添加整个歌曲文件夹 通过播放列表用户可以实现对歌曲的查找 播放 暂停 音 量调节 静音 通过歌词模块可以实行歌曲歌词的显示 比对 歌词字体选择 此外用户还可以联网下载歌词 歌曲 其功能模块时序图如下 3 2 所示 主界面播放列表播放界面播放对象方法 打 开 文 件 添加到播 放列表 选 择 歌 曲 播 放 播放页面 播 放 访问播放方法 播 放 方 法 返回播放界面 图 3 2 音乐播放器功能时序图 4 4系统设计系统设计 4 14 1 系统概要设计系统概要设计 在需求明确 准备开始编码之前 要做概要设计 概要设计的主要任务是把需求分析 得到的 DFD 转换为软件结构和数据结构 设计软件结构的具体任务是 将一个复杂系统 按功能进行模块划分 建立模块的层次结构及调用关系 确定模块间的接口及人机界面 等 数据结构设计包括数据特征的描述 确定数据的结构特性 以及数据库的设计 概 要设计有多种方法 在早期有模块化方法 功能分解方法 在 60 年代后期提出了面向数 据流和面向数据结构的设计方法 近年来又提出面向对象的设计方法等 本系统采用模 块化软件设计 自顶向下逐层把软件系统划分成若干模块 每个模块完成一个特定的功 能 最后将所有模块按照某种方法组合成一个整体 达到整个播放器所要求的功能 4 24 2 系统功能设计及描述系统功能设计及描述 本音乐播放器不仅要实现对一些常见的音频格式文件的播放 而且还要有友好的用户 界面 其最终设计目标是 实现对多种音频格式文件的播放 实现对歌词的滚动播放及 当前播放曲目长度显示 显示歌曲文件信息 实现静音和音量控制 播放器软件占用系 统资源少 运行平台要求不高 界面美观舒适 操作简单 易维护 高稳定性 能满足 用户的常见需求 主要划分为以下七个功能模块 每个功能模块的作用描述如下 播放控制 控制歌曲的播放状态 如 播放 暂停 上一曲 下一曲 播放过的歌曲 按播放顺序排列在播放列表中 每次退出程序 重启播放器后播放列表中的播放记录 会自动保存不会清空 文件控制 主要用来打开本地播放文件 通过研究音频编码解码的相关技术 了解音 频编码解码的原理和过程 本音乐播放器支持常见音频格式文件播放如 MP3 WMA WAV 等 可以单个曲目添加 也可以将整个文件夹中的曲目全部添加 实现歌曲文件添加的多样化 此外还可以对播放列表进行清空 对曲目的播放顺序进 行控制 当播放列表中曲目过多时 可以从播放列表中快速搜索到需要播放的歌曲 还有对播放列表进行控制如 打开文件所在目录 移除列表 删除文件 显示歌曲文 件的相关信息 如 歌手 专辑等 歌词控制 播放音乐时控制是否显示歌曲歌词 若歌词存在则同步滚动显示歌词 若 歌词不存在则可联网下载歌词 此外还可以对歌词字体进行设置 进度控制 显示当前歌曲的播放总时长和已播放时长 可以通过鼠标调整歌曲的播放 进度 实现歌曲的跳跃式播放 其实现方式是通过进度条和时间的同步显示 声音控制 调整歌曲音量的大小 显示是否静音 下载控制 可以联网下载自己喜欢的歌曲 歌词 若不知道歌曲名称则可以按歌手名 查找歌曲下载 若知道歌曲名则可直接输入名称进行下载 可以在下载进度列表中查 看下载状态 音乐剪切 对音乐文件进行剪切 添加当前路径 对想要的歌曲进行播放 在歌曲播 放过程中你可以在任何地方设置一个起点 然后 再设置一个终点 试听歌曲 就 是把你选出来的这一段播放一遍 看是不是你要的那一段 有时候可以早开始了几秒 或者早结束了几秒 这个时候可以直接在起点和终点的地方进行调整 然后在这个窗 口的上面有个 保存歌曲 就可以把你选出来的这段音乐保存起来了 我们可以通 过歌曲剪切功能截取自己喜欢的音乐片段 来做为自己的手机铃声 其具体功能模块如图 4 1 所示 播放器 播 放 控 制 文 件 控 制 歌 词 控 制 进 度 控 制 声 音 控 制 下 载 控 制 播 放 暂 停 停 止 上 一 曲 下 一 曲 打 开 文 件 播 放 列 表 歌 词 显 示 歌 词 搜 索 歌 词 字 体 设 置 歌 词 比 对 显 示 播 放 进 度 调 整 播 放 进 度 音 量 大 小 控 制 静 音 歌 曲 下 载 歌 词 下 载 输 入 歌 曲 名 下 载 按 歌 手 名 下 载 音 乐 剪 切 图 4 1 音乐播放器功能模块图 5 5系统功能实现系统功能实现 根据上一章对系统各个模块的分析 本节主要讲述如何具体实现这些模块功能 几乎所有的 Windows 程序都离不开窗体 Windows 窗体应用程序是 Windows 下进行 软件开发的基础 在 C 中 通过 Visual Studio 2008 开发平台模版 可以自动生成多种基 于 Windows 的应用程序框架 主要包括基于 NET Framework 的 Windows 窗体应用程序 Windows 服务应用程序 最常用的是 Windows 窗体应用程序 在 Windows 窗体应用程序 中 有窗体 Form 和控件 Control 两个基本概念 窗体是控件的容器 控件是应用程序显 示数据或接受数据输入的相对独立的用户界面元素 NET 类库提供了丰富的窗体相关类 包括窗体 按钮 状态栏 工具栏 菜单 文本框 列表等多种不同的界面元素 此外 还提供各种控件 组件 容器 通过这些界面元素的不同组合 可以设计出友好的用户 界面 对于软件开发中要用到的图片可以自己绘制 相关控件可以调用类库 从而设计 出外形美观的界面 但这也做相当费时 由于毕业设计的时间有限 图片都从网上下载 并做稍微处理 所以美观方面有一定欠缺 待以后有时间慢慢改进 此外界面是由窗体 控件拖放组成 大部分代码由视图设计器自动生成 无需太多改动 因此这一部分不再 详细阐述 下面将主要介绍主要功能模块的核心代码实现 5 15 1 歌曲添加模块歌曲添加模块 很多的应用程序都有打开文件功能 本程序使用 OpenFileDialog 组件 用来打开本地 磁盘上的一个或多个文件 并添加到文件播放列表中 5 1 15 1 1 添加歌曲文件添加歌曲文件 为了赶上社会的潮流 我们经常会从网上下载最热门的音乐 本模块功能就是实现添 加本地歌曲或已下载到电脑的最新歌曲到播放列表 同时更新播放列表 使我们能及时 欣赏到自己喜欢的音乐 其具体代码如下 private void AddSong Click object sender EventArgs e ofd Filter 音乐文件 wmv mp3 wav wmv mp3 wav All files ofd InitialDirectory Application StartupPath ofd FileName ofd RestoreDirectory false ofd Title 添加音乐文件 if ofd ShowDialog DialogResult OK string strLongPath ofd FileName WriteFileByLongPath strLongPath private void WriteFileByLongPath string strLongPath int b strLongPath LastIndexOf string strShortPathWithExtension strLongPath Substring b 1 StreamWriter sw new StreamWriter list ini true string extension strShortPathWithExtension Substring strShortPathWithExtension Length 3 if extension ToLower wmv extension ToLower mp3 extension ToLower wav string strShortPathWithoutExtension strLongPath Substring b 1 strShortPathWithExtension Length 4 Mp3 mp3 new Mp3 strLongPath if String IsNullOrEmpty mp3 Artist String IsNullOrEmpty mp3 Title 获取成功的结果 歌手名 歌曲名 strShortPathWithoutExtension mp3 Artist Trim mp3 Title Trim 否则原文件名 if this myListBox Items Contains strShortPathWithoutExtension 不包含 songList Add strShortPathWithoutExtension Image image getImageByArtistOrSongName mp3 Artist strShortPathWithoutExtension imageList Add image this myListBox Items Add strShortPathWithoutExtension this myListBox songList songList this myListBox imageList imageList sw WriteLine strShortPathWithoutExtension sw WriteLine strLongPath 写入全路径 sw Flush sw Close 5 15 1 2 2 添加歌曲文件夹添加歌曲文件夹 当我们要欣赏歌曲专辑时 可能要添加的文件比较多 显然单曲添加比较麻烦 这时 我们就可以使用 OpenFileDialog 组件的 Multiselect 属性和 Filenames 属性实现整个文件夹 的添加 同时更新播放列表 代码如下 private void tsmiAddSongFolder Click object sender EventArgs e if fbd ShowDialog DialogResult OK string str fbd SelectedPath DirectoryInfo r new DirectoryInfo str GetAllFiles r public void GetAllFiles DirectoryInfo dir FileSystemInfo fileinto dir GetFileSystemInfos foreach FileSystemInfo i in fileinto if i is DirectoryInfo GetAllFiles DirectoryInfo i else string strLongPath i FullName WriteFileByLongPath strLongPath private void tsmiSearch Click object sender EventArgs e if this mySearchPanel boolSearchShow 已经打开 则关闭 this mySearchPanel close else this mySearchPanel boolSearchShow true this mySearchPanel lb this myListBox this mySearchPanel copyValueList initialSearchPanel 图 5 1 打开文件 5 25 2 歌曲列表模块歌曲列表模块 播放列表主要用来显示要播放歌曲的信息 如歌手 照片 曲名 在这里我们使用 ListBox 控件来实现相关功能 详细代码如下 this myListBox Anchor System Windows Forms AnchorStyles System Windows Forms AnchorStyles Top System Windows Forms AnchorStyles Bottom System Windows Forms AnchorStyles Left this myListBox DrawMode System Windows Forms DrawMode OwnerDrawVariable this myListBox FormattingEnabled true this myListBox Location new System Drawing Point 2 115 this myListBox Name myListBox this myListBox Size new System Drawing Size 302 354 this myListBox TabIndex 0 this myListBox MouseDown new System Windows Forms MouseEventHandler this myListBox MouseDown private void myListBox MouseDown object sender MouseEventArgs e if this myListBox thisIndex 1 if e Button System Windows Forms MouseButtons Right this myListBox ContextMenuStrip this cmsListBox 图5 2播放列表 5 35 3 播放控制模块播放控制模块 播放是音乐播放器最重要的功能 本程序使用 Windows Media Player 命名空间中 定义的属性和方法来实现歌曲的播放 暂停 上下去切换等 其核心代码如下 private void initialBtn if playStatue MediaPlayer PlayStatue 播放 正在播放 暂停图片 btnPlay Image Image FromFile pic pause bmp else if playStatue MediaPlayer PlayStatue 暂停 playStatue MediaPlayer PlayStatue 停止 开始播放图片 btnPlay Image Image FromFile pic play bmp if this boolVolumn this btnVolumn Image Image FromFile pic 02 gif else this btnVolumn Image Image FromFile pic 01 gif private void nextSongPlay 下一曲 if playStyle MediaPlayer PlayStyle 随机播放 选择随机播放时就产生一个随机数组 播放记录 根据数组 上一曲下一 曲都有用 if randomIndex 1 randomList Count randomSongPlay else this myListBox doubleClickIndex int randomList randomIndex else if playStyle MediaPlayer PlayStyle 顺序播放 this myListBox doubleClickIndex if this myListBox doubleClickIndex this myListBox Items Count playStatue MediaPlayer PlayStatue 停止 this myListBox doubleClickIndex this myListBox Items Count 1 stop initialBtn return else 下一曲 如果到底 将播放第一首歌曲 全部循环 this myListBox doubleClickIndex if this myListBox doubleClickIndex this myListBox Items Count 转第一首 this myListBox doubleClickIndex 0 btnChangeSong initialBtn private void lastSongPlay if playStyle MediaPlayer PlayStyle 随机播放 else if playStyle MediaPlayer PlayStyle 顺序播放 this myListBox doubleClickIndex if this myListBox doubleClickIndex 1 this myListBox doubleClickIndex 0 playStatue MediaPlayer PlayStatue 停止 stop initialBtn return else this myListBox doubleClickIndex if this myListBox doubleClickIndex 1 转最后一首 this myListBox doubleClickIndex this myListBox Items Count 1 btnChangeSong 5 45 4 音量控制模块音量控制模块 通过调节音量大小来达到歌曲播放的最佳状态 可以调用 API 函数 SENDMESSAGE APPCOMMAND VOLUME MUTE 和 TrackBar 类来实现音量控制 代码如下 private void btnVolumn Click object sender EventArgs e IniUtility FilePath Application StartupPath INI ini if this boolVolumn player setAudioOnOff off this boolVolumn false IniUtility WriteIniKey Player boolVolumn 0 else player setAudioOnOff on this boolVolumn true IniUtility WriteIniKey Player boolVolumn 1 initialBtn private void myTBVolumn Scroll object sender EventArgs e IniUtility FilePath Application StartupPath INI ini int value this myTBVolumn Value player SetVolume value IniUtility WriteIniKey Player Volume value ToString 5 55 5 进度控制模块进度控制模块 进度控制用来显示歌曲的播放进度 也可以通过鼠标拖动实现歌曲的任意播放 通过 把当前播放长度和进度条同步结合起来实现 此外还能够显示歌曲的播放时长 这是通 过 Timer 组件的 Tick 事件实现 其主要代码如下 private void myTBPlayProcess MouseDown object sender MouseEventArgs e player setPlayPosition this myTBPlayProcess Value this lblTime LblCurSecond this myTBPlayProcess Value private void changeCurSecond int value this myTBPlayProcess Value value this showLrc curPlayTimeSecond value 5 65 6 滚动字幕模块滚动字幕模块 有很多音乐播放器都可以实现一边听音乐一边看歌词的功能 这样做可以帮助用户更 好地欣赏音乐 同时还可以强化对歌词的记忆进而达到背诵 为听者以后独唱歌曲做铺 垫 此外还可以对歌词字体进行设置 从而达到视觉和听觉的双重享受 其核心代码如 下 public partial class ShowLrc Form 歌词文件名就是ListBox中项的名称 public ShowLrc InitializeComponent private Font font new Font 华文行楷 25 0f FontStyle Bold public int curPlayTimeSecond 0 lblTime传递过来播放的秒数 用于歌词提前和延后 因为有时候获取时间不准确 public bool isPlay false private void ShowLrc Load object sender EventArgs e initialBtn public void initial graphics this CreateGraphics time Interval 100 time Tick new EventHandler time Tick initialINI void timer Tick object sender EventArgs e clearPanel if string IsNullOrEmpty strLrcContext drawString 未找到歌词 else drawString regc curPlayTimeSecond public void clearContext curFileName subgc null mylist Clear private void clearPanel graphics Clear Color Maroon private void split subgc strLrcContext Split new char r n subgc存儲歌詞文件中所有的时间信息和歌词 使用正则表达式判断时间格式提取出时间信息 并进行排序 for int i 0 i subgc Length i if Regex IsMatch subgc i 01 0 9 2 0 3 0 5 0 9 0 9 0 9 Regex IsMatch subgc i 01 0 9 2 0 3 0 5 0 9 是否匹配 string temp subgc i mylist Add subgc i for int i 0 i mylist Count 1 i for int j i j 0 string temp temp mylist i ToString mylist i mylist j mylist j temp private void readLrc if curFileName string Empty return lrcPath string Format lrc 0 lrc curFileName if File Exists lrcPath strLrcContext return FileStream fs new FileStream lrcPath

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论