简单音乐播放器实验报告 - 副本

合集下载

数电实验报告-音乐播放器

数电实验报告-音乐播放器

实验课题:简易乐曲播放器学院:班级:姓名:学号:班内序号:一、设计课题要求 (2)二、设计思路和总体框图 (2)三、分块电路设计 (4)四、仿真波形 (6)五、源程序 (7)六、功能说明 (20)七、所用元器件情况 (20)八、故障及问题分析 (21)九、总结和结论 (22)十、参考文献 (22)一设计课题的任务要求设计制作一个简易乐曲播放器:1. 播放器内预存3 首乐曲;2. 播放模式:顺序播放、随机播放,并用数码管或LED 显示当前播放模式;顺序播放:按内部给定的顺序依次播放3 首乐曲;随机播放:随机产生一个顺序播放3 首乐曲;3. 用数码管显示当前播放乐曲的顺序号;4. 设置开始/暂停键,乐曲播放过程中按该键则暂停播放,再按则继续播放;5. 设置Next 和Previous 键,按Next 键可以听下一首,按Previous 键回到本首开始;6. 选做:用户可以自行设定播放顺序,设置完成后,播放器按该顺序依次播放乐曲;7. 选做:自拟其它功能。

二设计思路和总体框图设计思路:组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的2个基本要素。

乐曲的12平均律规定:每2个八度音之间的频率相差1倍。

在2个八度音之间,又可分为12个半音,每两个半音的频率比为2开12次方。

另外,音符A (简谱中的低音6)的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。

由此可以计算出简谱中从低音1至高音1之间每个音符的频率,如下表所示。

产生各音符所需的频率可用分频器实现。

本次实验使用的是MAXⅡ实验板,时钟频率为50MHz,计算出各个音符对应的分频系数,进行50%占空比的分频,即可得到各音符对应的频率。

对于节拍,如果将一拍的长度定为1秒,则1/4拍的时间为1/4秒,为其提供一个4Hz的时钟频率即可产生出1/4拍的效果了。

若需要半拍,只需将该音符记录两次就可以了。

产生节拍时钟也用分频器实现,本次实验中时钟频率为5Hz。

简易音乐播放器报告

简易音乐播放器报告

音乐播放器报告书项目名称:简易音乐播放器小组编号:E小组成员:郭元坤、边东东、牛孟强、邢棕、王超目录第1章项目组详情 (1)第2章系统需求分析 (2)2.1 功能需求 (2)2.1.1 播放器的基本控制需求 (2)2.1.2 功能需求分析 (3)2.2 系统结构图和流程图 (4)2.3 系统界面需求 (4)第3章详细设计 (5)3.1 界面设计 (5)3.1.1 播放器的进入界面 (5)3.1.2 播放器主界面 (7)3.2 功能实现 (10)3.2.1 播放器音轨的实现 (10)3.2.2 播放器播放、暂停等功能 (11)3.2.3 数据共享机制 (14)第4章总结 (16)第1章项目组详情E组:组长:郭元坤组员:边东东、牛孟强、邢棕、王超小组成员分工情况:组长郭元坤主要研究音乐播放器系统的需求分析兼读取SD信息中的.mp3文件开发。

而其它功能实现是由边东东、牛孟强、邢棕、王超来实现的。

其各自的负责的主要分工如下:边东东:音乐播放界面和音乐的播放、暂停、上一曲、下一曲,音轨是由我们和边东东、牛孟强实现的。

牛孟强:把从SD卡中读取到的.mp3文件通过列表的方式显示在主页上,还有菜单功能的实现。

包括退出功能和搜索音乐文件功能邢棕和王超:主要负责音乐播放器系统的“设置”界面和功能实现,包括歌词图片的下载和显示还实现了定时退出的功能。

第2章系统需求分析2.1 功能需求2.1.1播放器的基本控制需求根据项目的目标,我们们可获得项目系统的基本需求,一下从不同的角度来描述系统的需求,并且使用用户用例图来描述,系统的功能需求,我们们分成两部分来概括,即播放器的基本控制需要,播放器友好界面需求。

在播放器正在运行时,用户单击“播放”按钮,播放器将播放选中的播放列表中的音乐,并同时显示当前进度;当歌曲未暂停或停止时,用户单击“暂停”按钮,播放器将进行暂停状态;播放器正在播放或暂停时,用户单击“停止”按钮,播放器将停止播放或暂停时,用户点击“上一首”或者“下一首”按钮,播放器将播放上一首或下一首歌曲。

音乐播放器

音乐播放器

数字电路与逻辑设计综合设计实验报告实验名称:简易音乐播放器姓名:班级:071班内序号:一、摘要本实验主要在理论分析和具体的软硬件实现上,完成一个简易的音乐播放器,可以完成上一曲,下一曲,顺序播放,停止,暂停和液晶显示,同时还增加了单曲循环播放功能。

在理论分析的基础上,用VHDL语言编写源代码,再配合具体电路连接,实现对蜂鸣器振动的控制,以及对各项显示功能的切换控制等。

关键字:频率蜂鸣器显示二、设计任务要求n设计制作一个简易乐曲播放器。

1.播放器内预存3首乐曲;2.播放模式:顺序播放、随机播放,并用数码管或LED显示当前播放模式;3.顺序播放:按内部给定的顺序依次播放3首乐曲;4.随机播放:随机产生一个顺序播放3首乐曲;5.用数码管显示当前播放乐曲的顺序号;6.设置开始/暂停键,乐曲播放过程中按该键则暂停播放,再按则继续播放;7.设置Next和Previous键,按Next键可以听下一首,按Previous键回到本首开始;8.选做:用户可以自行设定播放顺序,设置完成后,播放器按该顺序依次播放乐曲;9.选做:自拟其它功能。

三、设计思路和总体设计框图1.分频器讲1MHz的时钟频率分成4Hz,便于输出每个音符2.切换控制器接收到上曲和下曲信号后,自动切换输出时钟;如当正在播放曲1时,收到上曲信号后,自动切换到向曲2提供时钟,中断曲1的时钟;3.每首曲目结束后,自动输出一个单脉冲给复位模块,如果此时是顺序播放模式时,复位模块向控制器输出复位信号;如果此时是单曲重复播放模式时,复位模块屏蔽接收的单脉冲,不向控制器输出信号。

4.曲目向数控分频器依次输入各个音符,在数控分频器中与2047相减后,迫使蜂鸣器振动,由于各个音符的频率不同,振动的频率自然不同,蜂鸣器发出的声音也完全不同。

5.当输入暂停信号时,暂停模块用高电平与时钟相或,从而产生中断时钟的效果;当输入停止信号时,原理同上,只是多输出一个复位信号给切换控制器。

音乐播放器的实验报告

音乐播放器的实验报告

音乐播放器的实验报告音乐播放器的实验报告引言:音乐是人们生活中不可或缺的一部分,而音乐播放器作为传播音乐的工具,在现代社会中扮演着重要的角色。

本次实验的目的是研究音乐播放器的功能和性能,以及对音乐播放器的使用体验进行评估。

一、功能分析音乐播放器的功能主要包括音频播放、音频格式支持、播放列表管理、音量控制、音效调节等。

通过实验测试,我们发现该音乐播放器在这些方面表现出色。

首先,它支持多种音频格式,包括MP3、WAV、FLAC等,能够满足用户对不同音频格式的需求。

其次,播放器具备良好的播放列表管理功能,用户可以根据自己的喜好创建、编辑和删除播放列表,方便快捷地管理自己的音乐。

