Golang Go语言中声音播放的初探

发布于 1周前 作者 yuanlaile 来自 Go语言

Golang Go语言中声音播放的初探

起因

公司需要实现一个定期抓取分销系统数据并以声音播放的方式通知的 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、简书原文地址:点我


更多关于Golang Go语言中声音播放的初探的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

17 回复

楼主想让电脑播放 “ txt 字符串”中的中文声音么?
powershell 姥姥 语音
https://www.cnblogs.com/piapia/p/8406170.html

更多关于Golang Go语言中声音播放的初探的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


不是,是用 go 实现播放音乐

语音合成吗?

不是,就是简单播放音乐声音

直接调用 ffmpeg 不行?

这个好像是 c 不是 go

搜一个 golang ffmpeg wrapper 就有了啊

通知的话使用系统提供的通知 API 会比较好。如果是 Win8 或 Win10 的话,可以使用 Git for Windows 提供的一个显示通知的命令行工具 wintoast.exe 。

这个框架也不错

我早前用 go 写过游戏引擎也做了一个纯 go 的音频引擎 - sine,支持大文件的流播放,小文件直接加载到内存播放,只有 windows 不支持。之前也调研过相关的音频库,Go 的实现基本上都是玩具,oto 也是玩具,目前看来最好的方案是依然采用程序的 C/C++ 音频库做 Cgo 封装,Soloud 的作者曾给我推荐过他的实现,封装起来应该还是蛮简单的,http://sol.gfxile.net/soloud/

应该不是,这只是 C++ 库,Git for Windows 有能直接用的命令行工具。

刚好有这个需求,多谢🙏

oto 这个库,作者更新了,应该支持混音了

在Golang中进行声音播放的初探是一个既有趣又实用的课题。Go语言本身并不直接提供音频处理或播放的库,但你可以借助一些第三方库来实现这一功能。

一个常用的库是portaudio,它是一个跨平台的音频库,支持多种音频格式和设备的输入输出。Go语言中有一个portaudio的绑定库github.com/go-portaudio/portaudio,你可以通过这个库来进行音频播放。

使用portaudio进行声音播放的基本步骤包括:

  1. 初始化:在使用portaudio之前,你需要先初始化库。
  2. 打开音频流:配置音频流的参数,如采样率、通道数等,并打开音频流。
  3. 写入音频数据:将音频数据写入到打开的音频流中。
  4. 关闭音频流:播放完成后,关闭音频流并清理资源。

此外,还有一些其他的库可以用于Go语言中的音频处理,如github.com/go-audio/audio,它提供了更多的音频处理功能,包括音频的读取、写入、编码、解码等。

需要注意的是,音频处理是一个相对复杂的领域,涉及到音频格式、采样率、比特率等多个方面。因此,在进行声音播放的初探时,建议先从简单的例子开始,逐步了解音频处理的基本原理和常用方法。

总的来说,虽然Go语言本身没有直接的音频处理库,但借助第三方库,你仍然可以在Go语言中进行声音播放和音频处理。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!