当前位置: 首页>>代码示例>>C++>>正文


C++ sound_GetError函数代码示例

本文整理汇总了C++中sound_GetError函数的典型用法代码示例。如果您正苦于以下问题:C++ sound_GetError函数的具体用法?C++ sound_GetError怎么用?C++ sound_GetError使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了sound_GetError函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: sound_DecodeOggVorbisTrack

/** Decodes an opened OggVorbis file into an OpenAL buffer
 *  \param psTrack pointer to object which will contain the final buffer
 *  \param PHYSFS_fileHandle file handle given by PhysicsFS to the opened file
 *  \return on success the psTrack pointer, otherwise it will be free'd and a NULL pointer is returned instead
 */
static inline TRACK* sound_DecodeOggVorbisTrack(TRACK *psTrack, PHYSFS_file* PHYSFS_fileHandle)
{
#ifndef WZ_NOSOUND
	ALenum		format;
	ALuint		buffer;
	struct OggVorbisDecoderState *decoder;
	soundDataBuffer	*soundBuffer;

	if ( !openal_initialized )
	{
		return NULL;
	}

	decoder = sound_CreateOggVorbisDecoder(PHYSFS_fileHandle, true);
	if (decoder == NULL)
	{
		debug(LOG_WARNING, "Failed to open audio file for decoding");
		free(psTrack);
		return NULL;
	}

	soundBuffer = sound_DecodeOggVorbis(decoder, 0);
	sound_DestroyOggVorbisDecoder(decoder);

	if (soundBuffer == NULL)
	{
		free(psTrack);
		return NULL;
	}

	if (soundBuffer->size == 0)
	{
		debug(LOG_WARNING, "sound_DecodeOggVorbisTrack: OggVorbis track is entirely empty after decoding");
// NOTE: I'm not entirely sure if a track that's empty after decoding should be
//       considered an error condition. Therefore I'll only error out on DEBUG
//       builds. (Returning NULL here __will__ result in a program termination.)
#ifdef DEBUG
		free(soundBuffer);
		free(psTrack);
		return NULL;
#endif
	}

	// Determine PCM data format
	format = (soundBuffer->channelCount == 1) ? AL_FORMAT_MONO16 : AL_FORMAT_STEREO16;

	// Create an OpenAL buffer and fill it with the decoded data
	alGenBuffers(1, &buffer);
	sound_GetError();
	alBufferData(buffer, format, soundBuffer->data, soundBuffer->size, soundBuffer->frequency);
	sound_GetError();

	free(soundBuffer);

	// save buffer name in track
	psTrack->iBufferName = buffer;
#endif

	return psTrack;
}
开发者ID:cybersphinx,项目名称:wzgraphicsmods,代码行数:65,代码来源:openal_track.c

示例2: sound_Play3DSample

//*
// =======================================================================================================================
// =======================================================================================================================
//
BOOL sound_Play3DSample( TRACK *psTrack, AUDIO_SAMPLE *psSample )
{
#ifndef WZ_NOSOUND
	ALfloat zero[3] = { 0.0, 0.0, 0.0 };
	ALfloat volume;
	ALint error;

	if (sfx3d_volume == 0.0)
	{
		return false;
	}

	volume = ((float)psTrack->iVol / 100.f);		// max range is 0-100
	psSample->fVol = volume;						// store results for later

	// If we can't hear it, then don't bother playing it.
	if (volume == 0.0f)
	{
		return false;
	}
	// Clear error codes
	alGetError();

	alGenSources( 1, &(psSample->iSample) );

	error = sound_GetError();
	if (error != AL_NO_ERROR)
	{
		/* FIXME: We run out of OpenAL sources very quickly, so we
		 * should handle the case where we've ran out of them.
		 * Currently we don't do this, causing some unpleasant side
		 * effects, e.g. crashing...
		 */
	}

	// HACK: this is a workaround for a bug in the 64bit implementation of OpenAL on GNU/Linux
	// The AL_PITCH value really should be 1.0.
	alSourcef(psSample->iSample, AL_PITCH, 1.001f);

	sound_SetObjectPosition( psSample );
	alSourcefv( psSample->iSample, AL_VELOCITY, zero );
	alSourcei( psSample->iSample, AL_BUFFER, psTrack->iBufferName );
	alSourcei( psSample->iSample, AL_LOOPING, (sound_SetupChannel(psSample)) ? AL_TRUE : AL_FALSE );

	// NOTE: this is only useful for debugging.
#ifdef DEBUG
	psSample->is3d = true;
	psSample->isLooping = sound_TrackLooped(psSample->iTrack)? AL_TRUE : AL_FALSE;
	memcpy(psSample->filename,psTrack->fileName, strlen(psTrack->fileName));
	psSample->filename[strlen(psTrack->fileName)]='\0';
#endif

	// Clear error codes
	alGetError();

	alSourcePlay( psSample->iSample );
	sound_GetError();
#endif
	return true;
}
开发者ID:cybersphinx,项目名称:wzgraphicsmods,代码行数:64,代码来源:openal_track.c

