golang 声音播放的初探

2019-01-20 21:46:32 +08:00
 jicg

起因

公司需要实现一个定期抓取分销系统数据并以声音播放的方式通知的 pc 端程序,本人对 golang 非常感兴趣,于是打算用 golang 来实现。


探索

1. 方案一 B 站视频

1.1 方案说明:

使用otominmp3 这个库来实现播放声音的功能。

1.2 方案的不足

当启动任务,每秒去播放声音的时候,时间一长就提示错误。于是,对声音播放不懂的我,到 github 提交了问题,目前没有解决方法。本人只好继续寻找其他的库,百度、谷歌啥的,发现了 portaudio 这个库(本人是菜鸟,对操作系统底层的 api 不懂,也不理解混音啥的算法,只能寻找其他的可代替的库)

2. 方案二 B 站视频

2.1 方案说明:

使用portaudiominmp3 这个库来实现播放声音的功能。

2.2 方案的不足

portaudio 经过测试不会出现 oto 库的问题,可以使用。但是,如果播放一段文件大小为 7M 左右的 mp3 文件,发现内存有一百多 M。虽说,消息通知的语音都是 5k 左右的短语音,但是作为有强迫症的我,还是不满意。内存大的原因是 minmp3 这个库,解析 mp3 后,文件是放在内存里面的。而我发现 portaudio 这个库的示例代码里面有一个go-mpg123解析声音的库。

3. 方案三 B 站视频

3.1 方案说明:

使用portaudiogo-mpg123 这个库来实现播放声音的功能。

3.2 方案不足

使用的 portaudio 和 mpg123 已经完美的解决了公司的需求。但是 这两个库都是使用 cgo,所以在 wins 环境上开发需要搭建好开发环境。


结束语

1、golang 语言非常简单高效。 2、如有不对的地方,欢迎大神指正。 3、如果您想支持作者,可以到B 站上,给作者点个赞,关注作者。 4、简书原文地址:点我

4267 次点击
所在节点    Go 编程语言
16 条回复
ps1aniuge
2019-01-20 23:34:00 +08:00
楼主想让电脑播放 “ txt 字符串”中的中文声音么?
powershell 姥姥 语音
https://www.cnblogs.com/piapia/p/8406170.html
jicg
2019-01-20 23:38:45 +08:00
@ps1aniuge 不是,是用 go 实现播放音乐
jsyzdej
2019-01-20 23:58:30 +08:00
语音合成吗?
jicg
2019-01-21 07:53:45 +08:00
@jsyzdej 不是,就是简单播放音乐声音
southwolf
2019-01-21 09:53:50 +08:00
直接调用 ffmpeg 不行?
jicg
2019-01-21 10:19:51 +08:00
@southwolf 这个好像是 c 不是 go
southwolf
2019-01-21 10:32:42 +08:00
@jicg 搜一个 golang ffmpeg wrapper 就有了啊
ysc3839
2019-01-21 13:00:41 +08:00
通知的话使用系统提供的通知 API 会比较好。如果是 Win8 或 Win10 的话,可以使用 Git for Windows 提供的一个显示通知的命令行工具 wintoast.exe 。
jicg
2019-01-21 14:10:56 +08:00
@southwolf 这个框架也不错
jicg
2019-01-21 14:18:17 +08:00
ntop
2019-01-21 14:22:09 +08:00
我早前用 go 写过游戏引擎也做了一个纯 go 的音频引擎 - sine,支持大文件的流播放,小文件直接加载到内存播放,只有 windows 不支持。之前也调研过相关的音频库,Go 的实现基本上都是玩具,oto 也是玩具,目前看来最好的方案是依然采用程序的 C/C++ 音频库做 Cgo 封装,Soloud 的作者曾给我推荐过他的实现,封装起来应该还是蛮简单的,http://sol.gfxile.net/soloud/
jicg
2019-01-21 14:25:03 +08:00
@ntop
ysc3839
2019-01-21 14:51:31 +08:00
@jicg 应该不是,这只是 C++ 库,Git for Windows 有能直接用的命令行工具。
jicg
2019-01-21 15:10:48 +08:00
@ysc3839 哦哦,好的
lozzow
2019-01-24 00:10:44 +08:00
刚好有这个需求,多谢🙏
jicg
2019-01-24 09:41:27 +08:00
@lozzow oto 这个库,作者更新了,应该支持混音了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/528902

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX