我想通过更改Mac OS X上的采样率来更改录音频率。
这是一个针对口吃者的研究项目。延迟非常低是至关重要的 - 例如,这就是我不考虑快速傅立叶变换的原因。相反,我想以44kHz的速率收集样本,然后做两件事之一:
1)将样本慢慢播放两次(即22kHz)。这将导致与源的异步增加。如果我可以每隔1秒左右重新开始采样以防止异步变得太明显,那将是有用的。
2)快速播放样品两次。显然,不可能连续地这样做(即不能播放尚未收集的样本)。为了解决这个问题,我打算用方波来播放播放。样本将在方波峰值期间以两倍的速度播放。在方波槽中没有任何东西可以被听到(但仍会收集样本)。
我准备了一份PDF,在这里更详细地描述了该项目:
https://www.dropbox.com/s/8u3tz7d9hhxd3t9/Frequency%20shift%20techniques.pdf?dl=0
一位朋友使用PortAudio帮助我完成了一些编程。不幸的是,我们的延迟很长。我想这可能是因为PortAudio的工作水平太高了。从代码中,它看起来好像PortAudio正在缓冲传入的音频流,然后进行改变,这些改变初步类似于我上面描述的那些,但实际上是在缓冲流上的操作。
这根本不是我想要的。处理单元必须尽可能少地完成。参考上述条件(1)和(2),所有计算机应该做的是(1)回放样本而不进行任何操作但是慢两倍;或(2)存储传入的样本,然后快速播放两次。不应该有任何其他处理。我认为这是我能够获得非常低延迟的唯一方法。
我想知道在Core OS for OS X中直接尝试这样做是否更好,而不是使用PortAudio?这会限制平台兼容性。但低延迟比兼容性更重要。
我是否可以使用中级服务(例如音频单元)做我想做的事情?或者我是否需要直接编写I / O Kit等低级服务?我该怎么做呢?
答案 0 :(得分:0)
看起来最好的事情就是使用Max / MSP或Pure Data。这将允许您避免使用基于文本的语言,并且应该有助于您快速开发您正在寻找的内容。 I / O套件对于您尝试做的事情来说有点太低级了。
由于max不是基于文本的语言,因此在堆栈溢出等站点上共享代码本身有点棘手。我已经收到了一个屏幕抓图。您可以复制并粘贴最大代码,但它有点难看并且不适合这种情况。
这里有一个简短的描述。 rect~1的方框表示以Hz为单位的方波。快照〜框正在捕获此吐出的值。 if框检查它是否大于零或小于零(峰和谷)。如果它变成了低谷,则记录框会记录来自麦克风盒的信号并将其存储在缓冲区中。 groove_box是一个在这个缓冲区中播放音频的采样器,当它从if框中恢复时,它会播放音频。 sig_box用于控制播放速率。
另外,您可能不知道这一点,但您尝试分享的.PDF不可用。
另一件事,如果延迟很重要,你应该学习一种叫做点击列车的东西。这基本上是您在开始时使用单个1发送信号的时间,以及该值通过系统所需的时间。