示例#1
0
ALuint AsyncPlayFunc(ALvoid*)
{
	EnterCriticalSection(&cs_StreamPlay);
	while(CurrentInterval > 0.0f)
	{
		alureUpdate();

		ALfloat interval = CurrentInterval;
		LeaveCriticalSection(&cs_StreamPlay);
		alureSleep(interval);
		EnterCriticalSection(&cs_StreamPlay);
	}
	LeaveCriticalSection(&cs_StreamPlay);
	return 0;
}
示例#2
0
void Sound::run() {
    QFile audio_file(mResourcePath);
    if(audio_file.open(QIODevice::ReadOnly)) {
        QByteArray audio_data = audio_file.readAll();
        audio_file.close();

        ALuint src, buf;

        buf = alureCreateBufferFromMemory((const unsigned char*)audio_data.constData(), audio_data.size());

        alGenSources(1, &src);
        if(alGetError() != AL_NO_ERROR) {
            qDebug() << "Failed to create OpenAL source!";
        }

        if(!buf) {
            qDebug() << "Could not load sound: " << alureGetErrorString();
            alDeleteSources(1, &src);
        }

        alSourcei(src, AL_BUFFER, buf);
        alSourcef(src, AL_GAIN, 0.8f * mVolume);
        if(alurePlaySource(src, eos_callback, this) == AL_FALSE) {
            qDebug() << "Failed to start source!";
            alDeleteSources(1, &src);
            alDeleteBuffers(1, &buf);
        }

        while(!mIsDone) {
            alureSleep(0.125);
            alureUpdate();
        }

        alDeleteSources(1, &src);
        alDeleteBuffers(1, &buf);
    }
}
void System::RunBatch() const {
    alureUpdate();
}