首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone AudioStreamer AudioQueue实时快速傅立叶变换

iPhone AudioStreamer AudioQueue实时快速傅立叶变换
EN

Stack Overflow用户
提问于 2012-10-01 21:02:39
回答 1查看 1.2K关注 0票数 1

我正在使用Matt Gallagher的AudioStreamer播放mp3音频流。现在我想要实时进行快速傅立叶变换,并使用iPhone上的OpenGL ES可视化频率。

我想知道在哪里捕获音频数据并将其传递到我的"Super-Fancy-FFT-Computing-3D-Visualization-Method".Matt正在使用AudioQueue框架,并且有一个回调函数是通过以下方式设置的:

代码语言:javascript
复制
err = AudioQueueNewOutput(&asbd, ASAudioQueueOutputCallback, self, NULL, NULL, 0, &audioQueue);

回调如下所示:

代码语言:javascript
复制
static void ASAudioQueueOutputCallback(void*                inClientData, 
                                AudioQueueRef           inAQ, 
                                AudioQueueBufferRef     inBuffer){...}

在那一刻,我正在传递来自AudioQueueBufferRef的数据,结果看起来非常奇怪。但是对于FFT和可视化,有太多的点可以搞砸,所以我想确保至少将正确的数据传递给FFT。我以这种方式从缓冲区读取数据,忽略每隔一次的值,因为我只想分析一个通道:

代码语言:javascript
复制
SInt32* buffPointer = (SInt32*)inBuffer->mAudioData;
int count = 0;
for (int i = 0; i < inBuffer->mAudioDataByteSize/2; i++) {
    myBuffer[i] = buffPointer[count];
    count += 2;
}

然后使用包含512个值的myBuffer进行快速傅立叶变换计算。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-05 02:12:34

您可以将从音频文件流回调收到的数据直接发送到音频队列,而不是将其转换为PCM,运行您的分析,然后如果您仍然需要播放它,则将其馈送到音频队列(作为PCM)。要进行转换,您可以使用音频转换器服务(这将是一个没有结束的尖叫噩梦),或离线音频队列。

选项3:查看iOS 6上的新音频队列“点击”,它允许您查看队列中的数据。我还需要检查一下这个…它看起来很酷(我在CocoaConf上做了三个星期的演讲,所以,是的,…)

(转发自:http://lists.apple.com/archives/coreaudio-api/2012/Oct/msg00034.html )

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12673835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档