2010-12-09 34 views
1

我希望这个问题不太含糊。我试图从这个Xcode项目中的音频缓冲区获取信息,并使用它来完成一些DSP。用DSP处理C++中的音频数据

framebuffer指向我想传递给函数的一个值数组,循环并最终插入原始缓冲区。该方法将起到类似声音过滤器或效果的作用。

也许为了让我的问题尽可能清楚,我们可以得到一个子程序的例子,它会在缓冲区中为每个样本添加0.25?

这里是到目前为止的代码:

static OSStatus playbackCallback(void *inRefCon, 
           AudioUnitRenderActionFlags *ioActionFlags, 
          const AudioTimeStamp *inTimeStamp, 
          UInt32 inBusNumber, 
          UInt32 inNumberFrames, 
          AudioBufferList *ioData) { 

EAGLView *remoteIOplayer = (EAGLView *)inRefCon; 
for (int i = 0 ; i < ioData->mNumberBuffers; i++){ 
    //get the buffer to be filled 

    AudioBuffer buffer = ioData->mBuffers[i]; 
    short *frameBuffer = (short*)buffer.mData; 


     for (int j = 0; j < inNumberFrames; j++){ 
      // get NextPacket returns a 32 bit value, one frame. 
       frameBuffer[j] = [[remoteIOplayer inMemoryAudioFile] getNextPacket];  
     } 

     EAGLView* thisView = [[EAGLView alloc] init]; 

     [thisView DoStuffWithTheRecordedAudio:ioData]; 
     [thisView release]; 
     } 

return noErr; 
} 
+0

这看起来像Objective-C,而不是C++? – 2010-12-09 15:25:11

回答

2

试图做一个音频回调内部UI或Open GL的东西是在iOS设备上是一个坏主意。您需要使用队列或fifo等来解耦回调和UI执行。

试图在实时音频的内部循环内部进行Objective C消息传递也可能是设备性能方面非常糟糕的主意。坚持纯C/C++在性能关键的内部循环中工作得更好。

此外,向音频数据添加常数可能会导致无法听到的直流偏移。