2013-02-14 2 views
0

J'ai besoin de lire le son en continu avec OpenAL. C'est mon code, mais ça ne marche pas. Ce que je dois faire?Lecture du son en cours de diffusion OpenAL

device = alcOpenDevice(NULL); 
    // 
    ofstream file; 
    file.open("TESTSPEAKER", std::ios_base::binary); 
    context = alcCreateContext(device, NULL); 
    alcMakeContextCurrent(context); 
    // alGetError(); 
    char *alBuffer; 
    ALenum alFormatBuffer; 
    ALsizei alFreqBuffer; 
    long alBufferLen; 
    ALboolean alLoop; 
    unsigned int alSource; 
    unsigned int alSampleSet; 
    boost::array <char, 882> buf; 
    while (!ExitKey) 
    { 
     boost::system::error_code error; 
     size_t len = VoiceSocket->read_some(boost::asio::buffer(buf), error); 
     if (len==0) 
     { 
      continue; 
     } 
     file.write(buf.data(), 882); 
     alGenSources(1, &alSource); 
     alGenBuffers(1, &alSampleSet); 
     alBufferData(alSource, AL_FORMAT_MONO16, buf.data(), buf.size(), 44100); 
     alSourcei(alSource, AL_BUFFER, alSampleSet); 
     // 
     //alSourcei(alSource, AL_LOOPING, alSampleSet); 


      alSourcePlay(alSource); 

     //alSourcePlay(alSource); 
    } 
    VoiceSocket->close(); 
    file.close(); 

Si je vois mon fichier ("TESTSPEAKER"), je regarde mon son. Donc je passe sur le réseau correctement. Mais comment je peux jouer ce son avec openal?

+0

J'ai besoin de jouer tous les 10ms, 882 octets de son (MONO16). Ce son est dans la variable "buf". – EXTRAM

Répondre

0

Si vous diffusez, vous devez utiliser

alSourceQueueBuffers(alSource, 1, &alSampleSet); 

au lieu de le mettre tampon statique, comme

alSourcei(alSource, AL_BUFFER, alSampleSet); 

et lancez la commande alSourcePlay(alSource); qu'une seule fois, quand a été mis en attente le premier tampon .

Questions connexes