DWORD WINAPI MixAudio(LPVOID lpParameter ) { const int BUFFER_SIZE = 4096; const int NUM_BUFFERS = 8; char* pcm = new char[BUFFER_SIZE]; ALuint buffers[NUM_BUFFERS]; ALuint source; int size; alGenBuffers(NUM_BUFFERS, buffers); alGenSources(1, &source); for(int i=0;i<NUM_BUFFERS;i++){ size = g_ogg.audio_read(pcm,BUFFER_SIZE); alBufferData(buffers[i], AL_FORMAT_STEREO16, pcm, size, 44100); } alSourceQueueBuffers(source, NUM_BUFFERS, buffers); alSourcePlay(source); while(g_ogg.playing()) { int processed; alGetSourcei(source, AL_BUFFERS_PROCESSED, &processed); while((processed--)>0) { ALuint buffer; alSourceUnqueueBuffers(source, 1, &buffer); size = g_ogg.audio_read(pcm,BUFFER_SIZE); if(size>0) alBufferData(buffer, AL_FORMAT_STEREO16, pcm, size, 44100); alSourceQueueBuffers(source, 1, &buffer); ALenum state; alGetSourcei(source, AL_SOURCE_STATE, &state); if(state!=AL_PLAYING) alSourcePlay(source); } Sleep(5); } alSourceStop(source); alDeleteSources(1, &source); alDeleteBuffers(NUM_BUFFERS, buffers); delete [] pcm; return 0; }