音乐播放器开发文档

合集下载

音乐播放器的详细设计说明

音乐播放器的详细设计说明

音乐播放器详细设计1.引言随着社会的快速发展,现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,音乐成了我们生活工作中的一个重要的部分。

而3G时代的到来,手机移动应用越来越普遍。

此文档就是为了能更好地设计出一个基于android系统的音乐播放器而编写的。

1.1 编写目的为软件的开发者能更好的理解和明确软件开发的详细过程,安排项目与进度、组织软件开发与测试,撰写本文档。

本文档供项目组成员,软件开发人员参考。

1.2项目背景本项目由李雪梅、杨挺等人提出,由本组成员联合开发,实现播放现今流行的音乐MP3等文本格式。

该软件是基于Android系统的音乐播放软件,并能够与其他音乐播放软件兼容。

1.3 参考资料[1] 彭重庆大学出版社《软件工程》“软件计划与可行性分析”[2] 靳岩、姚尚明人民邮电出版社《Android开发入门与实践》[3] 可行性分析[4] 《音乐播放器需求分析书》[5] 《音乐播放器总体设计说明书》1.4项目开发计划实施计划:在技术方面,编程知识比较缺乏,对有些与项目相关的软件不熟悉,需进行人员的技术培训(自学为主),技术难点是数据库的构架和软件功能的设计。

2. 总体设计2.1 项目目的本项目的目的是开发一个可以播放主流的音乐文本格式的播放器。

设计的主要实现功能是播放MP3等格式的音乐文件,并且能控制播放,暂停,停止,音量控制,选择上一曲,选择下一曲,更改皮肤,歌曲列表文件的管理操作,在线播放,读取存储卡播放等多种播放控制,界面简明,操作简单。

软件系统检测到错误行为时,报告错误,并提示处理操作。

2.2 软件运行环境硬件:Android操作系统手机系统软件:Android 2.2 -- 4.0版本支撑软件:Eclipse 7.5 、ADT 1.52.3 需求概述根据项目,我们可以获得项目系统的基本需求,从功能需求、界面需求、性能需求、可靠性要求四个方面来描述系统的需求,再分别对各个需求进行分析。

mp3音乐播放器c语言版

mp3音乐播放器c语言版

用户在控制台输入不同数据后,应用程序根据不同的数据进行相应的输出,实现各种 Mp3 播放器的功能。
2.2 运行环境
Windows 操作系统。
2.3 基本设计概念和处理流程
系统总体功能流程为:运行程序进入页面,显示软件的版本信息,主要包括版本的版本号, 作者,日期,名称。然后输入任意键会进入主菜单,在这之前会提示是否选择歌曲列表,如果不 选择会自动加载默认的列表路径,默认路径为 d:\\mp3.txt。在主菜单里可以选择播放器的各种 控制功能,比如添加歌曲,显示列表,切换列表,查找歌曲,上一首,下一首,播放模式的选择 退出等选项功能。
进入播放列表后:
进入播放模式后: 进入播放选项后:
4.2 运行控制
开始进入界面: 输入 1 则输入新的路径下的播放列表,输入其他字符进入当前默认的播放列表
进入默认列表播放歌曲,根据提示的数字选择不同的选项,实现不同的功能。
输入 1 播放当前列表歌曲 输入 2 查找歌曲 输入 3 增加歌曲 输入 4 进入选择播放模式选项 输入 5 上一首 输入 6 下一首 输入 7 退出播放器
void stay_play(); void comeback_play(); void measure_volume(); void fast_backward(); void fast_upward(); 。
4 运行设计
//暂停播放 //恢复播放 //调节音量大小 //快进 //快退
4.1 运行模块组合
1.2 背景
说明: 1.软件名称:MP3 播放器。 2.开发小组成员:胥站峰 3.软件平台:windows 操作系统。
1.3 定义
MP3(MPEGAudioLayer-3)是一种数字音频压缩技术,数字压缩速率达到每通道 128kbps,数比 例可以达到 12:1。MP3 播放器的主要作用就是解压压缩的 MP3 数字音频,再现 MP3 音乐,同时为携 带方便还要能存贮 MP3 文件,MP3 歌曲可以从电脑上下载。MP3 播放器主要由 MP3 文件解码部分、 文 件 存 贮 部 分 、文 件 下 载 接 口 和 语 音 播 放 部 分 构 成 。根 据 解 码 的 方 法 播 放 器 可 分 为 软 解 码 和 硬 解 码两种: 软解码是利用控制软件解压缩 MP3 文件,它要求控制器处理速度要快。。

基于Android平台的音乐播放器设计文档

基于Android平台的音乐播放器设计文档

基于Android平台的音乐播放器设计文档(张纪华,农学院,021*******;查李想,农学院,021*******)第一章开发目的现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计的实现的这主要功能是播放Mp3等多种格式的音乐文件,并且能够控制播放,暂停,停止,上一曲,下一曲,音量调节,视觉外观,播放列表和歌曲文件的管理操作等多种播放控制功能,界面简明,操作简单。