此外,音乐播放器还提供了音量控制和音效调节功能,用户可以根据自己的需求来调整音量大小和音频效果,提升音乐的听感。

二、性能测试为了评估音乐播放器的性能,我们进行了多项测试。

首先是音频播放质量测试,我们选择了不同类型的音频文件进行播放,并对比了不同音频播放器的音质表现。

结果显示,该音乐播放器在音频播放质量方面表现出众,音质清晰、细腻,能够还原音频本身的特点。

其次是播放稳定性测试,我们将大量音频文件添加到播放列表中,并进行循环播放测试。

结果显示,音乐播放器在长时间播放过程中没有出现卡顿、崩溃等问题,表现稳定可靠。

最后是资源占用测试,我们对音乐播放器的内存占用和CPU占用进行了测试。

结果显示,该音乐播放器在资源占用方面表现较好,占用资源较少,对设备性能的影响较小。

三、用户体验评估除了功能和性能,用户体验也是评价音乐播放器的重要指标之一。

为了评估用户体验,我们进行了用户调研和使用测试。

调研结果显示,用户对该音乐播放器的界面设计和操作方式较为满意,认为界面简洁、直观,操作便捷。

在使用测试中,用户对音乐播放器的播放速度、响应速度和界面切换速度进行了评估,结果显示,音乐播放器在这些方面表现良好,能够满足用户对流畅使用的需求。

此外,用户还对音乐播放器的搜索功能、歌词显示和背景音乐设置等进行了评价,认为这些功能丰富了用户体验,提升了音乐播放的乐趣。

音乐播放器实验报告

音乐播放器实验报告

目录一、课题的介绍和课题的任务二、设计的要求三、系统的分析和系统中功能的设计四、系统的实现及调试五、系统的使用说明六、总结七、程序主要源代码一、课题的介绍和课题的任务音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。

它涵盖了各种音乐格式的播放工具,比如:MP3播放器,WMA播放器,MP4播放器等。

它们不仅界面美观,而且操作简单,带你进入一个完美的音乐空间。

利用MFC应用程序、媒体控制接口MIC的基本知识,设计一个MP3播放器。

要求能够播放常用Windows 音频格式的文件;实现播放控制:播放、暂停、清空播放列表、音量增减、添加歌曲等功能;实现从本地磁盘加入文件,然后对其进行播放。

二、设计的要求系统模块功能图:流程图:二、系统的分析和系统中功能的设计该播放器分为六大功能模块;1、背景图片:音乐播放器的背景图片。

2序中,将文件进行播放。

3、播放/暂停功能:本地磁盘音乐文件添加完毕,单击播放按钮开始播放音乐,直至播放完毕,单击按钮便可以暂停音乐的播放,再次单击按钮时继续播放。

4、播放列表功能:显示添加的歌曲5、清空播放列表功能:清除播放列表中的全部歌曲。

6、音量功能:控制音量的大小四、系统的实现及调试//说明:主要介绍系统编码的实现以及编码中遇到的问题和解决方法。

界面用动态链接库来实现,播放功能用mciSendCommand函数来实现,用外壳函数数来打开文件选项。

定义三3个类两个对话框类CInfoDlg和CEasyPlayerDlg 一个常用类MCI MCI类用来控制播放功能有以下函数Pause:暂态正在播放的音乐Play:播放Stop:停止播放Load:加载播放的音乐GetMediaString:获取播放的时间进度…CInfoDlg:用于查询歌曲的详细信息CEasyPlayerDlg:用于和用户进行交互他有以下函数:CEasyPlayerDlg::OnBtnPlay();单击播放按钮的单击事件。

简易乐曲播放器-数字电路与逻辑设计报告

简易乐曲播放器-数字电路与逻辑设计报告

数字电路与逻辑设计实验报告简易乐曲播放器一、设计课题的任务要求基本任务:设计制作一个简易乐曲播放器。

1. 播放器内预存3 首乐曲;2. 播放模式:顺序播放、随机播放,并用数码管或LED 显示当前播放模式;顺序播放:按内部给定的顺序依次播放3 首乐曲;随机播放:随机产生一个顺序播放3 首乐曲;3. 用数码管显示当前播放乐曲的顺序号;4. 设置开始/暂停键,乐曲播放过程中按该键则暂停播放,再按则继续播放;5. 设置Next 和Previous 键,按Next 键可以听下一首,按Previous 键回到本首开始;提高要求:1.用户可以自行设定播放顺序,设置完成后,播放器按该顺序依次播放乐曲;2.自拟其它功能。

二、系统设计(设计思路、总体框图、分块设计)设计思路:由于一般乐曲最短音符为四分音符,则总体设计思路为每次播放一个四分音符,持续时间1/4秒(分频),并依次循环播放每个四分音符,每个四分音符对应音调利用1M分频器分频产生,播放功能则利用蜂鸣器播放当前音调对应频率值即可。

主题设计完成后,加入各控制功能,显示功能。

总体框图:结构框图:方框图:ASM图:暂停暂停MDS图:分块设计:1.分频模块(1)音调:在声乐中,每个音调对应一个频率,而本次实验即应用1M的时钟分频为各个音调所对应的频率,由于每次输出仅有一个频率,则可以在某个四分音符播放时选择分频为哪个音调对应的频率。

由于宏单元使用不够,改为先将1M时钟4分频,再利用4分频后的时钟分为各个音调对应的频率以减小计数器最大计数值。

(2)音长:由于一般乐曲中最短音长为四分音符,并设定全音符音长为1s,四分音符音长为4s,利用每次播放一个四分音符的思路依次播放每个音符(全音符播放4次,半分音符2次)直至有其他控制。

即需对1MHz分频为4Hz。

2.控制模块(1)模式控制A.顺序模式:依次播放每个四分音符,播完3首歌曲后循环B.随机模式:利用异或产生随机数并在播完歌曲后(或按下一首)利用所产生的随机数播放另两首歌曲中的一首C.用户自定义模式:a.顺序播放:依次按1、2、3的顺序播放歌曲并循环b.倒序播放:依次按3、2、1的顺序播放歌曲并循环(2)按键控制A.暂停:在任意播放时刻按下即暂停播放,并记下断点处,蜂鸣器消声,所有彩灯数码管熄灭,一切功能键失效,释放时即从断点处恢复B.下一首:在任意播放时刻按下即按当前模式播放下一首歌曲C.本首重放:在任意播放时刻按下即从播放当前播放乐曲的第一个四分音符处开始播放D.上一首:在任意播放时刻按下即按当前模式播放上一首歌曲3.显示模块(1)彩灯播放某个四个分音符时,根据当前播放音调按七个简谱显示在七个彩灯上(2)数码管第一个数码管显示播放模式:顺序显示0,随机显示8,用户自定义正序显示1,用户自定义倒序显示2第二个数码管显示当前播放曲目序号需要控制两个数码管显示时的时钟分配问题(利用视觉暂留控制1M时钟二分频依次点亮两个数码管)(3)蜂鸣器依次播放所需播放的四分音符三、仿真波形及波形分析本实验仿真着实不易。

电子技术试验之音乐播放器实验报告

电子技术试验之音乐播放器实验报告

电子技术试验之音乐播放器实验报告一、实验目的1、熟练使用MAX+PLUSII软件平台。

2、了解音阶发生原理,学会用硬件描述语言(AHDL)建立音阶发生器模块,并最终编成乐曲,使其可以播放乐曲。

3、下载到JDEE-10试验箱上进行调试和验证音乐播放器的功能。

二、预期功能1、播放一首乐曲。

2、用任意微动开关的按动来控制音乐的播放与停止。

3、数码管两位显示正在播放的音符简谱。

