Ios 是否可以使用MTAudioProcessingTap跳过输入样本?

Ios 是否可以使用MTAudioProcessingTap跳过输入样本?,ios,audio,core-audio,Ios,Audio,Core Audio,我正在尝试使用MTAudioProcessingTap实现一个简单的间隙消除算法 在我的process()函数中,我调用MTAudioProcessingTapGetSourceAudio()来检索音频。但是,如果我消除了一个间隙,我需要检索更多的音频以填充输出缓冲区,再次调用GetSourceAudio()似乎会得到完全相同的输入音频 如果我从process()返回的numberFrames少于numberFrames,iOS会用沉默来填补空白,这不适合我的应用程序-我想提前时间 如果我从Ge

我正在尝试使用MTAudioProcessingTap实现一个简单的间隙消除算法

在我的
process()
函数中,我调用
MTAudioProcessingTapGetSourceAudio()
来检索音频。但是,如果我消除了一个间隙,我需要检索更多的音频以填充输出缓冲区,再次调用
GetSourceAudio()
似乎会得到完全相同的输入音频

如果我从
process()
返回的
numberFrames
少于
numberFrames
,iOS会用沉默来填补空白,这不适合我的应用程序-我想提前时间

如果我从
GetSourceAudio()
中检索到少于
numberFrames
的帧,它只返回前n帧,而不会返回后面的帧

因此:

  • 有没有办法让MTAudioProcessingTap跳过时间?这真的是一个一对一抽样交易吗
  • 如果您无法从
    GetSourceAudio()
    请求额外数据,并且不检索所有音频将导致输出中出现间隙,那么允许您请求特定帧数有什么意义?此外,如果参数必须始终与
    process()
    参数中指定的参数完全一致,我们为什么还要调用
    GetSourceAudio()


9月30日更新:我已经切换到Mazingaudioengine,它很乐意为我提供尽可能多的音频。然而,我仍然对MTAudioProcessingTap的设计感到困惑。

我也希望能做到这一点。你有没有关于如何实现这一点的例子?我以前使用过MazingAudioEngine,但我面临的问题与您最初的问题相同。这里没有合适的回答,但简单地说,在AEAudioControllerFilterCallback中,我称之为“producer”,直到我有足够的数据填充输出缓冲区:
producer(producerToken,audio,&priv.inputNumFrames)
感谢您的提示。这是否意味着您要循环通过音频缓冲区并检测静音,然后用一个新的缓冲区调用
producer
,该缓冲区会忽略静音?您需要填充一个固定大小的输出缓冲区<代码>生产者从输入队列中提取。由于我们正在删除样本(输出将小于输入),因此您将继续调用
producer
,直到输出缓冲区已满。还有一点剩余,您可以为下一次
filterCallback
保留。