一个在线音乐软件的故事(一、故事的由来)
来源:互联网 发布:yymodel 数组转模型 编辑:程序博客网 时间:2024/05/01 22:25
这篇文章是讲一款在线音乐播放软件的开发过程,是我写完这个软件后的一些总结,我把它写成了一则小故事,故事把开发过程中的重点部分写了出来,有些细节的内容还是需要看源码。希望这则故事对已经有一些编程基础,想继续深入学习Python的童鞋起到抛砖引玉的作用。
很久很久以前,故事的由来
我算是Fedora的忠实用户,平时都是在Fedora上做所有的事情,也完全没有不方便的感觉。听音乐、写代码、网购都不错,也没有广告、恶意软件、病毒、木马什么的打扰,乐得自在!遗憾的是在Fedora25之前系统是不带MP3解码器的,无法直接播放MP3音乐文件,不过对Linux用户来说这都不是事儿,Linux平台上有非常优(免)秀(费)的播放器,比如:VLC、Banshee等。
真正麻烦的是音乐源的问题,首先要下载喜欢的音乐到本地,然后添加到这些播放器才能欣赏美妙的音乐!对于我这样比较懒惰的、对音乐又比较随意,可能想到哪首就听哪首的人来说,不断的下载删除又再下载,是非常麻烦的事情!所以还是用回我的浏览器,在线听!不用下载,歌也多,就这样用了很长时间。
在浏览器里面听音乐也有个小麻烦,就是难免会在关网页的同时失手连音乐一起关了,于是乎百度Linux平台上的在线音乐软件,各种搜索、比较之后发现网易在线云音乐不错,界面也很喜欢,至于音乐内容么各大巨头都差不多,该有的都有。于是动手下载安装,需要的插件看看都是Python的,一路正常安装,官方要求的各种组件库也统统安装完毕。满心欢喜启动!矮油,报错!一通折腾也没能启动,只能怪我学艺不精。
回头再想其他方案,发觉竟然没有多少办法,依然只有这样几种途径:1、老办法,下载到本地,用播放器播放;2、安装虚拟机,通过虚拟机安装Windows或者Android,然后再安装与系统对应的QQ音乐或其他在线音乐软件。无论是那种方法,虽然对Linux用户来说都没什么困难,但是都非常麻烦,谁愿意为了听个音乐安装这么多软件呢?而且通过前面的搜索已经排除了其他在线音乐软件,发现Linux用户居然没有方便好用的音乐软件,这也许就是Linux推广比较困难的主要原因,应用软件太少!本着自己动手丰衣足食的精神,就自己动手吧!我要讲的就是这个软件从无到有的故事。
这究竟是个什么软件?
实际上我对这个软件的要求不多,但比较具体,和大多数商业音乐软件相比要简单很多。功能方面要能满足音乐搜索、自动缓存、批量下载、有一张临时的播放列表。
软件的布局要和时下流行的在线音乐软件接近,符合平时的操作习惯。画面须精致,按钮风格统一,在1920x1080分辨率及以上的显示器中显示的时候所有的按钮、图片不能边缘虚化,我是外贸协会核心成员。按钮上的滑过状态、按下状态等特效也都需要实现。
音源质量在100kbps左右,最好不低于100kbps,采样率44100Hz,编码解码方式支持MP3、MPEG-4(mp4a)、WAV等。双声道,满足耳机和一般有源音响就行。
因为是在线播放,缓存时间自然是越短越好,等待时间在3-5秒都可以接受,但不能超过5秒。音频数据必须在本地缓存,并有专门的画面保存和显示缓存的音乐,下次播放同一首歌时直接从缓存中加载,尽可能缩短加载的时间,同时也能满足在没有网络的环境下播放。
下载的功能自然不能遗漏,对于喜欢的音乐还是会复制到其他设备中播放。下载时按照“歌曲名称-演唱者名称”作为文件名保存,扩展名按音源格式保留,便于在资源管理器中查找音乐。
我还需要一张临时的播放列表,搜索到的喜欢的歌曲都能加入这张临时播放列表,能满足我随意搜索的习惯,这张播放列表不需要保存,下次打开是空白的就行。另外一个比较个人化的功能是在任意一张表格上双击播放某个音乐之后,整体播放列表就转换到这个表格,点击下一首按钮时,就在这个表格中切换。
剩下的都和大多数的软件一样,单曲循环、顺序播放、随机播放等等。先上一张图,第一版就先这样,能够满足基本使用需求。
下次再讲故事的内容。
- 一个在线音乐软件的故事(一、故事的由来)
- 一个在线音乐软件的故事(二、其实故事从这里才开始)
- 一个在线音乐软件的故事(三、音乐从哪里来?)
- 一个在线音乐软件的故事(四、现在就可以开始编码了吗?)
- 一个在线音乐软件的故事(五、让我们开始写代码吧)
- 一个同学的c++的故事(推测c++的由来)(一)
- 经济故事--印花税的由来
- 给大家讲一个男女由来的故事
- 管道的故事(一)
- 珠峰的故事(一)
- “谁动了我的奶酪”的故事(一)
- 管道的故事(一)管道的故事
- 一个不真实的故事.
- 一个有趣的故事
- 一个硬盘的故事
- 一个种族歧视的故事
- 一个适者生存的故事
- 听到的一个故事~
- Java线程面试题 Top 50
- 笔试笔记(八)
- 使用Django建站
- No qualifying bean of type [com.jj.mapper.UserMapper] found for dependency
- Coursera机器学习完结
- 一个在线音乐软件的故事(一、故事的由来)
- 【CUGBACM15级BC第26场 A】hdu 5158 Have meal
- CF808B
- 1002.数字分类
- STL中容器操作的迭代器失效-erase()函数陷阱
- 输入设备框架1—应用层—完整的代码工程
- CodeForces 830C 浅谈奇妙题
- 【CUGBACM15级BC第26场 B】hdu 5159 Card
- NOI2017酱油记(伪)