4、点阵模拟五线谱,用十字灯标出正在播放的音符在音阶中的位置。

三、方案设计顶层设计图:模块说明:FREQ**:不同的音高发生器FREQDIVIDER:将高音一分为二产生低音的分频器KEYFORSTOP+stopsign:控制音乐播放与停止的输入端,stopsign为计数器,输出停止与播放的信号counter1:作为音乐节奏的分频器NEW_WORLD:乐曲播放器,曲名为《来自新世界》ED27SEGMENT:数码管控制器,输出显示简谱与高低音counter_disp+DISP:点阵控制器及其输入的扫描时钟信号分频器下面将介绍以上模块的具体实现及功能。

1、分频①音频分频音名与频率的关系:音乐上的十二平均律规定:每两个八度音之间的频率相差一倍。

在这两个八度音之间,分成十二个半音,每两个相领半音的频率比为12√2。

另外还规定,音名A(简谱低音6)的频率为 440Hz。

音名 B 到 C 之间、E 到 F 之间为半音,其余为全音。

这样,可计算得从低音5到高音3之间的每个音名的频率为:(*l表示低音,*h表示高音)∶g:1567.98Hzgl783.99Hzal:880Hz a:1760Hzbl:987.76Hz b:1975.53Hz->2024.77c:1046.50Hz ch:2093Hz->1911.13d:1174.66Hz dh:2349.32Hz->1702.62e:1318.51Hz eh:2637.02Hz->1516.86f:1396.92Hz这些低频信号由高频信号经过分频而得,时钟频率4MHz,而音频ah为1760Hz,则4M/1760=2272,由此设计一个2272进制的计数器,其时钟信号为4MHz,进位信号就是1760Hz。

QT制作简易音乐播放器报告

QT制作简易音乐播放器报告

目录1.课程实习目的 (1)1.1了解QT和QT creator (1)1.2了解Qt phonon的多媒体框架 (1)2.课程实习题目描述和要求 (1)2.1 QT制作音乐播放器 (1)2.2音乐播放器能实现简单的功能 (1)3.课程实习报告内容 (1)3.1实验步骤 (1)3.2程序代码 (2)3.3实现截图 (4)4.总结 (5)5.任务分配 (6)1.课程实习目的1.1了解QT和QT creatorQt Creator是跨平台的Qt IDE,Qt Creator 是Qt 被Nokia 收购后推出的一款新的轻量级集成开发环境(IDE)。

此IDE 能够跨平台运行,支持的系统包括Linux(32 位及64 位)、Mac OS X 以及Windows。

根据官方描述,Qt Creator 的设计目标是使开发人员能够利用Qt 这个应用程序框架更加快速及轻易的完成任务。

1.2了解Qt phonon的多媒体框架Phonon是什么?Qt从4.4版本开始提供的一套多媒体框架,提供多媒体回放的功能。

目前在Qt 4.6中实现多媒体播放图形界面主要依赖于phonon框架,其实qt中还有一个Multimedia模块,帮助文档中对它的描述是:实现底层的多媒体播放功能,在一般情况下上层的接口phonon模块更适合实现这些功能。

phonon最初是一个源于KDE的项目,为使用音频和视频的应用程序开发提供的一个框架。

应用程序不用去管多媒体播放是通过什么实现的(如gstreamer、xine),只需调用相应的接口就行,但这中间需要一个中转,被称为backend。

Qt也是通过phonon来实现跨平台的多媒体播放。

2.课程实习题目描述和要求2.1 QT制作音乐播放器通过创建带有Phonon模块的工程,对音乐播放器进行设计,主要用到模块中的MediaObject (管理媒体源) AudioOutput (连接物理设备)SeekSlider(实现进度条)QList (实现播放列表)2.2音乐播放器能实现简单的功能这个软件设计的目的就是制作一个能够播放音频的播放器。

播放器实验报告(3篇)

播放器实验报告(3篇)

第1篇一、实验目的1. 熟悉播放器的基本原理和功能模块。

2. 掌握音频、视频文件的解码与播放技术。

3. 提高编程能力和项目实践能力。

二、实验环境1. 操作系统:Windows 102. 开发工具:Visual Studio 20193. 编程语言:C++4. 常用库:FFmpeg三、实验内容1. 播放器界面设计2. 音频、视频文件解码3. 音频、视频同步播放4. 控制功能实现四、实验步骤1. 播放器界面设计(1)创建项目,添加所需控件(2)设置控件属性,包括大小、位置、颜色等(3)添加播放按钮、暂停按钮、停止按钮等控制按钮2. 音频、视频文件解码(1)引入FFmpeg库(2)加载音频、视频文件(3)解码音频、视频数据3. 音频、视频同步播放(1)创建音频、视频播放线程(2)实现音频、视频数据同步(3)调整播放进度4. 控制功能实现(1)添加播放按钮、暂停按钮、停止按钮等事件处理函数(2)实现播放、暂停、停止等功能五、实验结果与分析1. 播放器界面设计本实验成功实现了播放器界面设计,包括播放区域、控制按钮、进度条等。

界面简洁美观,用户操作方便。

2. 音频、视频文件解码通过引入FFmpeg库,成功实现了音频、视频文件的解码。

在解码过程中,我们提取了音频、视频的采样率、码率、帧率等关键信息,为后续同步播放提供了依据。

3. 音频、视频同步播放在实现音频、视频同步播放时,我们采用了线程同步技术。

通过创建音频、视频播放线程,分别处理音频、视频数据的播放,确保了音频、视频播放的同步性。

同时,我们还实现了播放进度调整功能,方便用户实时查看和调整播放进度。

4. 控制功能实现本实验成功实现了播放、暂停、停止等功能。

用户可以通过控制按钮,轻松实现播放器的控制操作。

六、实验总结通过本次实验,我们掌握了播放器的基本原理和功能模块,熟悉了音频、视频文件的解码与播放技术。

同时,我们还提高了编程能力和项目实践能力。

以下为实验过程中总结的一些心得体会:1. 熟练掌握FFmpeg库的使用,能够实现音频、视频文件的解码与播放。

音乐播放器的实验报告

音乐播放器的实验报告

音乐播放器的实验报告音乐播放器的实验报告引言:音乐是人们生活中不可或缺的一部分,而音乐播放器是我们享受音乐的重要工具。

本次实验旨在研究音乐播放器的功能和性能,以及对用户体验的影响。

一、音乐播放器的功能音乐播放器作为一种多媒体设备,具备多种功能,包括音乐播放、音量调节、音乐列表管理、音效设置等。

在本次实验中,我们主要关注以下几个功能。

1. 音乐播放:音乐播放器应能够播放多种格式的音乐文件,如mp3、wav等,并提供播放控制按钮,如播放、暂停、上一曲、下一曲等。

2. 音量调节:音乐播放器应具备音量调节功能,用户可以通过按钮或滑动条来调节音量大小,以满足个人需求。

3. 音乐列表管理:音乐播放器应能够管理音乐文件,包括添加、删除、排序等操作。

用户可以根据自己的喜好创建不同的音乐列表,并随时切换。

4. 音效设置:音乐播放器应提供音效设置选项,如均衡器、重低音增强等。

用户可以根据自己的喜好来调整音效,以获得更好的音乐体验。

二、音乐播放器的性能音乐播放器的性能对于用户体验至关重要。

在本次实验中,我们主要关注以下几个性能指标。

1. 音质:音乐播放器应能够提供高质量的音乐播放效果。

我们通过对比不同音乐播放器的音质差异,评估其音质性能。

