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開發的,環境配置在上一篇博客中詳細介紹了,大家可以繼續優化代碼,互相交流學習,謝謝!

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