示例3: sound_DestroyStream

/** Destroy the given stream and release its associated resources. This function
 *  also handles calling of the \c onFinished callback function and closing of
 *  the PhysicsFS file handle.
 *  \param stream the stream to destroy
 */
static void sound_DestroyStream(AUDIO_STREAM *stream)
{
    ALint buffer_count;
    ALuint *buffers;
    ALint error;

    // Stop the OpenAL source from playing
    alSourceStop(stream->source);
    error = sound_GetError();

    if (error != AL_NO_ERROR)
    {
        // FIXME: We should really handle these errors.
    }

    // Retrieve the amount of buffers which were processed
    alGetSourcei(stream->source, AL_BUFFERS_PROCESSED, &buffer_count);
    error = sound_GetError();
    if (error != AL_NO_ERROR)
    {
        /* FIXME: We're leaking memory and resources here when bailing
         * out. But not doing so could cause stack overflows as a
         * result of the below alloca() call (due to buffer_count not
         * being properly initialised.
         */
        debug(LOG_SOUND, "alGetSourcei(AL_BUFFERS_PROCESSED) failed; bailing out...");
        return;
    }

    // Detach all buffers and retrieve their ID numbers
    buffers = (ALuint *)alloca(buffer_count * sizeof(ALuint));
    alSourceUnqueueBuffers(stream->source, buffer_count, buffers);
    sound_GetError();

    // Destroy all of these buffers
    alDeleteBuffers(buffer_count, buffers);
    sound_GetError();

    // Destroy the OpenAL source
    alDeleteSources(1, &stream->source);
    sound_GetError();

    // Destroy the sound decoder
    sound_DestroyOggVorbisDecoder(stream->decoder);

    // Now close the file
    PHYSFS_close(stream->fileHandle);

    // Now call the finished callback
    if (stream->onFinished)
    {
        stream->onFinished(stream->user_data);
    }

    // Free the memory used by this stream
    free(stream);
}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:62,代码来源:openal_track.cpp

示例4: sound_FreeTrack

void sound_FreeTrack( TRACK *psTrack )
{
#ifndef WZ_NOSOUND
	alDeleteBuffers(1, &psTrack->iBufferName);
	sound_GetError();
#endif
}
开发者ID:cybersphinx,项目名称:wzgraphicsmods,代码行数:7,代码来源:openal_track.c

示例5: sound_ResumeSample

//*
// =======================================================================================================================
// =======================================================================================================================
//
void sound_ResumeSample( AUDIO_SAMPLE *psSample )
{
#ifndef WZ_NOSOUND
	alSourcePlay( psSample->iSample );
	sound_GetError();
#endif
}
开发者ID:cybersphinx,项目名称:wzgraphicsmods,代码行数:11,代码来源:openal_track.c

示例6: sound_SetPlayerPos

void sound_SetPlayerPos(Vector3f pos)
{
#ifndef WZ_NOSOUND
	alListener3f(AL_POSITION, pos.x, pos.y, pos.z);
	sound_GetError();
#endif
}
开发者ID:cybersphinx,项目名称:wzgraphicsmods,代码行数:7,代码来源:openal_track.c

示例7: sound_GetStreamVolume

/** Retrieve the playing volume of the given stream.
 *
 *  @param stream the stream to retrieve the volume for.
 *
 *  @return a floating point value between 0.f and 1.f, representing this
 *          stream's volume.
 */
float sound_GetStreamVolume(const AUDIO_STREAM *stream)
{
    ALfloat volume;
    alGetSourcef(stream->source, AL_GAIN, &volume);
    sound_GetError();

    return volume;
}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:15,代码来源:openal_track.cpp

示例8: sound_SetStreamVolume

/** Set the playing volume of the given stream.
 *
 *  @param stream the stream to change the volume for.
 *  @param volume a floating point value between 0.f and 1.f, to use as this
 *                @c stream's volume.
 */
void sound_SetStreamVolume(AUDIO_STREAM* stream, float volume)
{
	stream->volume = volume;
#if !defined(WZ_NOSOUND)
	alSourcef(stream->source, AL_GAIN, stream->volume);
	sound_GetError();
#endif
}
开发者ID:cybersphinx,项目名称:wzgraphicsmods,代码行数:14,代码来源:openal_track.c

示例9: sound_SetObjectPosition