2. 响应速度:音乐播放器的响应速度应尽可能快,以提供流畅的用户体验。

我们通过测试不同音乐播放器的响应速度,评估其性能表现。

3. 耗电量:音乐播放器应尽可能降低耗电量,以延长电池寿命。

我们通过测试不同音乐播放器的耗电量,评估其节能性能。

4. 兼容性:音乐播放器应具备良好的兼容性,能够播放各种格式的音乐文件,并适配不同操作系统和设备。

我们通过测试不同音乐播放器的兼容性,评估其性能表现。

三、音乐播放器对用户体验的影响音乐播放器的功能和性能直接影响用户体验。

在本次实验中,我们通过用户调查和实际体验,评估不同音乐播放器对用户体验的影响。

1. 用户调查:我们设计了问卷调查,收集用户对不同音乐播放器的评价和意见。

音乐播放器实验报告

音乐播放器实验报告

音乐播放器实验报告音乐播放器实验报告一、引言音乐是人们生活中不可或缺的一部分,而音乐播放器则是我们享受音乐的重要工具。

本次实验旨在研究音乐播放器的功能和性能,以及对音乐播放器进行一系列的测试和评估。

二、实验目的1. 了解音乐播放器的基本原理和功能;2. 掌握音乐播放器的使用方法和操作技巧;3. 对音乐播放器进行性能测试和评估。

三、实验方法1. 设备准备:准备一台音乐播放器和一些音乐文件;2. 功能测试:测试音乐播放器的基本功能,如播放、暂停、快进、快退等;3. 音质测试:通过耳机或外部音箱,对音乐播放器的音质进行评估;4. 文件格式测试:测试音乐播放器对不同文件格式的支持情况;5. 电池续航测试:测试音乐播放器的电池续航能力;6. 操作便捷性测试:测试音乐播放器的操作界面、按键布局和易用性。

四、实验结果与分析1. 功能测试结果:经过测试,音乐播放器的基本功能均正常运行,包括播放、暂停、快进、快退等。

播放器的响应速度也较快,用户体验良好。

2. 音质测试结果:通过与其他音响设备进行对比测试,音乐播放器的音质表现出色,音质清晰、音量适中,能够满足大多数用户的需求。

3. 文件格式测试结果:音乐播放器支持多种音频文件格式,如MP3、WAV、FLAC等,能够满足用户对不同格式音乐文件的播放需求。

4. 电池续航测试结果:音乐播放器的电池续航能力较为出色,经过连续播放测试,一次充满电的电池能够支持数小时的音乐播放时间,满足用户长时间使用的需求。

5. 操作便捷性测试结果:音乐播放器的操作界面简洁明了,按键布局合理,用户可以轻松上手。

同时,播放器的菜单操作也较为便捷,用户可以快速找到所需的音乐文件。

五、结论通过本次实验,我们对音乐播放器的功能和性能进行了全面的测试和评估。

实验结果表明,音乐播放器具备良好的音质、稳定的功能和操作便捷性,能够满足用户对音乐播放的需求。

然而,我们也注意到音乐播放器在文件格式支持方面还有一些不足,需要进一步改进和优化。

Java综合实验-简易音乐播放器-实验报告

Java综合实验-简易音乐播放器-实验报告

Java综合实验实验报告一、实验要求根据下列描述:为某音乐爱好者开发音乐管理系统,该系统可以为音乐爱好者对已有的音乐信息检索、音乐播放、音乐收藏进行管理。

(1)音乐检索:对指定音乐名称进行检索,获取音乐的基本信息。

