Audio 围棋中的信号处理

Audio 围棋中的信号处理,audio,swig,go,signal-processing,Audio,Swig,Go,Signal Processing,我提出了一个音频项目的想法,看起来Go是实现它的有用语言。然而,它需要对传入音频应用过滤器的能力,而Go似乎没有任何类型的音频处理包。我可以使用CGO调用C代码,但是我发现的每个信号处理库都使用CGO无法处理的C++类。看来libsox可能会起作用。还有其他的吗 libsox所能提供的和我所需要的是获取传入的音频流并将其划分为频带。如果我可以在只读取一次文件的情况下执行此操作,那么奖励!我不确定LIbSOX是否能做到这一点。 < P>如果你想使用C++库,你可以试试SWIG,但是你必须把它从颠覆

我提出了一个音频项目的想法,看起来Go是实现它的有用语言。然而,它需要对传入音频应用过滤器的能力,而Go似乎没有任何类型的音频处理包。我可以使用CGO调用C代码,但是我发现的每个信号处理库都使用CGO无法处理的C++类。看来libsox可能会起作用。还有其他的吗


libsox所能提供的和我所需要的是获取传入的音频流并将其划分为频带。如果我可以在只读取一次文件的情况下执行此操作,那么奖励!我不确定LIbSOX是否能做到这一点。

< P>如果你想使用C++库,你可以试试SWIG,但是你必须把它从颠覆中取出。下一个版本(2.0.1)将是支持Go的第一个发布版本。根据我的经验,Go支持仍然有点粗糙,但我试图包装的库又是一个怪物

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


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

有一个相对较新的项目叫做 其中包含一些面向音频的基本DSP功能,请参阅

项目的dsp部分在其路线图上有过滤器,但还没有。另一方面,还有一些实现滤波器的基础设施,如实fft和块卷积。这意味着,如果您想要FIR,并且可以通过其他方法计算系数,您可以通过zc中的卷积实时运行它们

基本滤波设计支持(FIR、双四阶),例如,使用理想滤波器作为起点将是zc的下一步。有许多小型独立的开源项目用于基本和更高级的FIR和IIR滤波器设计,最值得注意的是,这些项目可能比大型项目更容易在Go之外计算滤波器系数

更高级的滤波,如巴特沃斯滤波,以及基于多项式求解和双线性变换的滤波器,将需要更多的时间来实现零电流

还有一些软件定义的Golang电台项目,其中包含一些与过滤相关的代码,抱歉,暂时没有这些链接,但是搜索主题可能会找到它们

最后,还有一个gonum,它也提供fft


因此,Go在这个领域正在发展一些有趣的、潜在的东西,但与旧的项目(主要是C/C++,或者可能是通过numpy使用Python包装器)相比,还有很多路要走。

我使用这个纯golang repo来执行傅立叶变换,效果很好

只需为FFT调用提供一个

import (
    "github.com/mjibson/go-dsp/fft" //  https://github.com/mjibson/go-dsp
)

var audio_wave []float64
// ... now populate audio_wave with your audio PCM samples

var complex_fft []complex128

// input time domain ... output frequency domain of equally spaced freq bins 
complex_fft = fft.FFTReal(audio_wave) 

谢谢出于某种原因,我得到的印象是,从C调用go根本不可行,但目前在go nuts列表中有一条关于这个主题的线索。注意:FFTW有go绑定,所以这是一件很重要的事情。老实说,如果你有权访问Reaktor 5,6,它经常出现在音乐部门的PC上,然后你可以花3-5个小时在reaktor充实你的项目。过滤器需要点击一次才能进入系统,并通过字符串将其连接起来。然而,reaktor只擅长于纯wave项目,它不能很好地处理midi和高质量的图形输出。它只有示波器和2d彩色图表。如果您的项目很简单,也可以查看synthmaker。synthmaker也适用于机器人技术。还要检查合成器API。