• txt音乐播放器PC版免费下载(包含C程序源码与exe文件)


    前言:

    由于之前发的exe版是使用exe4j将jar包转换成的,运行时仍需要jdk环境(1.6/1.8,32/64位),感觉很不方便,因此准备开发一个windows可以直接使用的版本。

    经过一段时间的开发(踩坑),终于使用C语言(初步)完成了这个txt音乐播放器。

    本次仍会将下载链接发布在下方,与之前不同的是,本次会将C语言源码连同exe文件一起发布,欢迎有需要的朋友下载,欢迎大佬继续进行优化。

    免费下载链接:

    https://github.com/BlackHoleSeventh/

    积分下载链接(最开始是0积分免费,后来CSDN自己就把积分改了):

    https://download.csdn.net/download/BHSZZY/12435440

    技术要点(踩过的坑):

    在开发过程中遇到的坑总结如下:

    1.C-Free使用PlaySound找不到方法与连接库的问题

    本人用C-Free开发时,为了播放音乐,用到了PlaySound方法;按照网上的说明添加了相关语句:

    #include <mmsystem.h>
    pragma comment (lib , "winmm.lib")

    结果在使用 PlaySound(url, NULL, SND_FILENAME | SND_ASYNC | SND_NOWAIT); 方法时,报错:

    [Error] C: xtmusic m.c:174: undefined reference to `PlaySoundA@12'

    百度发现,需要手动添加链接库,但是都是VC、VS中的添加方法,好不容易找到C-Free的添加方法了,如下(构建-构建选项-连接):

    结果添加之后,还是报错:

    [Error] E:C-Free5mingwinld.exe: cannot find -lE:C-Free5mingwliblibwinmm.a

    继续百度,发现上方错误信息中多了一个"-l",是C-Free编译时自己给添加了个参数,就导致找不到这个链接库了;(cannot find -lE: ,E盘之前的-l,大佬没写明白,我还找了半天

    解决方法呢?大佬说在Linker(CUI)里面的 -l(Libs) 去掉-l后就能通过编译(好像是C-Free设置菜单附近);但是我愣是没找到(现在也没找到)

    那咋办?难道得手动输命令编译?

    还好又找到一个大佬的文章,说配置参数就行了:

    还是老地方,在下方参数写上"-lwinmm"就行了;不用加pragma comment (lib , "winmm.lib"),你加了C-Free也识别不了;也不用添加连接(没找到在哪里设置去掉-l)

    这个参数的意思是,由于我需要的是winmm.lib的连接库,但是在C-Free中用的是libwinmm.a,其实基本是一个东西,只是C-Free中用lib+winmm+.a这个文件,发现这两个文件的中间命名相同就行了(都是winmm);然后编译时,增加参数“-lwinmm”,就可以把这个文件编译到程序中了(个人感觉相当于jar包),其中"-l"指lib,"winmm"指连接库。如果需要其它连接库也按照格式添加参数即可。

    2.PlaySound播放多个音乐的问题

    终于能使用PlaySound方法播放音乐了,然而又遇到一个问题,PlaySound只能一次播放一个音乐,如果再次调用该方法播放其它音乐,上一个音乐就会被中断。

    联系到本人的txt音乐播放器,如果播放每个音符间隔时间长的音乐的话,还凑付能听;如果播放时间间隔短的、节奏快的音乐,听起来就磕磕绊绊的,很不连贯 。

    通过各种百度,发现并没有参数能解决这个问题,异步参数SND_ASYNC也不行(本来就得加,不加还会完整播完一个音符再播下一个音符,更难受)。(还有人说加SND_NOWAIT,加了和没加一样,感觉就没有这个参数)

    在此先吐槽一句,这也太菜了!本人写java版的就没遇到这个问题!

    好吧,看看有没有其它方法。

    有人说可以开多线程、多进程、多对象来让PlaySound同时播放多个音乐,但是研究了半天,感觉不太行,不符合要求(好吧,也许是没看懂);而且多对象,如果可以的话我也想啊,但是C语言怎么给PlaySound创建对象?还是多个?也许C++可以?

    有人说可以先将多个wav混音成一个,然后用PlaySound方法播放;在此感觉大佬666,然而本人并不会代码混音,还得确定混音开始时间结束时间、插入空白间隔;根据txt简谱的不同,每次执行都要现场混音,总觉得耗时也是个问题,而且不方便;

    还有人说可以用MciSendString()方法播放音乐,再次研究了半天,测试了几波,发现还是不行,听起来就像跳音播放一样,总会漏几个音没有播(总是有节奏快的音乐的,跳着播可还行)

    继续百度,难道C语言就这两个播放音乐的方法吗?

    嗯……还真没找见其余方法,这个问题目前还没有解决。

    PS:在某些情况下,运行本软件播放节奏快的音乐时,还能凑付听;在某些情况下就基本不能听了,有些乱。代码和参数都没动,很奇怪。

    3.总结

    还是之前用exe4j将jar包转成的txt音乐播放器.exe感觉好用一点,音乐播放也连贯;这个C语言开发的txt音乐播放器还有很多需要完善的地方,关键的是播放快节奏音乐时音符切换导致的停顿很明显,不连贯。还请大家帮忙提提建议与修改方法,在此提前谢过大家了!

    资源免费,代码免费;原创代码,欢迎分享,但是分享后请勿收费,谢谢!

  • 相关阅读:
    yum命令速查
    5分钟理解编译系统
    Nginx(一)安装及启停
    Linux时间命令
    常用七种排序的python实现
    python迭代器、生成器、装饰器
    LeetCode【第217题】Contains Duplicate
    LeetCode【第1题】Two Sum
    python【第二十篇】Django表的多对多、Ajax
    不要问我DO在哪里?
  • 原文地址:https://www.cnblogs.com/codeToSuccess/p/13906204.html
Copyright © 2020-2023  润新知