Подача аудио с входа непосредственно на выход, звучание чистый с ++ - PullRequest
1 голос
/ 15 декабря 2010

Я сейчас пытаюсь взять звук и подать его обратно на динамики.Я использую библиотеку openframeworks, которая делает это довольно простым.

Я использую этот класс

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

Функция установки

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

и я использую

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

Моя информация заголовка:

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

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

У меня есть две функции

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;

        }

    }
}

Это работает, но качествокажется маком и хрустящим.Я думаю, что мне, возможно, придется реализовать правильный круговой буфер или двойную буферизацию, но я не уверен.

Может ли кто-нибудь указать мне правильное направление, как я могу получить хорошее звучание звука, используя какпростой метод, насколько это возможно?

1 Ответ

2 голосов
/ 15 декабря 2010

Я бы определенно предложил использовать двойную буферизацию. В противном случае буфер становится доступным в то же время, когда вам нужен буфер. Это может привести к тому, что вы отредактируете буфер, который используется в данный момент.

В общем, когда аудио принимается, вы добавляете его в буфер 1. Когда запрашивается аудио, вы отдаете ему буфер 2. Теперь, когда аудио получено, поместите его в буфер 2, а при поступлении запроса передайте ему буфер 1. И так далее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...