macos - Mac OS X:音频频率是否随采样率的变化而变化?

标签 macos audio core-audio audiounit portaudio

我想通过更改Mac OS X上的采样率来更改录音的频率。

这是一个针对口吃者的研究项目。延迟必须非常低,这很重要-例如,这就是为什么我不考虑快速傅立叶变换的原因。相反,我想以44kHz的速率收集样本,然后执行以下两项操作之一:

1)以两倍的速度(即22kHz)播放样本。这将导致与源的异步性增加。如果可以每隔1秒左右重新开始采样,以防止异步变得过于明显,那将很有用。

2)播放样本快两倍。显然,不可能连续进行此操作(即无法播放尚未收集的样本)。为了解决这个问题,我打算用方波控制播放。样本的回放速度是方波峰值期间的两倍。在方波波谷期间什么也听不到(但仍会收集样本)。

我已经准备了一个PDF,可以在这里更详细地描述该项目:

https://www.dropbox.com/s/8u3tz7d9hhxd3t9/Frequency%20shift%20techniques.pdf?dl=0

一位 friend 使用PortAudio帮助我进行了一些编程。不幸的是,我们的等待时间很长。我认为这可能是因为PortAudio的工作水平过高。从代码中,我看起来好像PortAudio正在缓冲传入的音频流,然后进行更改,这些更改从表面上看与我上面描述的相似,但实际上是对缓冲的流进行的操作。

这根本不是我想要的。至关重要的是,处理单元应尽可能少地工作。参照上面的条件(1)和(2),计算机所要做的就是(1)在没有任何操作的情况下回放样本,但速度要慢两倍。或(2)存储传入的样本,然后以两倍的速度回放它们。不应进行任何其他处理。我认为这是我获得所需的极低延迟的唯一方法。

我想知道尝试在OS X的Core Audio中直接执行此操作,而不是使用PortAudio是否更好?这将限制平台兼容性。但是低延迟比兼容性要重要得多。

使用音频设备等中级服务,我是否可能能够做我想做的事情?还是我需要直接为I / O Kit等低级服务编写代码?我将如何处理?

最佳答案

看来,最好的方法是使用Max / MSP或Pure Data之类的东西。这将使您避免使用基于文本的语言,并且对您快速发展您的工作很有帮助。 I / O工具包对于您尝试执行的操作来说太底层了。

由于max不是基于文本的语言,因此在堆栈溢出之类的网站上共享代码本身有些棘手。我提供了屏幕抓图。您可以复制并粘贴最大代码,但是这样做有点丑陋且不合适。

这是一个简短的说明。表示rect〜1的框正在生成Hz的方波。快照框正在捕获它吐出的值。 if框检查它是大于零还是小于零(峰值和谷值)。如果进入低谷,record_框会记录来自麦克风盒的信号并将其存储在缓冲区中。 groove〜框是一个采样器,它在此缓冲区中播放音频,当它从if框接收到砰的一声时,它将播放音频。 sig〜框用于控制播放速率。

另外,您可能不知道这一点,但是您尝试共享的.PDF不可用。

另一方面,如果延迟很重要,则应该了解一种称为“点击训练”的知识。从根本上讲,这是您在开始时发送带有单个1的信号的时间,该值通过系统需要多长时间。

关于macos - Mac OS X:音频频率是否随采样率的变化而变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29904546/

相关文章:

python - 如何使用来自大量 wav 文件的 tensorflow.data.Dataset api 创建数据集?

iOS:当前AVAudioPlayer的AudioUnit

iphone - 使用 MPMoviePlayerController 和锁定屏幕继续播放声音?

ios - 核心音频渲染线程和线程信号

MacOS 更新到 High Sierra 后 PHP 不工作

macos - 在 2016 年,如何获取文件的 Finder “Kind”?

java - 如何使用内置命令行参数运行 Java 应用程序?

python - iPython 启动时抛出错误 : "ipythonrc not found"

c# - 如何使用NAudio将.rm(RealPlayer Media)文件转换为mp3?

audio - WebAudio中的WaveShaper节点-如何模拟失真?