示例#1
0
void AudioGrabber::audioReceived(float * input, int bufferSize, int nChannels){
    AudioFrame * frame = new AudioFrame(input,bufferSize,nChannels);
    newFrameEvent.notify(this,*frame);
    frame->release();

    //cout << "audio: " << frame.getTimestamp().epochTime() << "\n";
}
示例#2
0
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;
}