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开发的,环境配置在上一篇博客中详细介绍了,大家可以继续优化代码,互相交流学习,谢谢!
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析
· 上周热点回顾(3.24-3.30)