//*
// =======================================================================================================================
// Compute the sample's volume relative to AL_POSITION.
// =======================================================================================================================
//
void sound_SetObjectPosition(AUDIO_SAMPLE *psSample)
{
#ifndef WZ_NOSOUND
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// coordinates
	float	listenerX, listenerY, listenerZ, dX, dY, dZ;

	// calculation results
	float	distance, gain;
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

	// only set it when we have a valid sample
	if (!psSample)
	{
		return;
	}

	// compute distance
	alGetListener3f( AL_POSITION, &listenerX, &listenerY, &listenerZ );
	sound_GetError();
	dX = psSample->x  - listenerX; // distances on all axis
	dY = psSample->y - listenerY;
	dZ = psSample->z - listenerZ;
	distance = sqrtf(dX * dX + dY * dY + dZ * dZ); // Pythagorean theorem

	// compute gain
	gain = (1.0f - (distance * ATTENUATION_FACTOR)) * psSample->fVol * sfx3d_volume;
	// max volume
	if (gain > 1.0f)
	{
		gain = 1.0f;
	}
	if (gain < 0.0f)
	{
		// this sample can't be heard right now
		gain = 0.0f;
	}
	alSourcef( psSample->iSample, AL_GAIN, gain );

	// the alSource3i variant would be better, if it wouldn't provide linker errors however
	alSource3f( psSample->iSample, AL_POSITION, (float)psSample->x,(float)psSample->y,(float)psSample->z );
	sound_GetError();
#endif
	return;
}
开发者ID:cybersphinx,项目名称:wzgraphicsmods,代码行数:50,代码来源:openal_track.c

示例10: sound_ResumeStream

/** Resumes playing of a stream that's paused by means of sound_PauseStream().
 *  \param stream the stream to resume playing for
 */
void sound_ResumeStream(AUDIO_STREAM *stream)
{
    ALint state;

    // To be sure we won't go mutilating this OpenAL source, check wether
    // it's paused first.
    alGetSourcei(stream->source, AL_SOURCE_STATE, &state);
    sound_GetError();

    if (state != AL_PAUSED)
    {
        return;
    }

    // Resume playing of this OpenAL source
    alSourcePlay(stream->source);
    sound_GetError();
}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:21,代码来源:openal_track.cpp

示例11: sound_PauseStream

/** Pauses playing of this stream until playing is resumed with
 *  sound_ResumeStream() or completely stopped with sound_StopStream().
 *  \param stream the stream to pause playing for
 */
void sound_PauseStream(AUDIO_STREAM *stream)
{
	ALint state;

	// To be sure we won't go mutilating this OpenAL source, check whether
	// it's playing first.
	alGetSourcei(stream->source, AL_SOURCE_STATE, &state);
	sound_GetError();

	if (state != AL_PLAYING)
	{
		return;
	}

	// Pause playing of this OpenAL source
	alSourcePause(stream->source);
	sound_GetError();
}
开发者ID:Warzone2100,项目名称:warzone2100,代码行数:22,代码来源:openal_track.cpp

示例12: sound_StopStream

/** Stops the current stream from playing.
 *  \param stream the stream to stop
 *  \post The stopped stream will be destroyed on the next invocation of
 *        sound_UpdateStreams(). So calling this function will result in the
 *        \c onFinished callback being called and the \c stream pointer becoming
 *        invalid.
 */
void sound_StopStream(AUDIO_STREAM *stream)
{
    assert(stream != NULL);

    alGetError();	// clear error codes
    // Tell OpenAL to stop playing on the given source
    alSourceStop(stream->source);
    sound_GetError();
}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:16,代码来源:openal_track.cpp

示例13: sound_SetPlayerOrientation

/**
 * Sets the player's orientation to use for sound
 * \param angle the angle in radians
 @NOTE the up vector is swapped because of qsound idiosyncrasies
 @FIXME we don't use qsound, but it still is in qsound 'format'...
*/
void sound_SetPlayerOrientation(float angle)
{
    const ALfloat ori[6] =
    {
        -sinf(angle), cosf(angle), 0.0f,	// forward (at) vector
        0.0f, 0.0f, 1.0f,					// up vector
    };
    alListenerfv(AL_ORIENTATION, ori);
    sound_GetError();
}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:16,代码来源:openal_track.cpp

示例14: sound_SetPlayerOrientationVector

/**
 * Sets the player's orientation to use for sound
 * \param forward forward pointing vector
 * \param up      upward pointing vector
 */
void sound_SetPlayerOrientationVector(Vector3f forward, Vector3f up)
{
    const ALfloat ori[6] =
    {
        forward.x, forward.y, forward.z,
        up.x,      up.y,      up.z,
    };

    alListenerfv(AL_ORIENTATION, ori);
    sound_GetError();
}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:16,代码来源:openal_track.cpp

示例15: sound_SampleIsFinished

//*
// =======================================================================================================================
// =======================================================================================================================
//
bool sound_SampleIsFinished(AUDIO_SAMPLE *psSample)
{
    ALenum	state;

    alGetSourcei(psSample->iSample, AL_SOURCE_STATE, &state);
    sound_GetError(); // check for an error and clear the error state for later on in this function
    if (state == AL_PLAYING || state == AL_PAUSED)
    {
        return false;
    }

    if (psSample->iSample != (ALuint)AL_INVALID)
    {
        alDeleteSources(1, &(psSample->iSample));
        sound_GetError();
        psSample->iSample = AL_INVALID;
    }

    return true;
}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:24,代码来源:openal_track.cpp


注:本文中的sound_GetError函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。