首页 CF黑号 正文

镇魂曲好听吗?这几首经典曲目值得你单曲循环

CF黑号 15
广告一

今天跟大家伙儿唠唠我这几天搞的活儿,暂且就叫它《镇魂曲》,听着唬人,就是个小玩意儿,但折腾起来真要命。

事情是这样的,前几天,老板突然丢给我一个任务,说要搞一个类似音乐播放器的东西,能播一些特定的音频,主要用在他们一个内部的展示会上,烘托气氛用的。需求很简单,但是时间紧,只有三四天的时间,我当时就想,这不赶鸭子上架吗!

得,接都接,硬着头皮上。

镇魂曲好听吗?这几首经典曲目值得你单曲循环

我得把架子搭起来。我寻思着,既然是内部用,界面啥的就不用太讲究,怎么简单怎么来。直接用Python的Tkinter搞个简陋的窗口,上面放几个按钮,分别是“播放”、“停止”、“下一首”。按钮的事件绑定我也没含糊,该有的都有。

窗口是有,接下来就是搞定音频播放。这块我之前没怎么接触过,现学现卖。我查查资料,发现Python里有个叫`playsound`的库,用起来挺方便的。直接`pip install playsound`装上,然后写几行代码,就能播放音频。我试一下,效果还不错,声音挺清晰的。

但是问题来,老板要的是播放列表,不是单曲循环。我得把所有的音频文件都放进一个列表里,然后点击“下一首”的时候,就播放列表里的下一个音频。这块稍微麻烦一点,我得先用`os`库把文件夹里的所有音频文件都读取出来,放到一个列表里。然后,我得维护一个全局变量,记录当前播放的音频的索引。点击“下一首”的时候,索引加一,如果到列表的末尾,就回到列表的开头。

代码如下:
  • 先导入需要的库
  • 镇魂曲好听吗?这几首经典曲目值得你单曲循环

  • 用`*()`读取文件夹里的所有文件
  • 过滤出音频文件(比如`.mp3`、`.wav`)
  • 放到一个列表里

这中间我还遇到一个坑,就是`playsound`库在播放音频的时候是阻塞的,也就是说,它会一直等到音频播放完毕才会返回。这样的话,界面就会卡死,没法响应用户的操作。我得想办法让它在后台播放。我用Python的`threading`库,把播放音频的代码放到一个单独的线程里运行,这样就不会阻塞主线程。

解决播放的问题,接下来就是“停止”按钮。这个比较简单,`playsound`库提供`*('*3', block=False)`,设置`block=False`就可以异步播放,但是我找不到停止播放的方法! 后来我发现,`playsound`这玩意儿好像没法真正停止播放,只能暴力地结束进程。这肯定不行,太low。我又查查资料,发现`pygame`库可以实现暂停和停止。行,那就换`pygame`。

镇魂曲好听吗?这几首经典曲目值得你单曲循环

换`pygame`之后,代码得重写一遍。不过还`pygame`的文档比较详细,我很快就搞定播放、暂停、停止的功能。但是`pygame`也有个问题,就是它对音频格式比较挑剔,有些音频文件它不支持。我得用`pydub`库把音频文件转换成`pygame`支持的格式。

代码如下:
  • 初始化`pygame`
  • 加载音频文件
  • 播放音频
  • 镇魂曲好听吗?这几首经典曲目值得你单曲循环

  • 暂停音频
  • 停止音频

经过一番折腾,总算是把基本功能搞定。但是,我发现还有一个问题,就是音频播放的时候,界面上没有任何提示,用户不知道当前播放的是哪首歌曲。我得在界面上显示当前播放的歌曲的名字。这个比较简单,我在窗口上加一个Label,每次播放新的歌曲的时候,就更新Label的文本。

一步,美化界面

虽然老板说界面不用太讲究,但是也不能太寒碜。我稍微美化一下界面,改一下按钮的颜色,加一个背景图片,让它看起来稍微好看一点。我还加一个音量控制条,用户可以调节音量的大小。

镇魂曲好听吗?这几首经典曲目值得你单曲循环

这回的《镇魂曲》项目虽然时间紧,任务重,但是也让我学到很多东西。我学会使用`playsound`和`pygame`库来播放音频,学会使用`threading`库来创建线程,学会使用`pydub`库来转换音频格式。最重要的是,我学会在压力下保持冷静,一步一个脚印地解决问题。虽然过程很痛苦,但是结果还是令人满意的。希望这回的经验能对大家有所帮助。

版权声明 本文地址:https://www.sdsyysh.com/cfpaiweihao-13646.html
由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请在一个月内通知我们,请将本侵权页面网址发送邮件到qingge@88.com,我们会做删除处理。
扫码二维码