开发者

Feeding audio from input directly to output, sounding clean c++

I'm currently trying to take in sound and feed it back to the speakers. I'm using the openframeworks library that makes this fairly simple.

I'm using this class

http://www.openframeworks.cc/documentation?detail=ofSoundStream

The setup function is

ofSoundStreamSetup(int nOutputs, int nInputs, ofSimpleApp * OFSA, int sampleRate, int bufferSize, int nBuffers)

and I am using

ofSoundStreamSetup(1, 1, this, 44100, 512, 4)

My header info is

float buffer1[1000000];
float buffer2[1000000]; 

float* readPointer;
float* writePointer;
int readp;
int writep;

I've got two functions

audioReceived (float * input, int bufferSize, int nChannels)

if (writep < 10)
    {

    for (int i = 0;i < bufferSize; i++)
        {
                     writePointer[writep*i] = input[i];
        }           

            writep++;

        if (writep >= 10)
        {               
            writep = 0; 
        }
    }


audioRequested(float * output, int buffersize, int numChannels)
{
if (writep > 0)
    {
        for (int i = 0; i < bufferSize; i++)
            {
                output[i] = readPointer[readp * i];
            }


        readp++;

        if (readp >=10)
        {
            readp = 0;

        }

    }
}

This is working but the quality seems poppy and crackly. I think I may h开发者_如何学运维ave to implement a proper circle buffer, or double buffering, but I'm not sure.

Can anyone point me in the correct direction for how I can get the audio to sound good, using as simple a method as possible?


I would definitely suggest using double buffering. Otherwise a buffer becomes available at the same time you want a buffer. This potentially results in a case of you editing a buffer that is currently in use.

In general when audio is received you add it to buffer 1. When audio is requested you give it buffer 2. Now when audio is received put it in buffer 2 and when the request arrives give it buffer 1. And so on.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