如何使用Oboe库实现混响算法?

问题描述

嗨,聪明的人:)我有一个音乐应用程序,我想在采样音频中添加一些实时声音效果。 如何通过代码创建“ 混响”或“ 延迟效果

我正在使用“ Oboe 库进行音频流传输。

我试图学习如何做,但我不知道我在做什么错?

这是我的渲染代码

void Player::renderAudio(float *stream,int32_t streamLength){

    const int32_t channelCount = mSound->getChannelCount();

    // Reverb Configuration
    int delayMilliseconds = 5 * 1000;
    int delaySamples =(int)((float)delayMilliseconds * kSampleRateHz / 1000.0F); // 48,000hz
    float decay = 5000.0f; // Some random number

    if (mIsPlaying){

        int32_t framesToRenderFromData = streamLength ;
        float totalSourceFrames = mSound->getTotalFrames();  // Note change here
        const float *data = mSound->getData();


        if ( mPos >= totalSourceFrames ) {
            framesToRenderFromData = 0.0f;
        }

        for (int i = 0; i < framesToRenderFromData; ++i) {

            //Stereo Channel
            for (int j = 0; j < channelCount; ++j) {
                stream[(i * channelCount) + j]+= data[((size_t)mPos) * channelCount + j] * mMasterVol;
            }

            //Increment position (pitch supported)
            mPos += mPitch;
            if ( ((size_t)mPos) >= totalSourceFrames ) {
                framesToRenderFromData = (size_t)mPos;
                mPos = 0.0f;
                mIsPlaying = false;
                break;
            }

        }

        //Reverb algorithm?!?! Do nothing...
        for (int x = 0; x <framesToRenderFromData - delaySamples; x++){
            stream[x + delaySamples] += (short)((float)stream[x] * decay);
        }
        
        if (framesToRenderFromData < streamLength){
            renderSilence(&stream[framesToRenderFromData],streamLength * channelCount);
        }
    } else {
        renderSilence(stream,streamLength * channelCount);
    }
}

void Player::renderSilence(float *start,int32_t numSamples){
    for (int i = 0; i < numSamples; ++i) {
        start[i] = 0;
    }
}

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)