(2)音乐播放:对已有音源的音乐进行播放音乐收藏:对喜欢的音乐进行收藏管理,记录音源的位置等;二、核心思想利用MVC模式,结合javafx和SceneBuilder开发音乐管理系统三、实验原理四、实验环境Window 11、JDK-17、Intellij IDEA、JavaFX Scene Builder 2.0五、核心代码:1.业务逻辑:①User类package prehensiveExperiment.logic;import java.util.ArrayList;import java.util.List;/*** 用户类* 这个类记录了用户信息:账号、密码以及自己维护的音乐收藏*/public class User {private String account;private String password;private List<Music> musicCollection;public User(String account, String password) {this.account = account;this.password = password;musicCollection = new ArrayList<>();}public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}/*** 获取音乐收藏* @return musicCollection*/public List<Music> getMusicCollection() {return musicCollection;}/*** 收藏歌曲* @param music*/public void addMusic(Music music){musicCollection.add(music);}/*** 取消收藏* @param music*/public void deleteMusic(Music music){musicCollection.remove(music);}@Overridepublic String toString() {return "User{" +"account='" + account + '\'' +", password='" + password + '\'' +", musicCollection=" + musicCollection +'}';}}②Music类:package prehensiveExperiment.logic;/*** 音乐类* 这个类记录了歌曲的信息:歌曲名、歌手、歌曲时长、大小、发行时间、专辑*/public class Music implements Comparable<Music>{private String name;private String singer;private String totalTime;private String size;private String startTime;private String album;public Music(String name, String singer, String totalTime, String size, String startTime, String album) { = name;this.singer = singer;this.totalTime = totalTime;this.size = size;this.startTime = startTime;this.album = album;}public String getName() {return name;}public void setName(String name) { = name;}public String getSinger() {return singer;}public void setSinger(String singer) {this.singer = singer;}public String getTotalTime() {return totalTime;}public void setTotalTime(String totalTime) {this.totalTime = totalTime;}public String getSize() {return size;}public void setSize(String size) {this.size = size;}public String getStartTime() {return startTime;}public void setStartTime(String startTime) {this.startTime = startTime;}public String getAlbum() {return album;}public void setAlbum(String album) {this.album = album;}/*** 默认按歌手排序* @param o* @return*/@Overridepublic int compareTo(Music o){return pareTo(o.singer);}@Overridepublic String toString() {return "Music{" +"name='" + name + '\'' +", singer='" + singer + '\'' +", totalTime='" + totalTime + '\'' +", size='" + size + '\'' +", startTime='" + startTime + '\'' +", album='" + album + '\'' +'}';}}③MusicSys类:package prehensiveExperiment.logic;import java.io.File;import java.io.FileNotFoundException;import java.util.ArrayList;import parator;import java.util.List;import java.util.Scanner;/*** 音乐管理系统* 这个类维护了用户音乐收藏、本地音乐以及播放器的常规操作*/public class MusicSys {private Music currentMusic;private int index;//当前播放音乐的索引值private String state;private double volume;private List<User> users;//用户private int index2;//当前登录用户的索引值private List<Music> musics;//本地音乐private static MusicSys instance = null;//单例模式/*** 构造函数* 分别调用createUser()和createMusic()录入用户和音乐信息* 播放器初始状态:默认关闭(state = OFF),如果打开默认播放第一首歌(index=0),音量调至一半(volume = 0.5)* @throws FileNotFoundException*/private MusicSys() throws FileNotFoundException {users = new ArrayList<>();musics = new ArrayList<>();createUser();createMusic();index = 0;currentMusic = musics.get(index);state = "OFF";volume = 0.5;}/*** 单一工厂* @return instance* @throws FileNotFoundException*/public static MusicSys getInstance() throws FileNotFoundException {if(instance == null)instance = new MusicSys();return instance;}/*** 这个方法通过扫描事先写好的User.txt文件,将用户信息一条条录入。

音乐播放学生实验报告

音乐播放学生实验报告

音乐播放学生实验报告实验目的本实验旨在通过设计一个音乐播放器的实现,加深学生对嵌入式系统的了解,并学习如何利用硬件和软件协同工作来完成一个综合性的项目。

实验器材和软件1. STM32F103C8T6开发板2. USB接口3. 3.5mm音频接口4. TFT彩屏5. 杜邦线、导线、音频线实验原理本音乐播放器实验基于STM32F103C8T6开发板,通过连接TFT彩屏显示音乐文件列表,通过调用库函数实现音乐播放与控制。

实验步骤步骤一: 准备工作1. 将开发板通过USB接口连接到电脑上,并安装开发环境和相关驱动程序。

2. 连接3.5mm音频接口和音频线。

步骤二: 硬件连接1. 将TFT彩屏与开发板通过杜邦线连接起来,确保连接稳固可靠。

步骤三: 创建音乐播放程序1. 在开发环境中新建一个工程,选择合适的开发板型号;2. 配置硬件参数,包括打开音频接口、TFT彩屏以及相应的引脚连接;3. 导入音乐文件,并将其添加到工程中;4. 编写代码实现音乐播放器的功能,包括音乐文件的读取、解码和输出控制;可以使用库函数来实现这些功能;5. 对代码进行调试和测试,确保音乐播放器的各项功能正常运行;6. 将编写完成的程序下载到开发板中。

步骤四: 运行实验1. 将音乐播放器开启,并选择所需播放的音乐文件;2. 通过TFT彩屏显示音乐文件列表,并提供相应的操作选项;3. 在选中音乐文件后,点击播放按钮,实现音乐的播放;4. 可以通过按钮或触摸屏实现音乐的暂停、停止、上一曲、下一曲等控制功能。

实验结果与分析通过本次实验,我成功地实现了一个音乐播放器,并验证了其正常工作。

音乐播放器具有可靠的功能,可以播放、暂停、停止音乐,并可以切换上一曲、下一曲。

通过TFT彩屏,可以显示当前播放的音乐文件列表,方便用户选择不同的音乐文件。

实验总结通过本次实验,我对嵌入式系统的原理和应用有了更深入的了解。

通过硬件和软件的协同工作,我成功地完成了一个音乐播放器的设计与实现。

音乐播放器的实验报告

音乐播放器的实验报告

一、实验目的1. 熟悉音乐播放器的基本原理和设计方法。

2. 掌握音乐播放器软件的开发流程和关键技术。

3. 培养学生的动手实践能力和团队协作精神。

二、实验环境1. 操作系统:Windows 102. 开发工具:Java Development Kit (JDK) 1.83. 开发环境:Eclipse IDE for Java Developers4. 音乐格式:MP3、WAV等三、实验内容1. 音乐播放器功能需求分析2. 音乐播放器系统设计3. 音乐播放器软件实现4. 音乐播放器测试与优化四、实验步骤1. 功能需求分析音乐播放器应具备以下功能:(1)播放音乐:支持MP3、WAV等音乐格式;(2)播放列表:支持添加、删除、排序音乐列表;(3)音量控制:支持音量调节;(4)播放模式:支持顺序播放、随机播放、单曲循环;(5)播放进度:显示当前播放时间和总时长;(6)播放界面:简洁、美观、易用。

2. 系统设计(1)模块划分音乐播放器系统分为以下模块:①音乐播放模块:负责播放音乐、控制播放进度、音量等;②播放列表模块:负责管理音乐列表、添加、删除、排序音乐;③用户界面模块:负责显示播放界面、交互操作等。

(2)技术选型①音乐播放模块:采用Java Media Framework (JMF) 进行音乐播放;②播放列表模块:使用ArrayList存储音乐信息;③用户界面模块:采用Swing组件实现。

3. 软件实现(1)音乐播放模块①导入JMF库,创建播放器实例;②设置播放器播放源(音乐文件);③实现播放、暂停、停止、音量调节等功能;④实现播放进度显示。

(2)播放列表模块①创建播放列表类,继承ArrayList;②添加、删除、排序音乐列表;③实现音乐列表的遍历和查找。

(3)用户界面模块①设计播放界面布局,包括播放按钮、进度条、音量条等;②实现播放器与用户界面的交互操作;③实现播放器功能的调用。

4. 测试与优化(1)功能测试①测试播放音乐功能,确保支持多种音乐格式;②测试播放列表功能,确保添加、删除、排序操作正常;③测试播放模式功能,确保顺序播放、随机播放、单曲循环正常;④测试音量控制功能,确保音量调节正常;⑤测试播放进度显示功能,确保播放时间与总时长准确。

音乐播放器实验报告

音乐播放器实验报告

防灾科技学院实习报告书专业信息管理与信息系统系别灾害信息工程系报告题目音乐播放器的设计与实现报告人 ** 班级 **指导教师 *** 带队教师 ***实习时间 7.2-7.16 实习单位 4#501教务处监制目录目录 (2)1、实习题目 (3)2、实习目的 (3)3、实习所需条件 (3)3.1硬件需求 (3)3.2 软件需求 (3)4、实习内容 (4)5、实习步骤 (4)5.1需求分析 (4)5.1.1实验说明 (4)5.1.2实验步骤 (5)5.2面向对象的分析 (5)5.2.1实验说明 (5)5.3面向对象的设计 (6)5.3.1 界面设计 (6)5.4系统实现 (14)5.4.1音乐盒功能一:添加文件 (14)5.4.2音乐盒功能二:删除文件 (15)5.4.3 音乐盒功能三:编辑功能 (16)5.4.4音乐盒功能四:播放模式 (18)5.4.5音乐盒功能五:皮肤功能 (19)5.4.6音乐盒功能六:界面 (20)5.4.7音乐盒功能七:搜索功能 (21)5.4.8音乐盒部分其他功能 (23)5.5系统测试 (23)5.5.1 软件安装打包 (23)5.5.2 功能测试 (26)6、实训心得 (26)7、代码实现所有功能 (27)实习题目:音乐播放器设计与实现音乐盒的制作,为能够满足一般用户的需求,能够实现能够打开格式为mpg; avi; wma; mov; wav; mp2; mp3的音乐文件,音乐的播放,暂停,上一首,下一首,在不同播放模式(顺序播放,单曲循环,列表循环)下的自动播放,搜索在列表存在的歌曲,以及搜索网络歌曲.(在GOOGLE音乐里搜索)。

再者,界面的皮肤设置,透明度,鼠标的样式设计也是播放器制作的一大模块。

2、实习目的综合运用《面向对象程序设计》课程基础理论知识,完成学生音乐播放器的设计与开发工作。

使学生熟悉Windows应用程序开发的基本流程;熟练掌握软件需求分析方法和需求建模工具;熟练掌握面向对象的分析和设计技术;熟练掌握面向对象语言的基本语法和高级特性;3、实习所需条件3.1硬件需求每人一台高性能计算机,要求2G以上内存、双核CPU或更高配置。

实验实训报告音乐播放器

实验实训报告音乐播放器

一、实验目的1. 了解音乐播放器的基本原理和组成。

2. 掌握音乐播放器的电路设计方法。

3. 熟悉音乐播放器中常用元器件的性能和应用。

4. 提高动手能力和实际操作技能。

二、实验原理音乐播放器是一种将数字音频信号转换为模拟音频信号,并通过扬声器播放出来的设备。

其基本原理如下:1. 数字音频信号:音乐播放器接收的数字音频信号通常为MP3、WMA等格式,这些格式经过压缩处理后存储在存储介质上。

2. 数字信号解码:音乐播放器内部有一个数字信号解码器,将数字音频信号解码成模拟音频信号。

3. 模拟信号放大:解码后的模拟音频信号需要经过放大器放大,以便驱动扬声器发声。

4. 扬声器发声:放大后的模拟音频信号通过扬声器发声,实现音乐播放。

三、实验内容1. 音乐播放器电路设计2. 元器件选型与测试3. 音乐播放器组装与调试四、实验步骤1. 音乐播放器电路设计(1)确定音乐播放器功能:根据需求确定音乐播放器功能,如播放、暂停、切换曲目等。

(2)选择主控芯片:根据功能需求选择合适的主控芯片,如ESP8266、STM32等。

(3)设计电路原理图:根据主控芯片和功能需求,设计电路原理图,包括数字信号解码、模拟信号放大、按键、显示屏等模块。

(4)绘制PCB板图:根据电路原理图,绘制PCB板图,确定元器件布局和走线。

2. 元器件选型与测试(1)主控芯片:根据电路设计,选择合适的主控芯片,如ESP8266。

(2)数字信号解码芯片:根据电路设计,选择合适的数字信号解码芯片,如DAC芯片。

(3)模拟信号放大芯片:根据电路设计,选择合适的模拟信号放大芯片,如运算放大器。

(4)按键、显示屏等元器件:根据电路设计,选择合适的按键、显示屏等元器件。

(5)测试元器件:对所选元器件进行测试,确保其性能符合设计要求。

3. 音乐播放器组装与调试(1)焊接PCB板:根据PCB板图,焊接元器件,完成音乐播放器组装。

(2)调试电路:检查电路连接是否正确,调整电路参数,确保电路正常工作。

音乐播放器实验报告

音乐播放器实验报告

一、实验项目名称基于单片机的音乐播放器二、实验目的Ⅰ设计方案设计一个基于AT89C51系列单片机的音乐盒,利用按键控制切换演奏出不同的音乐。

蜂鸣器发出某个音调,与之对应的LED灯亮起。

使用两个按键,一个用来切换歌曲,另一个切换LED的变化花样。

Ⅱ研究内容①电路有两种模式:演奏音乐模式和花样灯模式A 演奏音乐模式:演奏完整的一首歌曲,LED随着音乐变化;B 花样灯模式:LED变化出各种花样,蜂鸣器随着发出“滴滴”声;②按下按键1进入演奏音乐模式,再按切换歌曲,共两首歌曲;按下按键2进入花样灯模式,再按切换LED花样,共三种花样。

Ⅲ总体方案图a组成框图:音乐盒的系统结构以AT89C51单片机位控制核心,加上2个按键、时钟复位电路、蜂鸣器、LED模块组成。

单片机负责接收按键的输入,根据输入控制音乐播放曲目和音乐花样灯的显示样式以及蜂鸣器发音。

系统组成框图如下所示:b功能结构图:Key1负责切换播放歌曲,共两首。

分别是祝你生日快乐和寂寞沙洲冷;Key2负责切换LED显示花样,共3种:顺序显示,由两边向中间移动然后向两边移动,循环显示。

三、实验器材Windows7 操作系统Proteus仿真软件keil4软件AT89C51单片机共阴极数码管开关电容晶振电阻发光二极管蜂鸣器四、实验要求(1)以单片机为主控处理器,用蜂鸣器播放歌曲;(2)系统要求有选择上一首、下一曲功能;(3)两个按键,可在播放和显示花样中进行切换;(4)用一个键控制花样类型的显示功能;(5)用LED灯闪烁“伴奏”。

五、实训基本原理(附原理图、源程序清单)1 硬件设计①LED显示电路设计与原理LED显示电路是由8个LED发光二极管组成,连接方式是共阳极,LED接到单片机的P1口,若是低电平,可使LED亮。

发光二极管的亮灭是由内部程序控制的,8个LED发光二极管分别对应不同的音阶,所以LED会随着音阶的变化按规律亮灭。

②硬件电路图及其功能介绍1)电路中用P3.2、P3.3 控制键;2)P1.0~P1.7控制LED;3)P2.3控制蜂鸣器;4)电路为12MHZ晶振频率工作,起振电路中C1、C2均为30PF。

