2010-12-14 62 views
1

J'essaie actuellement de prendre du son et de le renvoyer aux haut-parleurs. J'utilise la bibliothèque openframeworks qui rend cela assez simple.Alimentation de l'audio directement de l'entrée vers la sortie, avec un son clair C++

J'utilise cette classe

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

La fonction de configuration est

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

et je me sers

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

Mes infos d'en-tête est

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

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

J'ai deux fonctions

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; 

     } 

    } 
} 

Cela fonctionne, mais la qualité semble coquelicot et craquelée. Je pense que je devrais mettre en place un tampon de cercle approprié, ou un double tampon, mais je ne suis pas sûr.

Est-ce que quelqu'un peut me diriger dans la bonne direction pour que l'audio sonne bien, en utilisant une méthode aussi simple que possible?

Répondre

2

Je suggérerais certainement l'utilisation du double tampon. Sinon, un tampon devient disponible en même temps que vous voulez un tampon. Cela peut entraîner la modification d'un tampon actuellement utilisé.

En général, lorsque l'audio est reçu, vous l'ajoutez au tampon 1. Lorsque l'audio est demandé, vous lui donnez le tampon 2. Maintenant, quand l'audio est reçu, placez-le dans le tampon 2 et quand la demande arrive. .

+0

plutôt que 2 tampons séparés, est-ce que je pourrais juste utiliser un seul grand tampon, et juste utiliser différentes positions dans le tableau? Ou y a-t-il un problème de performance avec cela? Dois-je également utiliser des pointeurs séparés lorsque je parcours le tableau, ou pouvez-vous utiliser le même? –

+0

Je n'ai pas compris ce qu'il en est, alors je vais devoir attendre jusqu'à ce que je puisse recommencer. Merci. –