本项目是一款基于Android手机平台的音乐播放器,使Android手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。

使人们的生活更加多样化。

也使设计者更加熟练Android的技术和其它在市场上的特点。

第二章系统需求分析2.1 功能需求(用例图分析)根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。

以下分别描述:2.1.1 播放器的基本控制需求图2.1 播放器基本控制图2.1.2 播放清单列表管理需求当用户选中列表中某一项歌曲,就有的需求:图2.2 播放器清单图2.3 播放器设定图2.4 文件浏览器2.1.5 功能需求(时序图)分析2.2 系统结构图和流程图(1)音乐播放器的系统流程图(图2.5.1)图2.5.1 流程图(2)系统功能表(表2.1)和系统功能结构图(图2.5.2)表2.1 功能表图2.5.2 系统功能结构图2.3 系统界面需求播放器界面要求布局合理,颜色舒适,控制按钮友好(图2.6)图2.6 播放器界面说明:左下角为清单按钮右下角为程序退出按钮蓝色条为音轨2.4 系统性能需求根据Android手机系统要求无响应时间为5秒,所以就有如下性能要求:(1)当要求歌曲播放时,程序响应时间最长不能超过5秒(2)当要求歌曲暂停时,程序响应时间最长不能超过5秒(3)当要求歌曲停止时,程序响应时间最长不能超过5秒(4)当要求歌曲上/下一首时,程序响应时间最长不能超过5秒(5)当要求进行清单列表时,程序响应时间最长不能超过5秒2.5 运行环境需求操作系统:基于Android操作系统支持环境:Android 2.3.1—Android 4.2.5版本开发环境:Eclipse 3.5 ADT 0.95第三章 Android数据库设计3.1 数据库及字段属性设计3.1.1 字段设计(表、图)file_table 主要是保存歌曲名字、类型、路径字段说明:Id 歌曲id号 fileName 歌曲名字 filePath 歌曲路径 sort 歌曲类型(表3.1、图3.1.1)Android自带一个MediaStore封闭类专门来存储媒体信息通过Uri EXTERNAL_CONTENT_URI 来访问SDcard中的歌曲详细信息。

音乐播放器概要设计方案说明书

音乐播放器概要设计方案说明书

逗逗音乐播放器----概要设计说明书一、引言 (2)1.1、编写目的 (2)1.2、背景 (2)1.3、定义 (3)1.4、参考资料 (3)用户界面风格设计参考了其他音乐播放器的设计 (4)二、总体设计 (4)2.1、需求规定 (4)2.2、运行环境 (4)2.3、基本设计概念和处理流程 (5)2.4、结构 (6)2.5、尚未解决的问题 (6)三、接口设计 (6)3.1、外部接口 (6)3.2、内部接口 (6)四、系统数据结构设计 (7)4.1、逻辑结构设计要点 (7)4.2、物理结构设计要点 (7)4.3、数据结构与程序的关系 (7)五、系统出错处理设计 (7)5.1、出错信息 (7)5.2、补救措施 (8)5.3、系统维护设计 (8)一、引言学习安卓已经有了一段时间,对Android开发平台也有了基本的认识。

阅读了一些相关资料之后,我们开始了Android音乐播放器概要设计。

从该阶段正式进入软件的实际开发阶段,本阶段完成系统的大致设计并明确系统的结构。

本说明书主要分为任务概述、总体结构、外部模块设计和测试设计。

1.1、编写目的本文档主要是逗逗音乐播放器的概要设计说明书,为逗逗音乐播放器的一些基本功能设计的主要依据。

随着多媒体手机的不断发展,音乐已成为当今时代人们缓解压力的不二选择,功能也不断的多样化,而概要设计正是体现出音乐播放器的基本概念。

该文档是整个播放器最雏形,同时也是最基本的引导性文档。

1.2、背景(1)项目名称:逗逗音乐播放器(2)项目负责人:尧艳华(3)开发者:个人完成(4)适用用户:所有Android手机用户伴随着Android平台的出现,Android平台下手机多媒体技术应用更为凸显。

Android平台是google公司最新推出的一个手机平台,该平台对移动设备的程序集中包括一个操作系统,一个中间件和一些关键性作用。

使用该平台不需要任何费用,代码完全开放。

开发人员可以在平台系统上快速开发,并可以利用其它开发人员的工作成果。

实验十七开发简易MP3播放器(精)

