我想通过更改Mac OS X上的采样率来更改语音记录的频率。
这是一个针对口吃患者的研究项目。重要的是延迟非常低-例如,这就是为什么我不考虑快速傅立叶变换的原因。相反,我想以44 two的速率采集样本,然后做以下两件事之一:
1)以两倍的速度播放样本(即22 the )。这将导致与源的异步性增加。如果我可以每隔1秒左右重新开始采样,以防止异步变得过于明显,这将是非常有用的。
2)以两倍的速度播放样本。显然,不可能持续这样做(即不能回放尚未收集的样本)。为了解决这个问题,我打算用一个方波来控制回放。回放样本的速度将是方波峰值期间记录的样本的两倍。在方波的低谷期间,什么也听不到(但仍将收集样本)。
我已经准备了一个PDF,在这里更详细地描述了这个项目:
https://www.dropbox.com/s/8u3tz7d9hhxd3t9/Frequency%20shift%20techniques.pdf?dl=0
我的一个朋友用PortAudio帮我做了一些编程。不幸的是,我们得到了很长的延迟。我认为这可能是因为PortAudio的工作水平太高了。从代码上看,在我看来,PortAudio似乎是在缓冲传入的音频流,然后进行表面上类似于我上面描述的更改,但实际上是对缓冲流的操作。
这根本不是我想要的。重要的是,处理单元所做的事情尽可能少。参考上述条件(1)和(2),计算机应做的全部工作是(1)不进行任何操作但慢两倍地回放样本;或(2)存储输入样本,然后以两倍快的速度回放它们。不应该有任何其他的处理。我想只有这样我才能得到我想要的非常低的延迟。
我想知道直接在OS X的核心音频中做这件事是不是比使用PortAudio更好?这将限制平台兼容性。但低延迟比兼容性重要得多。
我是否有可能使用中级服务(如Audio Units )来做我想要做的事情?或者,我是否需要直接为I/O Kit等低级服务编写代码?我该怎么做呢?
发布于 2015-04-28 23:41:25
看起来对你来说最好的方法是使用像Max/MSP或Pure Data这样的东西。这将允许您避免使用基于文本的语言,并且应该对您快速开发您想要做的事情是有好处的。I/O工具包对于你想要做的事情来说有点太低级了。
因为max不是一种基于文本的语言,所以在stack overflow这样的网站上共享代码本身是有点棘手的。我已经包含了一个截图。你可以复制和粘贴max代码,但它有点难看,而且不适合这样做。

这里有一个简短的描述。表示rect~ 1的方框正在产生一个频率为Hz的方波。snapshot~框捕获的是它输出的值。if框检查它是否大于零或小于零(波峰和波谷)。如果它得到一个槽,记录盒记录来自麦克风盒的信号,并将其存储在缓冲器中。groove~ box是一个采样器,它播放这个缓冲区中的音频,当它收到来自if box的一声巨响时,它就会播放音频。符号框被用来控制播放速率。
此外,你可能不知道这一点,但你试图分享的.PDF不可用。
还有一件事,如果延迟很重要,你应该学习一种叫做点击训练的东西。这基本上是您发送一个信号的地方,在开始时只有一个1,并计算该值通过您的系统所需的时间。
https://stackoverflow.com/questions/29904546
复制相似问题