- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(手机模拟器下音乐播放器的设计与实现
毕业设计之概念设计题目名称手机模拟器下音乐播放器的设计与实现学院计算机学院专业班级姓名学号系统结构设计根据播放器的需求分析,将其复杂的系统按功能划分成四个模块,分别是:基本控制模块、播放清单列表管理模块、播放设定模块和文件浏览器模块。确定每个模块的功能。基本控制模块的功能是使用户能够播放在播放列表中选中的歌曲,同时拥有选择歌曲播放、暂停、停止、上一首、下一首等功能。播放清单列表管理模块的功能主要是当用户选中列表中的某一项歌曲时,可以进行播放、详细、新增、移除、全部移除、设置等功能的选择。播放设定模块的功能主要是设置播放模式,如单曲、顺序、随机播放,同时可以选择是否需要歌词同步。文件浏览器模块的功能主要是用户可以把存储在手机扩展卡和系统文件中的.MP3和.WAV格式的音频文件添加到播放列表中。确定模块之间的调用关系及其传递的信息当歌曲正在播放或程序界面置于基本控制模块之时,用户单击“清单”按钮,此时调用播放清单列表管理模块,播放器进入清单列表。当程序运行在播放菜单选项中,用户单击“播放”按钮,此时调用基本控制模块,播放器进入播放状态;用户单击“新增”按钮,此时调用文件浏览器模块,播放器进入手机扩展卡和系统文件中选择;用户单击“设定”按钮,此时调用设定模块,播放器进入设置界面。当程序运行在目录界面时,用户单击“Sdcard”选项,程序进入SDcard目录;用户单击“System”选项,程序进入System目录下。一旦Cursor已经指向了选中的歌曲,就可以调用play()方法来播放音乐了。在play()方法中创建MediaPlayer对象,为player 注册了OnCompletionListener、OnPreparedListener和OnErrorListener,以便在发生播放错误、歌曲播放结束等事件时回调监听器中的方法。当player处于prepared状态时,onPreparedListener会被调用,此时已经可以调用相关方法获得player的时长和当前媒体时间了数据结构及数据库设计数据结构的设计Android平台使用Content Provider管理所有的多媒体文件,其中音频数据结构定义在android.provider.MediaStore.Audio内,Audio包含了Media、Playlists、Artists、Albums和Genres等子类。Media类实现了 android.provider.BaseColumns、android.provider.MediaStore.Audio.AudioColumns和android.provider.MediaStore.MediaColumns接口,接口中定义的字段与数据库表的字段对应,例如,TITLE字段与歌曲的名称对应。数据库的设计Android的多媒体数据库采用SQLite数据库系统。Android系统提供了MediaScanner、MediaProvider、MediaStore等接口,并且提供了一套数据库表,通过Content Provider方式提供给用户。MediaStore中定义了一系列的数据表,用户可通过ContentResolver类(Column)查询接口,可以得到各种需要的信息。三程序源代码class X{ public: static new_handler set_new_handler(new_handler p); static void* operator new(size_t siz); private: static new_handler currentHandler;};new_handler X::currentHandler;//初始化为0new_handler X::set_new_handler(new_handler p){ new_handler oldHandler = currentHandler;//保留当前new_handler currentHandler = p;//再设置当前new_handler return oldHandler;}void *X::operator new(size_t size) //调用一次特定处理方法,用毕恢复{ newHandler globalHandler=std::set_new_handler(currentHandler);//配置新new_handler 保存globalHandler void *memory; try{ memory = ::oprator new(size); //试分配内存 } catch(std::bad_alloc){ std::set_new_handler(gl
文档评论(0)