为了账号安全,请及时绑定邮箱和手机立即绑定

Go中的信号处理

Go中的信号处理

Go
白猪掌柜的 2021-03-31 13:14:27
我提出了一个音频项目的想法,看起来Go是实现它的有用语言。但是,它要求能够对传入的音频应用过滤器,并且Go似乎没有任何类型的音频处理包。我可以使用cgo调用C代码,但是我发现的每个信号处理库都使用cgo无法处理的C ++类。看起来libsox可能有效。还有其他吗?libsox可以提供的和我需要的是将传入的音频流分成几个频段。如果我只能读一次文件就可以这样做,那么加分!我不确定libsox是否可以做到这一点。
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

如果要使用C ++库,则可以尝试SWIG,但必须将其从Subversion中删除。下一个版本(2.0.1)将是第一个支持Go的版本。以我的经验,Go的支持仍然有些粗糙,但是我尝试包装的库又是一个庞然大物。

或者,您仍然可以使用SWIG所使用的相同方法通过cgo创建自己的绑定,但这将是痛苦而又乏味的。基本思想是,您首先创建一个C包装器,然后让cgo在您的C包装器周围创建一个Go包装器。

不过,我对信号处理或libsox一无所知。对不起。


查看完整回答
反对 回复 2021-04-26
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

有一个名为ZikiChombo的相对较新的项目,到目前为止 ,该项目包含一些针对音频的基本DSP功能,请参见此处

该项目的dsp部分在其路线图上有过滤器,但尚不存在。另一方面,这里有一些用于实现过滤器的基础结构,例如实际的fft和块卷积。这意味着,如果需要FIR,并且可以通过其他某种方式计算系数,则可以通过当前在zc中与声音实时卷积来运行它们。

基本的滤波设计支持(FIR,Biquad),例如将理想滤波器用作起点,将是zc的下一步。有许多小型的自包含开放源代码项目,用于基本的和更高级的FIR和IIR滤波器设计,最著名的是爱荷华州Hills,它比大型项目在Go之外计算滤波器系数的访问性更高。

更高级的滤波(例如Butterworth)以及基于多项式求解和双线性变换的滤波将花费更多时间用于zc。

还有一些软件定义的Golang广播项目,其中包含与过滤有关的一些代码,抱歉,没有可用的链接,但是对主题的搜索可能会将您引向他们。

最后,还有一个gonum Fourier软件包,该软件包也提供了fft。

因此,Go在此领域中正在增长一些有趣且潜在的东西,但是与较旧的项目(这些项目大多是C / C ++,或者例如通过numpy的Python包装器)相比,还有很多路要走。


查看完整回答
反对 回复 2021-04-26
  • 3 回答
  • 0 关注
  • 212 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信