Exemple #1
0
void Quit()
{
	StopMusic();
    alureUpdateInterval(0);
	alureSleep(0.1f);
	alureShutdownDevice();
}
Exemple #2
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;
}
Exemple #3
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);
    }
}
Exemple #4
0
int main () {
  if (!alureInitDevice(NULL, NULL)) {
    std::fprintf(stderr, "Failed to open OpenAL device: %s\n", alureGetErrorString());
    return 1;
  }

  alGenSources(1, &src);
  if (alGetError() != AL_NO_ERROR) {
    std::fprintf(stderr, "Failed to create OpenAL source!\n");
    alureShutdownDevice();
    return 1;
  }

  // Seeting Blip Buffer

  synth.treble_eq( -18.0f );

  synth.volume (0.80);
  synth.output (&blipbuf);

  // Init Blip Buffer with a buffer of 250ms (second paramter is time in ms)
  if ( blipbuf.set_sample_rate( SR, 1000 / 4 ) ) {
    std::fprintf(stderr, "Failed to create Blip Buffer! Our of Memory\n");
    alureShutdownDevice();
    return 1;
  }
  blipbuf.clock_rate( blipbuf.sample_rate() );
  blipbuf.bass_freq(300); // Equalization like a TV speaker

  stream = alureCreateStreamFromCallback (StreamCB, nullptr, AL_FORMAT_MONO16, SR, SR/2, 0, nullptr);

  if(!stream) {
    std::fprintf(stderr, "Error creating stream! %s\n",  alureGetErrorString());
    alDeleteSources(1, &src);

    alureShutdownDevice();
    return 1;
  }

  if (!alurePlaySourceStream(src, stream, 4, 0, eos_callback, NULL)) {
    std::fprintf(stderr, "Failed to play stream: %s\n", alureGetErrorString());
    isdone = 1;
  }

  alureUpdateInterval(0.005f); // Should be a independint thread  playing the stream

  while(!isdone) {
    freq -= 1;
    if (freq < 1) {
      freq = 600;
    }

    alureSleep(0.02f);
  }
  alureStopSource(src, AL_FALSE);

  alDeleteSources(1, &src);
  alureDestroyStream(stream, 0, NULL);

  alureShutdownDevice();
  return 0;
}
ALuint AsyncPlayFunc(ALvoid*)
{
	while(1)
	{
		EnterCriticalSection(&cs_StreamPlay);
		if(AsyncPlayList.size() == 0)
		{
			StopThread(PlayThreadHandle);
			PlayThreadHandle = NULL;
			LeaveCriticalSection(&cs_StreamPlay);
			break;
		}

		std::list<AsyncPlayEntry>::iterator i = AsyncPlayList.begin(),
		                                    end = AsyncPlayList.end();
		while(i != end)
		{
			ALuint buf;
			ALint processed;
			ALint queued;
			ALint state;

			if(i->stream == NULL)
			{
				alGetSourcei(i->source, AL_SOURCE_STATE, &state);
				if(state != AL_PLAYING && state != AL_PAUSED)
				{
					i->eos_callback(i->user_data, i->source);
					i = AsyncPlayList.erase(i);
				}
				else i++;
				continue;
			}

			alGetSourcei(i->source, AL_SOURCE_STATE, &state);
			alGetSourcei(i->source, AL_BUFFERS_QUEUED, &queued);
			alGetSourcei(i->source, AL_BUFFERS_PROCESSED, &processed);
			while(processed > 0)
			{
				queued--;
				processed--;
				alSourceUnqueueBuffers(i->source, 1, &buf);

				ALint size, channels, bits;
				alGetBufferi(buf, AL_SIZE, &size);
				alGetBufferi(buf, AL_CHANNELS, &channels);
				alGetBufferi(buf, AL_BITS, &bits);
				i->base_time += size / channels * 8 / bits;
				i->base_time %= i->max_time;

				while(!i->finished)
				{
					ALint filled = alureBufferDataFromStream(i->stream, 1, &buf);
					if(filled > 0)
					{
						queued++;
						alSourceQueueBuffers(i->source, 1, &buf);
						if(i->loopcount == 0)
						{
							alGetBufferi(buf, AL_SIZE, &size);
							alGetBufferi(buf, AL_CHANNELS, &channels);
							alGetBufferi(buf, AL_BITS, &bits);
							i->max_time += size / channels * 8 / bits;
						}
						break;
					}
					if(i->loopcount == i->maxloops)
					{
						i->finished = true;
						break;
					}
					if(i->maxloops != -1)
						i->loopcount++;
					i->finished = !alureRewindStream(i->stream);
				}
			}
			if(state != AL_PLAYING && state != AL_PAUSED)
			{
				if(queued == 0)
				{
					alSourcei(i->source, AL_BUFFER, 0);
					alDeleteBuffers(i->buffers.size(), &i->buffers[0]);
					if(i->eos_callback)
						i->eos_callback(i->user_data, i->source);
					i = AsyncPlayList.erase(i);
					continue;
				}
				alSourcePlay(i->source);
			}
			i++;
		}
		LeaveCriticalSection(&cs_StreamPlay);

		alureSleep(0.0078125f);
	}

	return 0;
}