本文整理汇总了C++中sound_GetError函数的典型用法代码示例。如果您正苦于以下问题:C++ sound_GetError函数的具体用法?C++ sound_GetError怎么用?C++ sound_GetError使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了sound_GetError函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的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
示例16: 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)
{
#if !defined(WZ_NOSOUND)
ALfloat volume;
alGetSourcef(stream->source, AL_GAIN, &volume);
sound_GetError();
return volume;
#else
return 1.f;
#endif
}
开发者ID:cybersphinx,项目名称:wzgraphicsmods,代码行数:19,代码来源:openal_track.c
示例17: sound_StopSample
//*
// =======================================================================================================================
// =======================================================================================================================
//
void sound_StopSample(AUDIO_SAMPLE *psSample)
{
if (psSample->iSample == (ALuint)SAMPLE_NOT_ALLOCATED)
{
debug(LOG_SOUND, "sound_StopSample: sample number (%u) out of range, we probably have run out of available OpenAL sources", psSample->iSample);
return;
}
alGetError(); // clear error codes
// Tell OpenAL to stop playing the given sample
alSourceStop(psSample->iSample);
sound_GetError();
}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:16,代码来源:openal_track.cpp
示例18: sound_QueueSamplePlaying
//*
// =======================================================================================================================
// =======================================================================================================================
//
bool sound_QueueSamplePlaying(void)
{
ALenum state;
if (!openal_initialized)
{
return false;
}
if (current_queue_sample == (ALuint)AL_INVALID)
{
return false;
}
alGetSourcei(current_queue_sample, AL_SOURCE_STATE, &state);
// Check whether an error occurred while retrieving the state.
// If one did, the state returned is useless. So instead of
// using it return false.
if (sound_GetError() != AL_NO_ERROR)
{
return false;
}
if (state == AL_PLAYING)
{
return true;
}
if (current_queue_sample != (ALuint)AL_INVALID)
{
SAMPLE_LIST *node = active_samples;
SAMPLE_LIST *previous = NULL;
// We need to remove it from the queue of actively played samples
while (node != NULL)
{
if (node->curr->iSample == current_queue_sample)
{
sound_DestroyIteratedSample(&previous, &node);
current_queue_sample = AL_INVALID;
return false;
}
previous = node;
if (node)
{
node = node->next;
}
}
debug(LOG_ERROR, "Sample %u not deleted because it wasn't in the active queue!", current_queue_sample);
current_queue_sample = AL_INVALID;
}
return false;
}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:57,代码来源:openal_track.cpp
示例19: sound_UpdateStream
/** Update the given stream by making sure its buffers remain full
* \param stream the stream to update
* \return true when the stream is still playing, false when it has stopped
*/
static bool sound_UpdateStream(AUDIO_STREAM *stream)
{
ALint state, buffer_count;
alGetSourcei(stream->source, AL_SOURCE_STATE, &state);
sound_GetError();
if (state != AL_PLAYING && state != AL_PAUSED)
{
return false;
}
// Retrieve the amount of buffers which were processed and need refilling
alGetSourcei(stream->source, AL_BUFFERS_PROCESSED, &buffer_count);
sound_GetError();
// Refill and reattach all buffers
for (; buffer_count != 0; --buffer_count)
{
soundDataBuffer *soundBuffer;
ALuint buffer;
// Retrieve the buffer to work on
alSourceUnqueueBuffers(stream->source, 1, &buffer);
sound_GetError();
// Decode some data to stuff in our buffer
soundBuffer = sound_DecodeOggVorbis(stream->decoder, stream->bufferSize);
// If we actually decoded some data
if (soundBuffer && soundBuffer->size > 0)
{
// Determine PCM data format
ALenum format = (soundBuffer->channelCount == 1) ? AL_FORMAT_MONO16 : AL_FORMAT_STEREO16;
// Insert the data into the buffer
alBufferData(buffer, format, soundBuffer->data, soundBuffer->size, soundBuffer->frequency);
sound_GetError();
// Reattach the buffer to the source
alSourceQueueBuffers(stream->source, 1, &buffer);
sound_GetError();
}
else
{
// If no data has been decoded we're probably at the end of our
// stream. So cleanup this buffer.
// Then remove OpenAL's buffer
alDeleteBuffers(1, &buffer);
sound_GetError();
}
// Now remove the data buffer itself
free(soundBuffer);
}
return true;
}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:63,代码来源:openal_track.cpp
示例20: sound_isStreamPlaying
/** Checks if the stream is playing.
* \param stream the stream to check
* \post true if playing, false otherwise.
*
*/
bool sound_isStreamPlaying(AUDIO_STREAM *stream)
{
ALint state;
if (stream)
{
alGetSourcei(stream->source, AL_SOURCE_STATE, &state);
sound_GetError();
if (state == AL_PLAYING)
{
return true;
}
}
return false;
}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:20,代码来源:openal_track.cpp
注:本文中的sound_GetError函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论