音频队列 kAudioQueueParam_Pitch

Posted

技术标签:

【中文标题】音频队列 kAudioQueueParam_Pitch【英文标题】:audioqueue kAudioQueueParam_Pitch 【发布时间】:2011-06-02 13:19:57 【问题描述】:

OS 10.6 下的音频队列服务文档现在包含一个音高参数:

kAudioQueueParam_Pitch 对音频队列的播放进行音高转换的音分数,范围为 -2400 到 2400 音分(其中 1200 音分对应于一个音乐八度音阶。) 此参数仅在启用时间/音高处理器时可用。

同一文档的其他部分仍然说音量是唯一可用的参数,我找不到上面提到的时间/音高处理器的任何参考。

有人知道这是什么意思吗?直接将值写入参数对播放没有影响(尽管不会引发错误)。同样,写入音量设置确实有效。

在没有 Apple 支持的情况下像往常一样令人沮丧。

【问题讨论】:

【参考方案1】:

这仅在 ios 7 之前的 OSX 上可用。如果您查看 AudioQueue.h,您会发现它有条件地仅在 iOS 7 上可用。[注意:在重新阅读时,我看到您指的是 OS X,而不是iOS,但希望以下是跨平台的]

另外,在设置time_pitch算法之前需要开启time_pitch队列,只有Spectral算法支持pitch(都支持率)

result = AudioQueueNewOutput(&(pAqData->mDataFormat), aqHandleOutputBuffer, pAqData,
                             0, kCFRunLoopCommonModes   , 0, &(pAqData->mQueue));
// enable time_pitch
UInt32 trueValue = 1;
AudioQueueSetProperty(pAqData->mQueue, kAudioQueueProperty_EnableTimePitch, &trueValue, sizeof(trueValue)); 
UInt32 timePitchAlgorithm = kAudioQueueTimePitchAlgorithm_Spectral; // supports rate and pitch
 AudioQueueSetProperty(pAqData->mQueue, kAudioQueueProperty_TimePitchAlgorithm, &timePitchAlgorithm, sizeof(timePitchAlgorithm));

【讨论】:

以上是关于音频队列 kAudioQueueParam_Pitch的主要内容,如果未能解决你的问题,请参考以下文章

当我需要自定义音频效果时,我是不是需要处理音频单元,或者我可以依赖音频队列服务?

播放流后音频队列无法录制音频

使用音频队列或音频单元的 VoIP 功能

音频队列播放完成的准确时间

如何停止音频队列?

音频队列处理抽头到底是啥?