公司需要实现一个定期抓取分销系统数据并以声音播放的方式通知的 pc 端程序,本人对 golang 非常感兴趣,于是打算用 golang 来实现。
当启动任务,每秒去播放声音的时候,时间一长就提示错误。于是,对声音播放不懂的我,到 github 提交了问题,目前没有解决方法。本人只好继续寻找其他的库,百度、谷歌啥的,发现了 portaudio 这个库(本人是菜鸟,对操作系统底层的 api 不懂,也不理解混音啥的算法,只能寻找其他的可代替的库)
使用portaudio和minmp3 这个库来实现播放声音的功能。
portaudio 经过测试不会出现 oto 库的问题,可以使用。但是,如果播放一段文件大小为 7M 左右的 mp3 文件,发现内存有一百多 M。虽说,消息通知的语音都是 5k 左右的短语音,但是作为有强迫症的我,还是不满意。内存大的原因是 minmp3 这个库,解析 mp3 后,文件是放在内存里面的。而我发现 portaudio 这个库的示例代码里面有一个go-mpg123解析声音的库。
使用portaudio和go-mpg123 这个库来实现播放声音的功能。
使用的 portaudio 和 mpg123 已经完美的解决了公司的需求。但是 这两个库都是使用 cgo,所以在 wins 环境上开发需要搭建好开发环境。
1、golang 语言非常简单高效。 2、如有不对的地方,欢迎大神指正。 3、如果您想支持作者,可以到B 站上,给作者点个赞,关注作者。 4、简书原文地址:点我
1
ps1aniuge 2019-01-20 23:34:00 +08:00
|
3
jsyzdej 2019-01-20 23:58:30 +08:00 via Android
语音合成吗?
|
5
southwolf 2019-01-21 09:53:50 +08:00
直接调用 ffmpeg 不行?
|
8
ysc3839 2019-01-21 13:00:41 +08:00 via Android
通知的话使用系统提供的通知 API 会比较好。如果是 Win8 或 Win10 的话,可以使用 Git for Windows 提供的一个显示通知的命令行工具 wintoast.exe 。
|
10
jicg OP |
11
ntop 2019-01-21 14:22:09 +08:00
我早前用 go 写过游戏引擎也做了一个纯 go 的音频引擎 - sine,支持大文件的流播放,小文件直接加载到内存播放,只有 windows 不支持。之前也调研过相关的音频库,Go 的实现基本上都是玩具,oto 也是玩具,目前看来最好的方案是依然采用程序的 C/C++ 音频库做 Cgo 封装,Soloud 的作者曾给我推荐过他的实现,封装起来应该还是蛮简单的,http://sol.gfxile.net/soloud/ 。
|
15
lozzow 2019-01-24 00:10:44 +08:00 via iPhone
刚好有这个需求,多谢🙏
|