python 3.7 使用MP3play 模块
2024-09-01 15:48:39
因工作需要,做了一个QQ机器人语音播报程序。主要思路 是通过 酷Q 获取QQ消息取出有效信息。
根据信息在百度AI上合成语音,然后本地播放。
在播放语音的时候用了好几个模块 pygame 、pymedia 、系统os 等,试听效果都不怎么理想,最后发现MP3play 蛮好(开始用的python2.7)
移植到新环境的时候mp3play 报错了。无法播放,根据提示查看源码,修改了两处地方,可正常运行。
mp3play 根目录下 有两个文件 __init__.py 和 windows.py 根目录可以通过 pip install mp3play 查看(没安装的会安装,安装了会显示安装路径)
修改windows.py 两处代码
class _mci:
def __init__(self):
self.w32mci = windll.winmm.mciSendStringA
self.w32mcierror = windll.winmm.mciGetErrorStringA def send(self, command):
buffer = c_buffer(255)
command=command.encode(encoding="utf-8") #添加的将str 转bytes errorcode = self.w32mci(command, buffer, 254, 0) # 默认的str(command) 不要str
if errorcode: return errorcode, self.get_error(errorcode)
else:
return errorcode, buffer.value def get_error(self, error):
error = int(error)
buffer = c_buffer(255)
self.w32mcierror(error, buffer, 254)
return buffer.value def directsend(self, txt):
(err, buf) = self.send(txt)
if err != 0:
print ('Error %s for "%s": %s' % (str(err), txt, buf)) # print 添加一个()
return (err, buf)
改了两处测试可以使用。然后看了下MP3play 发现他主要是调用了系统 windll.winmm.mciSendStringA 函数
from ctypes import windll, c_buffer
核心调用 windll.winmm.mciSendStringA(b"play aa.mp3", 0, 0, 0)
最新文章
- react+redux教程(五)异步、单一state树结构、componentWillReceiveProps
- IOS开发基础知识--碎片21
- ECSHOP Inject PHPCode Into \library\myship.php Via \admin\template.php &;&; \includes\cls_template.php Vul Tag_PHP_Code Execute Getshell
- 【OpenStack】OpenStack系列4之Glance详解
- 各种数据库连接代码(java)
- leetcode 153. Find Minimum in Rotated Sorted Array --------- java
- 试验Windows Embedded Standard 7 Service Pack 1 Evaluation Edition
- power desinger 学习笔记三<;批量执行sql语句>;
- PHPCMS v9修改栏目或者单页没有权限
- HTML 页面载入 Flash 插件的几种方法
- 阿里云手动安装特定版本的nginx
- Redis的集群配置
- easyUI行删除
- 顺序表的原理与python中的list类型
- LeetCode(76): 最小覆盖子串
- CSS3实战开发: 折角效果实战开发
- mfc CAnimateCtrl
- CUPS/Printer sharing
- 阿里技术嘉年华-aDev内容感悟
- 1、JDK自带注解
热门文章
- U盘便携式hexo&;博客搭建&;极速纯净低bug主题推荐&;部署到coding&;SEO优化搜索
- Scrapy框架的下载与安装
- Linux OOM-killer(内存不足时kill高内存进程的策略)
- Maven工程读取properties文件过程
- React Hooks 你不来了解下?
- SqlServer 2014还原数据库时提示:无法在已有的";";上还原文件,请重新发出RESTORE语句,用WITH REPLACE来覆盖原先存在的文件
- Hibernate 框架简单解说
- 从零开始入门 K8s| 详解 Pod 及容器设计模式
- ACM卡常数(各种玄学优化)
- Java连载32-对象、类及其关系与定义