Objective c 在C+中操作音频数据+;用于DSP目的

Objective c 在C+中操作音频数据+;用于DSP目的,objective-c,audio,signal-processing,core-audio,Objective C,Audio,Signal Processing,Core Audio,我希望这个问题不要太含糊。我试图从这个Xcode项目的音频缓冲区中获取信息,并用它来做一些DSP工作 framebuffer指向我希望传递给函数的值数组,循环并最终插入原始缓冲区。该方法的作用类似于声音过滤器或效果 也许为了让我的问题尽可能清楚,我们可以得到一个子程序的例子,它会给缓冲区中的每个样本增加0.25 以下是迄今为止的代码: static OSStatus playbackCallback(void *inRefCon,

我希望这个问题不要太含糊。我试图从这个Xcode项目的音频缓冲区中获取信息,并用它来做一些DSP工作

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;
}
静态OSStatus播放回调(void*inRefCon,
AudioUnitRenderActionFlags*ioActionFlags,
常量音频时间戳*inTimeStamp,
UInt32 InBunsNumber,
UInt32数字帧,
音频缓冲列表*ioData){
EFCON中的EAGLView*remoteIOplayer=(EAGLView*);
对于(int i=0;imNumberBuffers;i++){
//获取要填充的缓冲区
AudioBuffer=ioData->mBuffers[i];
short*frameBuffer=(short*)buffer.mData;
对于(int j=0;j
在iOS设备上,尝试在音频回调中执行UI或打开GL是个坏主意。您需要使用队列或FIFO等将回调和UI执行解耦

试图在实时音频的内部循环中执行Objective C消息传递,这对于设备性能来说可能也是一个非常糟糕的主意。坚持使用普通C/C++在性能关键的内部循环中工作得更好


也可以,对音频数据加常数可能会导致一个听不到的直流偏移。

看起来像Obje-C,不是C++。是的,里面有一个ObjuleC,但是音频是C++。