实验十七开发简易MP3播放器(精)
/* 过滤文件类型 */ class MusicFilter implements FilenameFilter {public boolean accept(File dir, String name) {//这里还可以设置其他格式的音乐文件 return (name.endsWith(".mp3"));}}
Adroid移动开发
实验步骤
1、创建MP3PlayerActivity及布局文件; 2、定义相关成员变量; 3、编写搜索MP3文件的方法,读取MP3文件刷新列表; 4、开发自动播放功能; 5、开发各按钮事件;
Adroid移动开发
实验注意点
1、播放上一首和下一首时注意判断当前播放的音乐是否 已经是第一首或最后一首;
2、MediaPlayer在设置新的音乐文件前,调用reset()方 法,重置数据源;
Adroid移动开发
开始试验
Adroid移动开发
实验十七 开发简易MP3播放器
Adroid移动开发
实验目的
1、掌握使用MediaPlayer类开发音乐播放器 的基本方式;
2、综合练习MediaPlayer类播放音乐的各类 方法。Adroid移动ຫໍສະໝຸດ 发实验任务与要求任务:
使用MediaPlayer类开发MP3播
放器,包括暂停、停止、继续、
下一首、上一首等功能。
2、MediaPlayer播放结束事件:
mPlayer.setOnCompletionListener(new OnCompletionListener() { public void onCompletion(MediaPlayer arg0) {//播放完成一首之后进行下一首} }
3、查找SD卡根目录下的所有MP3文件:

前端开发实训案例教程初级开发简单的音乐播放器

前端开发实训案例教程初级开发简单的音乐播放器

前端开发实训案例教程初级开发简单的音乐播放器前端开发实训案例教程:初级开发简单的音乐播放器一、引言音乐在我们的生活中扮演着重要的角色,而作为前端开发者,能够开发一个简单而实用的音乐播放器是一项非常具有挑战性的任务。

本教程将引导初级开发者逐步完成一个简单的音乐播放器的开发,旨在帮助读者学习前端开发的基础知识和技巧。

二、设计与功能介绍1. 设计理念我们的音乐播放器将以简洁、直观的界面为目标。

它应该具备基本的音乐播放、暂停、下一曲、上一曲功能,并且能够显示当前播放的歌曲信息以及进度条。

2. 功能需求(1)播放/暂停功能:通过点击播放按钮实现音乐的播放或暂停。

(2)上一曲/下一曲功能:通过点击相应按钮实现切换到上一曲或下一曲。

(3)歌曲列表:显示可播放的歌曲列表,点击列表中的歌曲可直接播放。

(4)进度条:显示当前播放进度,并允许用户拖动进度条进行快进/快退操作。

(5)音量控制:允许用户通过调节音量滑块来控制音量大小。

三、开发环境准备为了完成该案例的开发,我们需要以下的前端开发环境:1. 编程语言:HTML、CSS、JavaScript2. 开发工具:文本编辑器、浏览器四、代码实现与步骤1. HTML 结构首先,我们需要创建 HTML 结构来搭建音乐播放器的界面。

以下是一个示例的 HTML 结构:```html<div id="music-player"><div id="player-control"><button id="prev-song"></button><button id="play-pause"></button><button id="next-song"></button><input type="range" id="volume-control" min="0" max="100" value="50"></div><div id="song-list"><ul><li>歌曲名称1</li><li>歌曲名称2</li><li>歌曲名称3</li></ul></div><div id="progress-bar"><div id="progress"></div></div></div>```2. CSS 样式我们需要为音乐播放器添加 CSS 样式,来美化界面,并使其符合我们的设计理念。

最新软件设计报告播放器开发文档

媒体播放器....................... 错误!未定义书签。

1、引言 (3)1.1编写目的 (3)1.2 问题定义 (3)1.3可行性分析 (4)1.3.1、技术可行性 (4)1.3.2、经济可行性 (4)1.3.3、法律可行性 (5)1.4、术语定义及参考资料 (5)2、功能概述 (6)2.1、目标 (6)2.2、系统技术 (6)3、软件需求分析 (6)3.1、调查用户需求 (6)3.1.1、播放器的基本情况 (6)3.1.2、播放器的要求 (7)3.2、软件功能的设计和划分 (7)3.2.1、功能需求 (7)3.2.2、界面需求 (8)3.2.3、性能需求 (10)3.2.4、可靠性需求 (11)3.2.5、运行环境需求 (11)4、软件结构化设计 (11)4.1、概要设计 (11)4.1.1、系统流程图 (12)4.1.2、层次结构图 (13)4.1.3、主要函数及实现功能 (13)4.2、详细设计 (17)5、结构化实现 (20)5.1、编码 (20)5.2、软件测试 (20)6、总结 (29)1、引言随着计算机的普及,其各种应用技术也随之迅速发展,多媒体技术就是发展最迅速的应用技术之一。

多媒体工具也大大的拓展了计算机的应用领域,是非计算机专业人员最常使用的应用工具之一。

借助高速发展的互联网络,各种各样的媒体播放器将多媒体概念表现的淋漓尽致,潜移默化地影响着人们的生产和生活。

1.1编写目的为明确软件需求,安排软件规划与进度,分配成员的任务,完成软件的开发与测试,撰写本文档,以供开发人员参考。

1.2 问题定义媒体播放器总的实现目标是:实现、播放、暂停、停止、切换上下歌曲等基本播放功能;实现播放列表中的菜单、添加、删除、保存等功能;实现更改播放器皮肤及界面风格等功能;连接网络实现媒体文件搜索,查找等其他功能。

现在有越来越多的播放器实现的基本功能大同小异,风格各有不同,但其占用资源过多,运行速度有所限制。

音乐播放器《需求规格说明书》

学号:0120910680115项目名称音乐播放器的制作课程名称软件体系结构开课学院计算机科学与技术学院指导老师陈明俊学生姓名何文明主要职责编写《需求规格说明书》专业班级软件09012011——2012学年第1学期1.引言 (2)1.1 编写目的1.2项目背景1.3 项目目的和目标1.4参考资料2.系统需求分析 (3)2.1功能需求2.2界面需求2.3性能需求2.4 可靠性要求2.5运行环境需求随着社会的快速发展,现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,音乐成了我们生活工作中的一个重要的部分。

而计算机的普及,让人们能让我们通过播放软件,能更好的听到我们喜欢的音乐。

本文档就是为了能更好的设计出一个音乐播放去而编写的。

1.1 编写目的为明确软件需求、安排项目与进度、组织软件开发与测试,撰写本文档。

本文档功项目经理、设计人员、开发人员参考。

1.2项目背景本项目由张三等人提出,由本组成员联合开发,实现播放现今主流的音乐MP3等文本格式。

开发软件名称:音乐播放器项目提出者:张三项目开发者:小风哥开发中心1.3 项目目的和目标本项目的目的是开发一个可以播放主流的音乐文本格式,本设计的实现主营功能是播放MP3,W A V、OGG等格式的音乐文件,并且能控制播放,暂停,停止,音量控制,选择上一曲,选择下一曲,视觉外观,列表文件盒歌曲文件的管理操作等多种播放控制,界面简明,操作简单1.4参考资料A.可行性分析B.《软件工程实践教程》赵池龙等编,电工出版社出版2.系统需求分析根据项目,我们可以获得项目系统的基本需求,一下从不同角度来描述系统的需求。

2.1功能需求系统的功能需求,我们分成三部分来概括,即播放器的基本控制需求,播放列表管理需求和播放器友好性需求。

一下分别描述:一:播放器的基本控制需求1.播放:双击播放列表中的歌曲进行播放,播放时会将该歌曲的信息显示的右边的歌曲信息面板中,同时会匹配歌词,把相应的歌词显示在右边的歌词面板中。

(2020年整理)音乐播放器开发模块.doc

音乐播放器开发文档1.动能介绍开始菜单包含:a.添加音乐文件b.添加音乐文件夹c.添加背景图片d.退出播放模式:a.单曲循环 b.顺序循环 c.列表播放 d.随机播放透明度:透明百分之几或不透明界面设置:迷你模式关于:版本信息2、代码讲解全局变量:private SoundPlayer Player = new SoundPlayer();private SoundPlayer SencondPlayer = new SoundPlayer();Image[] image = new Image[500];//存放图片数组private int Imagecount = 0;//计算背景图片数private int order = 0;//存储图片总数private int fileCount = 0;//数组中计算音乐文件数private int fileCount1 = 0;//文件系数string[] musicfile = new string[500];//存放音乐文件int selectOne = 0;//双击事件选择的音乐的序号static int stop = 2;//判断是暂停还是播放static double CurrentPosition = 0;//获得文件播放的位置static int State = 0;//当前状态等于时进行单曲循环,等于零的时候进行顺序播放,//当前状态等于时为随机播放//当前状态等于时为列表播放OpenFileDialog openfile = new OpenFileDialog();//打开本地磁盘对话框添加音乐文件private void添加文件ToolStripMenuItem1_Click(object sender, EventArgs e){fileCount1++;openfile.Filter = "|*.mp3";openfile.Multiselect = true;//支持多行文件try{if (DialogResult.OK == openfile.ShowDialog()){musicfile[fileCount] = openfile.FileName;FileInfo fileinfo = new FileInfo(musicfile[fileCount]);//FileInfo类是将文件去相对路径string filename = fileCount1.ToString() + "_" + ;//使音乐名前加序号并只取文件名this.listBox1.Items.Add(filename);//将文件多行显示在列表中this.musicname.Text = ;PlayAndStop(fileCount); //启动MP3播放器fileCount++;}}catch (Exception){MessageBox.Show(musicfile[fileCount].ToString());}}添加音乐文件夹private void添加文件夹ToolStripMenuItem1_Click(object sender, EventArgs e){FolderBrowserDialog folder = new FolderBrowserDialog();//文件夹初始化folder.ShowDialog();string[] file = Directory.GetFiles(folder.SelectedPath.ToString(), "*.MP3");//使用数组存得到的文件int fileName = 0;try{foreach (string Music in file){fileCount1++;FileInfo f = new FileInfo(file[fileName]);//读取文件musicfile[fileCount] = file[fileName];fileName++;fileCount++;//数组存文件数string total = fileCount1.ToString() + "_" + ;//只取f中的文件名this.listBox1.Items.Add(total);}}catch (Exception){MessageBox.Show("输入的音乐总数超出!");}}添加背景图片private void添加背景图片ToolStripMenuItem1_Click(object sender, EventArgs e){FolderBrowserDialog folder = new FolderBrowserDialog();folder.ShowDialog();string[] BGfile = Directory.GetFiles(folder.SelectedPath.ToString(), "*.jpg");foreach (string pic in BGfile){image[order] = Image.FromFile(pic);order++;}this.timer1.Enabled = true;//启动定时器}定时器private void timer1_Tick(object sender, EventArgs e){this.BGpicture.Image = image[Imagecount];if (Imagecount >= order-1){Imagecount = 0;}else{Imagecount++;}}退出播放器private void退出ToolStripMenuItem1_Click(object sender, EventArgs e){this.Close();}MP3音乐播放器播放功能//播放MP3文件private void PlayAndStop(int fileCount){try{stop = 3;this.PlayOrStop.Text = "暂停";FileInfo f = new FileInfo(musicfile[fileCount]);this.musicname.Text = .ToString();//得到正在播放的音乐名listBox1.SelectedIndex = fileCount;//自动选中跳转的文件axWindowsMediaPlayer1.URL = musicfile[fileCount];axWindowsMediaPlayer1.Ctlcontrols.play();}catch (Exception){return;}}a.单曲循环private void单曲循环ToolStripMenuItem1_Click(object sender, EventArgs e){CurrentPosition = axWindowsMediaPlayer1.Ctlcontrols.currentPosition;//得到正在播放的位axWindowsMediaPlayer1.Ctlcontrols.currentPosition = CurrentPosition;//接着停止的位置继续播放State = 1;axWindowsMediaPlayer1.settings.setMode("loop", true);}b.顺序循环private void顺序播放ToolStripMenuItem1_Click(object sender, EventArgs e){State = 0;}c.列表播放private void列表循环ToolStripMenuItem1_Click(object sender, EventArgs e){State = 3;}d.随机播放private void随机播放ToolStripMenuItem1_Click(object sender, EventArgs e){State = 2;}调用播放模式的事件//改变播放状态,当音乐一首播放完后转入下一首,有线程调用private void axWindowsMediaPlayer1_PlayStateChange(object sender,AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e){Thread thread = new Thread(new ThreadStart(PlayThread));//顺序播放if (axWindowsMediaPlayer1.playState==WMPLib.WMPPlayState.wmppsMediaEnded && State == 0) {try{if (selectOne > fileCount-2){selectOne = 0;thread.Start();}{selectOne++;thread.Start();}}catch (Exception){return;}}//随机播放try{if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded && State == 2) {Random Num = new Random();int Sum = Num.Next(0, fileCount);FileInfo f = new FileInfo(musicfile[Sum]);this.musicname.Text = ;selectOne = Sum;thread.Start();}}catch (Exception){return;}//列表播放try{if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded && State == 3) {if (selectOne > fileCount - 2){selectOne = 0;}elseselectOne++;thread.Start();}}}catch (Exception){return;}}调用线程private void PlayThread(){PlayAndStop(selectOne);调用音乐播放功能}制作界面透明功能//透明度%private void toolStripMenuItem7_Click(object sender, EventArgs e) {this.Opacity = 0.1;}//透明度%private void toolStripMenuItem8_Click(object sender, EventArgs e) {this.Opacity = 0.3;}//透明度%private void toolStripMenuItem9_Click(object sender, EventArgs e) {this.Opacity = 0.5;}//透明度%private void toolStripMenuItem10_Click(object sender, EventArgs e) {this.Opacity = 0.7;}//透明度%private void toolStripMenuItem11_Click(object sender, EventArgs e){this.Opacity = 0.9;}//不透明private void不透明ToolStripMenuItem1_Click(object sender, EventArgs e) {this.Opacity = 1.0;}界面设置private void迷ToolStripMenuItem_Click(object sender, EventArgs e){Color color = Color.LightGoldenrodYellow;this.musicname.BackColor = color;bel1.BackColor = color;this.listBox1.BackColor = color;this.Up.BackColor = color;this.PlayOrStop.BackColor = color;this.Down.BackColor = color;this.Stop.BackColor = color;this.MusicText.BackColor = color;this.menu.BackColor = color;this.statusStrip1.BackColor = color;}版本信息private void版本ToolStripMenuItem1_Click(object sender, EventArgs e){MessageBox.Show("软件版本:.0 正式版\n发布时间:.01.19\n\n新音乐播放器具备音乐播放、歌曲搜索、主题切换、窗口透明等功能,是一款性能卓越、体积“瘦小”、界面绚丽、操作简单的全功能音乐软件;\n新音乐播放器满足用户的音乐需要,为您的音乐享受带来更美妙的体验。

音乐播放器开发模块

音乐播放器开发文档1.动能介绍开始菜单包含:a.添加音乐文件b.添加音乐文件夹c.添加背景图片d.退出播放模式:a.单曲循环 b.顺序循环 c.列表播放 d.随机播放透明度:透明百分之几或不透明界面设置:迷你模式关于:版本信息2、代码讲解全局变量:private SoundPlayer Player = new SoundPlayer();private SoundPlayer SencondPlayer = new SoundPlayer();Image[] image = new Image[500];//存放图片数组private int Imagecount = 0;//计算背景图片数private int order = 0;//存储图片总数private int fileCount = 0;//数组中计算音乐文件数private int fileCount1 = 0;//文件系数string[] musicfile = new string[500];//存放音乐文件int selectOne = 0;//双击事件选择的音乐的序号static int stop = 2;//判断是暂停还是播放static double CurrentPosition = 0;//获得文件播放的位置static int State = 0;//当前状态等于时进行单曲循环,等于零的时候进行顺序播放,//当前状态等于时为随机播放//当前状态等于时为列表播放OpenFileDialog openfile = new OpenFileDialog();//打开本地磁盘对话框添加音乐文件private void添加文件ToolStripMenuItem1_Click(object sender, EventArgs e){fileCount1++;openfile.Filter = "|*.mp3";openfile.Multiselect = true;//支持多行文件try{if (DialogResult.OK == openfile.ShowDialog()){musicfile[fileCount] = openfile.FileName;FileInfo fileinfo = new FileInfo(musicfile[fileCount]);//FileInfo类是将文件去相对路径string filename = fileCount1.ToString() + "_" + ;//使音乐名前加序号并只取文件名this.listBox1.Items.Add(filename);//将文件多行显示在列表中this.musicname.Text = ;PlayAndStop(fileCount); //启动MP3播放器fileCount++;}}catch (Exception){MessageBox.Show(musicfile[fileCount].ToString());}}添加音乐文件夹private void添加文件夹ToolStripMenuItem1_Click(object sender, EventArgs e){FolderBrowserDialog folder = new FolderBrowserDialog();//文件夹初始化folder.ShowDialog();string[] file = Directory.GetFiles(folder.SelectedPath.ToString(), "*.MP3");//使用数组存得到的文件int fileName = 0;try{foreach (string Music in file){fileCount1++;FileInfo f = new FileInfo(file[fileName]);//读取文件musicfile[fileCount] = file[fileName];fileName++;fileCount++;//数组存文件数string total = fileCount1.ToString() + "_" + ;//只取f中的文件名this.listBox1.Items.Add(total);}}catch (Exception){MessageBox.Show("输入的音乐总数超出!");}}添加背景图片private void添加背景图片ToolStripMenuItem1_Click(object sender, EventArgs e) {FolderBrowserDialog folder = new FolderBrowserDialog();folder.ShowDialog();string[] BGfile = Directory.GetFiles(folder.SelectedPath.ToString(), "*.jpg");foreach (string pic in BGfile){image[order] = Image.FromFile(pic);order++;}this.timer1.Enabled = true;//启动定时器}定时器private void timer1_Tick(object sender, EventArgs e){this.BGpicture.Image = image[Imagecount];if (Imagecount >= order-1){Imagecount = 0;}else{Imagecount++;}}退出播放器private void退出ToolStripMenuItem1_Click(object sender, EventArgs e) {this.Close();}MP3音乐播放器播放功能//播放MP3文件private void PlayAndStop(int fileCount){try{stop = 3;this.PlayOrStop.Text = "暂停";FileInfo f = new FileInfo(musicfile[fileCount]);this.musicname.Text = .ToString();//得到正在播放的音乐名listBox1.SelectedIndex = fileCount;//自动选中跳转的文件axWindowsMediaPlayer1.URL = musicfile[fileCount];axWindowsMediaPlayer1.Ctlcontrols.play();}catch (Exception){return;}}a.单曲循环private void单曲循环ToolStripMenuItem1_Click(object sender, EventArgs e){CurrentPosition = axWindowsMediaPlayer1.Ctlcontrols.currentPosition;//得到正在播放的位axWindowsMediaPlayer1.Ctlcontrols.currentPosition = CurrentPosition;//接着停止的位置继续播放State = 1;axWindowsMediaPlayer1.settings.setMode("loop", true);}b.顺序循环private void顺序播放ToolStripMenuItem1_Click(object sender, EventArgs e){State = 0;}c.列表播放private void列表循环ToolStripMenuItem1_Click(object sender, EventArgs e){State = 3;}d.随机播放private void随机播放ToolStripMenuItem1_Click(object sender, EventArgs e){State = 2;}调用播放模式的事件//改变播放状态,当音乐一首播放完后转入下一首,有线程调用private void axWindowsMediaPlayer1_PlayStateChange(object sender,AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e){Thread thread = new Thread(new ThreadStart(PlayThread));//顺序播放if (axWindowsMediaPlayer1.playState==WMPLib.WMPPlayState.wmppsMediaEnded && State == 0) {try{if (selectOne > fileCount-2){selectOne = 0;thread.Start();}else{selectOne++;thread.Start();}}catch (Exception){return;}}//随机播放try{if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded && State == 2) {Random Num = new Random();int Sum = Num.Next(0, fileCount);FileInfo f = new FileInfo(musicfile[Sum]);this.musicname.Text = ;selectOne = Sum;thread.Start();}}catch (Exception){return;}//列表播放try{if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded && State == 3) {if (selectOne > fileCount - 2){selectOne = 0;}else{selectOne++;thread.Start();}}}catch (Exception){return;}}调用线程private void PlayThread(){PlayAndStop(selectOne);调用音乐播放功能}制作界面透明功能//透明度%private void toolStripMenuItem7_Click(object sender, EventArgs e){this.Opacity = 0.1;}//透明度%private void toolStripMenuItem8_Click(object sender, EventArgs e){this.Opacity = 0.3;}//透明度%private void toolStripMenuItem9_Click(object sender, EventArgs e){this.Opacity = 0.5;}//透明度%private void toolStripMenuItem10_Click(object sender, EventArgs e){this.Opacity = 0.7;}//透明度%private void toolStripMenuItem11_Click(object sender, EventArgs e){this.Opacity = 0.9;}//不透明private void不透明ToolStripMenuItem1_Click(object sender, EventArgs e) {this.Opacity = 1.0;}界面设置private void迷ToolStripMenuItem_Click(object sender, EventArgs e){Color color = Color.LightGoldenrodYellow;this.musicname.BackColor = color;bel1.BackColor = color;this.listBox1.BackColor = color;this.Up.BackColor = color;this.PlayOrStop.BackColor = color;this.Down.BackColor = color;this.Stop.BackColor = color;this.MusicText.BackColor = color;this.menu.BackColor = color;this.statusStrip1.BackColor = color;}版本信息private void版本ToolStripMenuItem1_Click(object sender, EventArgs e){MessageBox.Show("软件版本:.0 正式版\n发布时间:.01.19\n\n新音乐播放器具备音乐播放、歌曲搜索、主题切换、窗口透明等功能,是一款性能卓越、体积“瘦小”、界面绚丽、操作简单的全功能音乐软件;\n新音乐播放器满足用户的音乐需要,为您的音乐享受带来更美妙的体验。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

音乐播放器开发计划书组长:薛辉20087610232组员:杜学鑫20087610907袁茁20087610137刘一峰20087730124杨硕20087610235李明哲20087610114Android音乐播放器问题定义本软件是为了用户智能手机Android而开发的一套智能软件,提供在线下载音乐,在线播放音乐,读取SD卡音乐文件等功能。

一、可行性研究社会可行性分析:3G技术飞速发展,为满足人们对音乐的追求,音乐播放器层出不从,然而市面上大多音乐播发器软件都太难操作,或者音质不好,不能给用户以更好体验,故提出开放一套更加人性化的手机播放器。

技术可行性分析:以现阶段android技术发展水平,技术人员的技术配备,以及现有资源文档的配备来说,实现本软件是可能的。

经济可行性分析:有本人个人时间以及经费支持,使得开发此软件有了资金保障,可以充分利用这一优势,尽快开发。

其他可行性分析:二、需求分析随着3G时代的到来,手机应用越来越普遍,加之国民手机持有量更是爆炸式增长。

移动音乐服务正是为这一形势而发展起来,本人提出一种多功能手机音乐播放器的应用,主要为了满足不同人群的音乐需要,并且提高优质的音乐服务,于是提出本音乐播放器的主要功能。

需求功能如下:在线下载音乐功能。

在线播放音乐显示声音波段表示提供读取SD卡音乐用户可以定制音乐均衡器,以满足不同音质需求音量调节提供歌词跟随音乐滚动更能提供重力感应选择上、下首歌曲功能四、概要设计(总体设计):软件程序流程图五:详细设计那么接下来就开始我们的每一个模块的详细设计了:在线下载音乐:提供一个文本框供用户输入网络音乐文件地址,然后确定下载,并提供进度条显示,下载完毕后关闭对话框,注意进程之间的问题。

在线播放音乐提供音乐播放的基本功能,快进,暂停,播放,快退,同时进度滑块条需跟随滑动,用户也可以滑动滑动条进行调整播放位置。

提供读取SD卡音乐检测用户SD卡,如果没有,则弹出信息提示,并提示用户下载网络音乐,如果检测有SD卡,则再遍历是否有可播放文件,如果没有,则返回。

如果有,则显示出全部音乐文件,并提供点击播放功能。

用户可以定制音乐均衡器,以满足不同音质需求以一个对话框形式表现出,并提供多项滑动条供用户调节音频,同时更新音乐播放的质量。

音量调节提供提供滑动条供用户调节音量,音量范围在0—100之间提供歌词跟随音乐滚动更能解析LRC歌词文件,并同步歌词已经播放声音,注意以多线程方式以及解析xml 方式处理提供重力感应选择上、下首歌曲功能根据系统自带API开启重力感应功能,同时根据感应的方向选择切换到上下不同首歌曲,然后播放。

六:编码、单元测试。

七:综合测试组织人员对其进行一般性操作测试,针对每一模块进行,同时编写测试报告。

程序员修正Bug,根据用户反映,及时调整。

如果条件允许,可以变编写:测试计划,测试大纲,搭建测试环境,设计和生成测试用例,测试报告八:软件使用培训以及后期维护组织人员进行软件使用培训,并且由程序员或者美工人员制作培训指南。

程序员需熟悉相关模块,并熟悉文档,以便进行后期维护。

歌词同步的原理其实很简单:歌词显示是一个线程, 音乐播放时一个线程,通过播放时间将歌词显示进度与播放进度同步起来。

网络标准的歌词格式是LRC. 我们看下一个LRC文档,其格式就一目了然了.[ti:爱][ar:小虎队][al:华纳国语情浓13首][by:爱上你了音乐网][02:08.00][00:38.00]把你的心、我的心串一串[02:11.00][00:41.00]串一株幸运草、串一?同心圆[02:16.00][00:46.00]让所有期待未?的呼唤[02:19.00][00:49.00]趁青春做?伴[03:16.00][02:24.00][00:53.00]?让年轻越长大越孤单[03:19.00][02:27.00][00:56.00]把我的幸运草种在你的梦田[03:23.00][02:31.00][01:01.00]让地球随我?的同心圆….LRC 格式为[歌词显示起始时间][歌词显示结束时间]歌词内容。

了解歌词同步原理,我们可以想到要做如下工作:1. LRC 解析2. LRC 歌词显示3. 歌词与播放音乐同步4. 歌词的获取一LRC解析这边我推荐YOYOPlayer 音乐播放开源项目. 源代码已经非常好的支持了LRC解析. 我拿过来就用了.过程大概如此: 把LRC文件读到内存里面,用sentence数据结构存放. Sentence里面有Fromtime, Totime, content三个成员变量。

显示的时候需要这些数据。

二. LRC歌词显示歌词的绘制通过重写OnDraw方法.绘制的代码贴出来:long t = tempTime;int index = getNowSentenceIndex(t);if (index == -1) {return;}Sentence now = list.get(index);float f = (t - now.getFromTime()) * 1.0f/ (now.getToTime() - now.getFromTime());if (f > 0.98f) {f = 0.98f;}Shader shader = new LinearGradient(0, 0,now.getContentWidth(mTxtPaint), 0, new int[] { Color.RED,Color.BLUE }, new float[] { f, f + 0.01f },TileMode.CLAMP);mTxtPaint.setShader(shader);canvas.drawText(now.getContent(), 0, 20, mTxtPaint);上面的代码很简单,关键一个函数是getNowSentenceIndex(t). 通过播放时间来获得歌词的索引. 我们看下getNowSentenceIndex()如何实现./*** 得到当前正在播放的那一句的下标不可能找不到,因为最开头要加一句自己的句子,所以加了以后就不可能找不到了** @return 下标*/private int getNowSentenceIndex(long t) {for (int i = 0; i < list.size(); i++) {if (list.get(i).isInTime(t)) {return i;}}// throw new RuntimeException("竟然出现了找不到的情况!");return -1;}还有一个歌词渐变的效果,其关键代码在与对画笔的设置,如下.Shader shader = new LinearGradient(0, 0,now.getContentWidth(mTxtPaint), 0, new int[] { Color.RED,Color.BLUE }, new float[] { f, f + 0.01f },TileMode.CLAMP);mTxtPaint.setShader(shader);三. 歌词与播放音乐同步音乐播放的时候,同时启动歌词显示线程. 将音乐播放的时间设置到歌词View的成员变量中, 以达到同步的目的。

private class MyHandler extends Handler {@Overridepublic void handleMessage(Message msg) {// Log.v("#################hahah", "" + mp.getCurrentPosition());// 重画lrcView.mLyric.setTime(mp.getCurrentPosition());lrcView.invalidate();}}四. 歌词的获取歌词的获取是通过百度搜索出来的. 具体代码如下,很好看懂,关键代码如下:GetMethod get = new GetMethod("/s?wd=" + URLEncoder.encode("filetype:lrc " + key, "GBK"));get.addRequestHeader("Host", "");get.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11");get.addRequestHeader("Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png ,*/*;q=0.5");get.addRequestHeader("Accept-Language", "zh-cn,zh;q=0.5");get.addRequestHeader("Keep-Alive", "300");get.addRequestHeader("Referer", "/");get.addRequestHeader("Connection", "keep-alive");int i = http.executeMethod(get);。

相关文档
最新文档