音乐播放器实验报告

音乐播放器实验报告

实验报告课程名称:数字系统设计实验1 指导老师:成绩:__________________ 实验名称:音乐播放实验实验类型:设计型同组学生姓名:_ 无一、实验目的和要求(必填)二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、心得一、实验目的和要求1、掌握音符产生的方法,了解DDS技术的应用。

2、了解AC97音频接口电路的应用。

3、掌握系统“自顶而下”的设计方法。

二、实验内容和原理i实验内容:设计一个音乐播放器ii实验原理:系统划分为主控制器(mcu)、乐曲读取(song_reader)、音符播放器(note_player)、AC97音频接口(codec_conditioner)和ac97_if五个子模块。

系统图如下:mcu接收按键信息,通知song_reader是否要播放(play)以及播放播放哪一首歌曲(song)。

song_reader模块根据mcu要求逐个取出音符{note,duration}送给note_player,乐曲播放完毕回复(song_done)给mcu。

note_player接收音符后以48kHz速率送出该音符的正弦波样品给AV97音频接口模块。

当一个音符播放结束,向song_reader回复note_done。

codec_conditioner、ac97_if负责与AC97接口工作。

另外,按键处理模块完成输入同步化、防颤动和脉冲变换等功能。

三、主要仪器设备带modelsim和ISE 的PC机,XUP Virtex-II Pro 开发系统一套四、设计过程1.音符播放器(note_player)的设计主要任务有:●从song_reader模块接收所需播放的音符信息{note,duration};●根据note值找出DDS的相位增量;●以48khz的速率从sine rom取出正弦样品送给AC97接口模块;●当一个音符播放完毕,向song_rom模块索取新的音符。

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

多媒体技术教程期末实验报告题目:基于MFC的简单音乐播放器班级:软件工程专业:软件工程姓名:xxx学号:xxxxxxxxxx指导老师:xxxXxxxxxx一、课题描述音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。

利用MFC应用程序、媒体控制接口MIC的基本知识,设计一个功能非常简单易于操作的MP3播放器。

要求能够播放常用Windows音频格式的文件;实现播放控制:播放、暂停、音量增减、添加歌曲等功能;实现从本地磁盘加入文件,然后对其进行播放。

本程序是基于MFC对话框的简单程序实现音乐的简单控制。

二、功能分析MFC简单音乐播放器主要对常用Windows音频格式的文件实现播放控制:播放歌曲、暂停播放、停止播放等;实现音量控制:静音、声音放大以及声音减小的功能。

利用MCI基本知识实现相关功能。

通过该程序可以实现简单的音乐播放。

核心是让音乐文件和音乐播放设备关联。

三、源代码和截图具体属性和类向导如下:实现后截图:四、实验心得:实现播放时间的控制是我在实验时遇到的难题,通过上网查询资料得以实现。

制作音乐播放器其实是个挺有趣的体验,完成了也有小小成就感。

但这个简易音乐播放器还有许多功能尚未实现,例如同步歌词显示等等,要真正做一个完善的播放器还需要很多努力。

