TXT音乐播放器与DirectSound与C++,开发笔记与EXE免费下载(二)

一、简介

经过一段时间的开发完善,终于又可以发布新版的TXT音乐播放器了。

这个程序是做什么的?可以查看本人之前的博客。

 

本次更新如下:

1.修复了当第一个字符为数字(非低音、高音、半音的情况)时,程序播放音乐会有延迟的问题

2.完成了暂停与继续播放的功能

3.完善了单曲循环功能

 

二、免费下载链接

免费链接(0积分):https://download.csdn.net/download/BHSZZY/12458073

 

三、如何获取源码

由于本人用VS2017的MFC开发,导致源码有80.4M大小,传到CSDN上有大小限制就很难受。因此本人决定挂到git上,随后会更新链接地址。如有需要也可以联系作者获取源码,相互学习。

github:https://github.com/BlackHoleSeventh/txtmusic/tree/master

 

四、开发笔记(遇到的坑)

不愧是C++,本次又遇到一些莫名其妙的坑 (本人开发安卓版和Java版也没见这么多坑),现在总结如下:

1.char指针指向的内容产生异常

就是这两句代码:

 

List.clear();

f = fopen(url, "r");


其中,List是C++中的vector,我起的别名:

#include<vector>
typedef struct info_s
{
    char c;
}info_t;
typedef vector<info_t> list_t;
static list_t  List;
 

fopen是打开文件,返回File *f;url是char url[],用来存文件地址,从前台txt文本框获取。

 

然后执行就出问题了,点击播放按钮,第一次正常(能播放音乐),第二次异常(没反应),第三次又正常,第四次又异常...

 

开始我以为是线程的问题,找了半天没找到原因;耗了半天时间,偶然发现,是url的问题:

第一次,url="D:\\txtMusic\\mymusic.txt",正常;

第二次,url="烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫"......

第三次,url="D:\\txtMusic\\mymusic.txt",正常;

第四次,url="无法显示内容"

......

这是什么鬼?百度发现,C++没有处理好字符串就会发生这个问题,可是我前台传入的字符串能确定没问题,而且一次正常一次异常,这么神奇的吗?

 

想了半天不知道怎么解决,后来,又是偶然发现,我只要这么写:

 

f = fopen(url, "r");

List.clear();

 

然后程序就每次都正常了。其实,虽然程序正常了,但是当执行完List.clear()方法后,url中的字符串仍然会出问题;只不过我先用正确的字符串打开了文件,之后url再出问题就无所谓了。

 

不过这个方法只是绕过了问题,并没有解决问题。

可是怎么解决呢?vector和url是两个毫不相关的变量吧?为啥vector的clear()方法会影响url(char数组)呢?

总之很神奇,它们两唯一的共同点就是都是存的char字符了,本人推测,可能是C++在内存中保存char数组的位置是挨着的,执行clear方法时,影响到内存中保存的url内容了。

不过,一次正确一次错误,还是很神奇;真正原因还是不清楚,求大佬解答。

这么看来,java还是省事的,不用管内存相关处理。

 

2.其实,txt音乐播放器中有个"自动播放下一首"的功能,我还没有实现;由于对C++不太熟,因此还是留待下次实现吧。

3.似乎txt音乐播放器连续播放几个小时后就会卡住,需要关了重开;可能是内存附近有些问题吧,毕竟本人对C++不熟,并没有使用内存申请与释放的方法(其实是不会用)。不过扒谱也不用测试这么长时间吧,应该。

五、总结

如果有大佬知道上面的问题,还请赐教;

大家可以从git上下载到此代码,使用VS2017的MFC开发的,环境配置在上一篇博客中详细介绍了,大家可以继续优化代码,互相交流学习,谢谢!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章