AudioFrame * AudioHeader::getAudioFrame(int position,float density){ position = CLAMP(position,0,buffer->size()); AudioFrame * currentFrame = buffer->getAudioFrame(position); vector<AudioFrame*> prevFrames; vector<AudioFrame*> nextFrames; for(int i=0;i<density+1;i++){ if(buffer->size()>position+i+1){ AudioFrame * frame = buffer->getAudioFrame(position+i); if(frame){ nextFrames.push_back(frame); } } } for(int i=0;i>-density-1;i--){ if(position+i>0){ AudioFrame * frame = buffer->getAudioFrame(position+i); if(frame){ nextFrames.push_back(frame); } } } int currentFrameSize=currentFrame->getBufferSize()*currentFrame->getChannels(); float resultBuffer[currentFrameSize]; memcpy(resultBuffer,currentFrame->getAudioFrame(),sizeof(float)*currentFrameSize); for(int i=0;i<prevFrames.size();i++){ int frameSize=prevFrames[i]->getBufferSize()*prevFrames[i]->getChannels(); int offset=CLAMP((int)((float)frameSize*(density-(float)i)),0,frameSize); for(int j=frameSize-offset;j<frameSize;j++){ resultBuffer[frameSize-j]=resultBuffer[frameSize-j]+prevFrames[i]->getAudioFrame()[j]; } prevFrames[i]->release(); } for(int i=0;i<nextFrames.size();i++){ int frameSize=nextFrames[i]->getBufferSize()*nextFrames[i]->getChannels(); int offset=CLAMP((int)((float)frameSize*(density-(float)i)),0,frameSize); for(int j=0;j<offset;j++){ resultBuffer[frameSize-j]=resultBuffer[frameSize-j]+nextFrames[i]->getAudioFrame()[j]; } nextFrames[i]->release(); } AudioFrame * resultFrame= new AudioFrame( resultBuffer, currentFrame->getBufferSize(), currentFrame->getChannels()); currentFrame->release(); return resultFrame; }