各个控件的函数如下://浏览void CMFCDlg::Onfilechoice(){char szFileFilter[]="mp3文件(*.mp3)|*.mp3|""wma文件(*.wma)|*.wma|""wav文件(*.wav)|*.wav|""所有文件(*.*)|*.*|";CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);if(dlg.DoModal()==IDOK){CString strFilepath=dlg.GetPathName();CString strFilename=dlg.GetFileName();SetDlgItemText(IDC_filename,strFilename);Load(this->m_hWnd,strFilepath);GetDlgItem(IDC_play)->EnableWindow(true);//文件读取成功时所有按钮变可选的GetDlgItem(IDC_pause)->EnableWindow(true);GetDlgItem(IDC_stop)->EnableWindow(true);m_list.InsertString(m_list.GetCount(),strFilename);m_list.SetCurSel(m_list.GetCount()-1);}}//播放void CMFCDlg::Onplay(){CString strfilename;int index=m_list.GetCurSel();CString mtime;CClientDC dc(this);hour=0;minute=0;second=0;dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度dc.TextOut(320,85,mtime);if(index==-1){MessageBox("请添加音乐");return;}m_list.GetText(index,strfilename);SetDlgItemText(IDC_filename,strfilename);stop();Load(this->m_hWnd,strfilename);play();SetTimer(0,1000,NULL);}//暂停void CMFCDlg::Onpause(){CString strtemp;GetDlgItemText(IDC_pause,strtemp);//获取按钮状态if(pare("暂停")==0){pause();SetDlgItemText(IDC_pause,"恢复");KillTimer(0);//取消计数器的显示}if(pare("恢复")==0){resume();SetTimer(0,1000,NULL);SetDlgItemText(IDC_pause,"暂停");}}//停止void CMFCDlg::Onstop(){stop();SetDlgItemText(IDC_pause,"暂停");KillTimer(0);//取消计数器的显示CString mtime;CClientDC dc(this);hour=0;minute=0;second=0;dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度dc.TextOut(320,85,mtime);GetDlgItem(IDC_play)->EnableWindow(false);//当stop按钮按下时,播放和暂停应该均不可用GetDlgItem(IDC_pause)->EnableWindow(false);GetDlgItem(IDC_del)->EnableWindow(false);}//添加void CMFCDlg::Onfileopen(){char filefiler[]="mp3文件(*.mp3)|*.mp3|""wma文件(*.wma)|*.wma|""wav文件(*.wav)|*.wav|";CFileDialogdlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,filefi ler);if (dlg.DoModal()==IDOK){CString strfilepath=dlg.GetPathName();CString strfilename=dlg.GetFileName();SetDlgItemText(IDC_filename,strfilename);CString mtime;CClientDC dc(this);hour=0;minute=0;second=0;dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度dc.TextOut(320,85,mtime);Load(this->m_hWnd,strfilepath);GetDlgItem(IDC_play)->EnableWindow(true);GetDlgItem(IDC_pause)->EnableWindow(true);GetDlgItem(IDC_stop)->EnableWindow(true);GetDlgItem(IDC_del)->EnableWindow(true);m_list.InsertString(m_list.GetCount(),strfilename);//获取文件名m_list.SetCurSel(m_list.GetCount()-1);}}//删除void CMFCDlg::Ondel(){// TODO: Add your control notification handler code hereUpdateData(TRUE);int index=m_list.GetCurSel();stop();SetDlgItemText(IDC_filename,"");KillTimer(0);hour=0;minute=0;second=0;if(index!=CB_ERR){m_list.DeleteString(index);}}void CMFCDlg::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultCString mtime;second++;CClientDC dc(this);dc.SetBkColor(RGB(124,252,0));dc.SetTextColor(RGB(255,255,203));if(second==60){minute++;second=0;}if(minute==60){hour++;minute=0;}mtime.Format("%02d:%02d:%02d",hour,minute,second);dc.TextOut(320,85,mtime);DWORD cdf=getinformation(MCI_STATUS_POSITION);DWORD cdfrom;cdfrom=MCI_MAKE_MSF(MCI_MSF_MINUTE(cdf),MCI_MSF_SECOND(cdf),MCI_MSF_FRAME(cdf));UpdateData(false);CDialog::OnTimer(nIDEvent);}//双击列表void CMFCDlg::OnDblclkList(){CString mtime;CClientDC dc(this);hour=0;minute=0;second=0;dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度dc.TextOut(320,85,mtime);CString strfilename;int index=m_list.GetCurSel();m_list.GetText(index,strfilename);SetDlgItemText(IDC_filename,strfilename);stop();Load(this->m_hWnd,strfilename);play();SetTimer(0,1000,NULL);}//上一首void CMFCDlg::Onprevious(){int index;index=m_list.GetCurSel();index-=1;if(index<0){MessageBox("亲,没有上一首了哟~");return;}m_list.SetCurSel(index);Onplay();}//下一首void CMFCDlg::Onnext(){CString filename;CString temp;int index;index=m_list.GetCurSel();index+=1;if(index==m_list.GetCount()){MessageBox("已经是最后一首了,亲^.^");return;}m_list.SetCurSel(index);Onplay();}//退出软件void CMFCDlg::Onexitbt(){CDialog::OnCancel();}==========================MFC音乐播放器Dlg.cpp================================ // MFC音乐播放器Dlg.cpp : implementation file//#include "stdafx.h"#include "MFC音乐播放器.h"#include "MFC音乐播放器Dlg.h"#include "Mmsystem.h"#include "Digitalv.h"#pragma comment(lib,"Winmm.lib")#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifHWND m_hWnd;DWORD DeviceID;MCI_OPEN_PARMS mciopenparms;int hour,minute,second;void Load(HWND hWnd,CString strFilepath){m_hWnd=hWnd;mciSendCommand(DeviceID,MCI_CLOSE,0,0);//在加载文件前先清空上一次播放的设备mciopenparms.lpstrElementName=strFilepath;//将音乐文件路径传给设备DWORD dwReturn;if(dwReturn=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_WAIT,(DWORD)(L PVOID)&mciopenparms)){//如果打开文件失败,则将出错信息储存在buffer,并显示出错警告char buffer[256];mciGetErrorString(dwReturn,buffer,256);MessageBox(hWnd,buffer,"出错警告!",MB_ICONHAND|MB_ICONERROR|MB_ICONSTOP);}DeviceID=mciopenparms.wDeviceID;//打开文件成功就关联文件到设备}DWORD getinformation(DWORD item){MCI_STATUS_PARMS mcistatusparms;mcistatusparms.dwItem=item;mcistatusparms.dwReturn=0;mciSendCommand(DeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms);return mcistatusparms.dwReturn;}void play(){MCI_PLAY_PARMS mciplayparms;mciplayparms.dwCallback=(DWORD)m_hWnd;mciplayparms.dwFrom=0;//每次播放都是从0开始播放mciSendCommand(DeviceID,MCI_PLAY,MCI_FROM|MCI_NOTIFY,(DWORD)(LPVOID)&mciplaypa rms);}void pause(){mciSendCommand(DeviceID,MCI_PAUSE,0,0);}void resume(){mciSendCommand(DeviceID,MCI_RESUME,0,0);}void stop(){mciSendCommand(DeviceID,MCI_STOP,0,0);mciSendCommand(DeviceID,MCI_CLOSE,0,0);//当点击停止按钮时,将所有的信息都清除掉}DWORD setvolume(DWORD vol){MCI_DGV_SETAUDIO_PARMS setvolume;//这是设置音量的参数数据结构setvolume.dwCallback=NULL;setvolume.dwItem=MCI_DGV_SETAUDIO_VOLUME;//动作是设置音量setvolume.dwValue=vol;//音量值是volmciSendCommand(DeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_ITEM|MCI_DGV_SETAUDIO _VALUE,(DWORD)(LPVOID)&setvolume);return 0;}/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support//}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////// // CMFCDlg dialogCMFCDlg::CMFCDlg(CWnd* pParent /*=NULL*/): CDialog(CMFCDlg::IDD, pParent){//{{AFX_DATA_INIT(CMFCDlg)m_int = 0;//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);hour=0;minute=0;second=0;}void CMFCDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CMFCDlg)DDX_Control(pDX, IDC_LIST, m_list);DDX_Control(pDX, IDC_SLIDER, m_slider);DDX_Text(pDX, IDC_vol, m_int);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CMFCDlg, CDialog)//{{AFX_MSG_MAP(CMFCDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_about, Onabout)ON_BN_CLICKED(IDC_exitbt, Onexitbt)ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER, OnCustomdrawSlider)ON_BN_CLICKED(IDC_filechoice, Onfilechoice)ON_BN_CLICKED(IDC_play, Onplay)ON_BN_CLICKED(IDC_pause, Onpause)ON_BN_CLICKED(IDC_stop, Onstop)ON_BN_CLICKED(IDC_fileopen, Onfileopen)ON_BN_CLICKED(IDC_del, Ondel)ON_WM_TIMER()ON_LBN_DBLCLK(IDC_LIST, OnDblclkList)ON_BN_CLICKED(IDC_previous, Onprevious)ON_BN_CLICKED(IDC_next, Onnext)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMFCDlg message handlersBOOL CMFCDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);// Set big iconSetIcon(m_hIcon, FALSE);// Set small iconm_slider.SetRange(0,1000);//滑块的移动范围0~1000m_slider.SetPos(500);//滑块指针的初始位置设为500代表初始音量为50GetDlgItem(IDC_play)->EnableWindow(false);//文件没有读取时所有按钮应该是不可选的GetDlgItem(IDC_pause)->EnableWindow(false);GetDlgItem(IDC_stop)->EnableWindow(false);return TRUE; // return TRUE unless you set the focus to a control}void CMFCDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below// to draw the icon. For MFC applications using the document/view model,// this is automatically done for you by the framework.void CMFCDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{//CDialog::OnPaint();CPaintDC dc(this);CRect rect;GetClientRect(&rect);CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmpBackground;bmpBackground.LoadBitmap(IDB_BITMAP5);BITMAP bitmap;bmpBackground.GetBitmap(&bitmap);CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeig ht,SRCCOPY);}}// The system calls this to obtain the cursor to display while the user drags// the minimized window.HCURSOR CMFCDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}void CMFCDlg::Onabout(){CAboutDlg dlg;dlg.DoModal();}void CMFCDlg::Onexitbt(){CDialog::OnCancel();}void CMFCDlg::OnCustomdrawSlider(NMHDR* pNMHDR, LRESULT* pResult){UpdateData(true);m_int=m_slider.GetPos()/10;setvolume(m_slider.GetPos());UpdateData(false);*pResult = 0;}void CMFCDlg::Onfilechoice(){char szFileFilter[]="mp3文件(*.mp3)|*.mp3|""wma文件(*.wma)|*.wma|""wav文件(*.wav)|*.wav|""所有文件(*.*)|*.*|";CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);if(dlg.DoModal()==IDOK){CString strFilepath=dlg.GetPathName();CString strFilename=dlg.GetFileName();SetDlgItemText(IDC_filename,strFilename);Load(this->m_hWnd,strFilepath);GetDlgItem(IDC_play)->EnableWindow(true);//文件读取成功时所有按钮变可选的GetDlgItem(IDC_pause)->EnableWindow(true);GetDlgItem(IDC_stop)->EnableWindow(true);m_list.InsertString(m_list.GetCount(),strFilename);m_list.SetCurSel(m_list.GetCount()-1);}}void CMFCDlg::Onplay(){CString strfilename;int index=m_list.GetCurSel();CString mtime;CClientDC dc(this);hour=0;minute=0;second=0;dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度dc.TextOut(320,85,mtime);if(index==-1){MessageBox("请添加音乐");return;}m_list.GetText(index,strfilename);SetDlgItemText(IDC_filename,strfilename);stop();Load(this->m_hWnd,strfilename);play();SetTimer(0,1000,NULL);}void CMFCDlg::Onpause(){CString strtemp;GetDlgItemText(IDC_pause,strtemp);//获取按钮状态if(pare("暂停")==0){pause();SetDlgItemText(IDC_pause,"恢复");KillTimer(0);//取消计数器的显示}if(pare("恢复")==0){resume();SetTimer(0,1000,NULL);SetDlgItemText(IDC_pause,"暂停");}}void CMFCDlg::Onstop(){stop();SetDlgItemText(IDC_pause,"暂停");KillTimer(0);//取消计数器的显示CString mtime;CClientDC dc(this);hour=0;minute=0;second=0;dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度dc.TextOut(320,85,mtime);GetDlgItem(IDC_play)->EnableWindow(false);//当stop按钮按下时,播放和暂停应该均不可用GetDlgItem(IDC_pause)->EnableWindow(false);GetDlgItem(IDC_del)->EnableWindow(false);}void CMFCDlg::Onfileopen(){char filefiler[]="mp3文件(*.mp3)|*.mp3|""wma文件(*.wma)|*.wma|""wav文件(*.wav)|*.wav|";CFileDialogdlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,filefi ler);if (dlg.DoModal()==IDOK){CString strfilepath=dlg.GetPathName();CString strfilename=dlg.GetFileName();SetDlgItemText(IDC_filename,strfilename);CString mtime;CClientDC dc(this);hour=0;minute=0;second=0;dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度dc.TextOut(320,85,mtime);Load(this->m_hWnd,strfilepath);GetDlgItem(IDC_play)->EnableWindow(true);GetDlgItem(IDC_pause)->EnableWindow(true);GetDlgItem(IDC_stop)->EnableWindow(true);GetDlgItem(IDC_del)->EnableWindow(true);m_list.InsertString(m_list.GetCount(),strfilename);//获取文件名m_list.SetCurSel(m_list.GetCount()-1);}}void CMFCDlg::Ondel(){// TODO: Add your control notification handler code hereUpdateData(TRUE);int index=m_list.GetCurSel();stop();SetDlgItemText(IDC_filename,"");KillTimer(0);hour=0;minute=0;second=0;if(index!=CB_ERR){m_list.DeleteString(index);}}void CMFCDlg::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultCString mtime;second++;CClientDC dc(this);dc.SetBkColor(RGB(124,252,0));dc.SetTextColor(RGB(255,255,203));if(second==60){minute++;second=0;}if(minute==60){hour++;minute=0;}mtime.Format("%02d:%02d:%02d",hour,minute,second);dc.TextOut(320,85,mtime);DWORD cdf=getinformation(MCI_STATUS_POSITION);DWORD cdfrom;cdfrom=MCI_MAKE_MSF(MCI_MSF_MINUTE(cdf),MCI_MSF_SECOND(cdf),MCI_MSF_FRA ME(cdf));UpdateData(false);CDialog::OnTimer(nIDEvent);}void CMFCDlg::OnDblclkList(){CString mtime;CClientDC dc(this);hour=0;minute=0;second=0;dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度dc.TextOut(320,85,mtime);CString strfilename;int index=m_list.GetCurSel();m_list.GetText(index,strfilename);SetDlgItemText(IDC_filename,strfilename);stop();Load(this->m_hWnd,strfilename);play();SetTimer(0,1000,NULL);}void CMFCDlg::Onprevious(){int index;index=m_list.GetCurSel();index-=1;if(index<0){MessageBox("亲,没有上一首了哟~");return;}m_list.SetCurSel(index);Onplay();}void CMFCDlg::Onnext(){CString filename;CString temp;int index;index=m_list.GetCurSel();index+=1;if(index==m_list.GetCount()){MessageBox("已经是最后一首了,亲^.^");return;}m_list.SetCurSel(index);Onplay();}。

相关文档
最新文档