您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ sound_GetError函数代码示例

51自学网 2021-06-03 08:07:15
  C++
这篇教程C++ sound_GetError函数代码示例写得很实用,希望能帮到您。

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

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


示例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,


示例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,


示例4: sound_FreeTrack

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


示例5: sound_ResumeSample

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


示例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,


示例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,


示例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,


示例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,


示例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,


示例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,


示例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,


示例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,


示例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,


示例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,


示例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,


示例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,


示例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,


示例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,


示例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,


示例21: sound_DestroyIteratedSample

/** Deletes the given sample and updates the /c previous and /c current iterators *  /param previous iterator to the previous sample in the list *  /param sample iterator to the current sample in the list which you want to delete */static void sound_DestroyIteratedSample(SAMPLE_LIST **previous, SAMPLE_LIST **sample){    // If an OpenAL source is associated with this sample, release it    if ((*sample)->curr->iSample != (ALuint)AL_INVALID)    {        alDeleteSources(1, &(*sample)->curr->iSample);        sound_GetError();    }    // Do the cleanup of this sample    sound_FinishedCallback((*sample)->curr);    // Remove the sample from the list    sound_RemoveSample(*previous, *sample);    // Free it    free(*sample);    // Get a pointer to the next node, the previous pointer doesn't change    *sample = (*previous != NULL) ? (*previous)->next : active_samples;}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:24,


示例22: sound_SetPlayerPos

void sound_SetPlayerPos(Vector3f pos){    alListener3f(AL_POSITION, pos.x, pos.y, pos.z);    sound_GetError();}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:5,


示例23: sound_InitLibrary

//*// =======================================================================================================================// =======================================================================================================================//bool sound_InitLibrary(void){    int err;    const ALfloat listenerVel[3] = { 0.0, 0.0, 0.0 };    const ALfloat listenerOri[6] = { 0.0, 0.0, 1.0, 0.0, 1.0, 0.0 };    char buf[512];    const ALCchar *deviceName;#if 0    // This code is disabled because enumerating devices apparently crashes PulseAudio on Fedora12    /* Get the available devices and print them.     * Devices are separated by NUL chars ('/0') and the list of devices is     * terminated by two NUL chars.     */    deviceName = alcGetString(NULL, ALC_DEVICE_SPECIFIER);    while (deviceName != NULL && *deviceName != '/0')    {        debug(LOG_SOUND, "available OpenAL device(s) are: %s", deviceName);        deviceName += strlen(deviceName) + 1;    }#endif#ifdef WZ_OS_WIN    /* HACK: Select the "software" OpenAL device on Windows because it     *       provides 256 sound sources (unlike most Creative's default     *       which provides only 16), causing our lack of source-management     *       to be significantly less noticeable.     */    device = alcOpenDevice("Generic Software");    // If the software device isn't available, fall back to default    if (!device)#endif    {        // Open default device        device = alcOpenDevice(NULL);    }    if (!device)    {        debug(LOG_ERROR, "Couldn't open audio device.");        return false;    }    // Print current device name and add it to dump info    deviceName = alcGetString(device, ALC_DEVICE_SPECIFIER);    debug(LOG_SOUND, "Current audio device: %s", deviceName);    ssprintf(buf, "OpenAL Device Name: %s", deviceName);    addDumpInfo(buf);    context = alcCreateContext(device, NULL);		//NULL was contextAttributes    if (!context)    {        debug(LOG_ERROR, "Couldn't open audio context.");        return false;    }    alcMakeContextCurrent(context);    err = sound_GetContextError(device);    if (err != ALC_NO_ERROR)    {        debug(LOG_ERROR, "Couldn't initialize audio context: %s", alcGetString(device, err));        return false;    }    // Dump Open AL device info (depends on context)    // to the crash handler for the dump file and debug log    ssprintf(buf, "OpenAL Vendor: %s", alGetString(AL_VENDOR));    addDumpInfo(buf);    debug(LOG_SOUND, "%s", buf);    ssprintf(buf, "OpenAL Version: %s", alGetString(AL_VERSION));    addDumpInfo(buf);    debug(LOG_SOUND, "%s", buf);    ssprintf(buf, "OpenAL Renderer: %s", alGetString(AL_RENDERER));    addDumpInfo(buf);    debug(LOG_SOUND, "%s", buf);    ssprintf(buf, "OpenAL Extensions: %s", alGetString(AL_EXTENSIONS));    addDumpInfo(buf);    debug(LOG_SOUND, "%s", buf);    openal_initialized = true;    // Clear Error Codes    alGetError();    alcGetError(device);    alListener3f(AL_POSITION, 0.f, 0.f, 0.f);    alListenerfv(AL_VELOCITY, listenerVel);    alListenerfv(AL_ORIENTATION, listenerOri);    alDistanceModel(AL_NONE);    sound_GetError();//.........这里部分代码省略.........
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:101,


示例24: void

/** Plays the audio data from the given file *  /param fileHandle,volume,onFinished,user_data see sound_PlayStream() *  /param streamBufferSize the size to use for the decoded audio buffers *  /param buffer_count the amount of audio buffers to use *  /see sound_PlayStream() for details about the rest of the function *       parameters and other details. */AUDIO_STREAM *sound_PlayStreamWithBuf(PHYSFS_file *fileHandle, float volume, void (*onFinished)(void *), void *user_data, size_t streamBufferSize, unsigned int buffer_count){    AUDIO_STREAM *stream;    ALuint       *buffers = (ALuint *)alloca(sizeof(ALuint) * buffer_count);    ALint error;    unsigned int i;    if (!openal_initialized)    {        debug(LOG_WARNING, "OpenAL isn't initialized, not creating an audio stream");        return NULL;    }    stream = (AUDIO_STREAM *)malloc(sizeof(AUDIO_STREAM));    if (stream == NULL)    {        debug(LOG_FATAL, "sound_PlayStream: Out of memory");        abort();        return NULL;    }    // Clear error codes    alGetError();    // Retrieve an OpenAL sound source    alGenSources(1, &(stream->source));    error = sound_GetError();    if (error != AL_NO_ERROR)    {        // Failed to create OpenAL sound source, so bail out...        debug(LOG_SOUND, "alGenSources failed, most likely out of sound sources");        free(stream);        return NULL;    }    stream->fileHandle = fileHandle;    stream->decoder = sound_CreateOggVorbisDecoder(stream->fileHandle, false);    if (stream->decoder == NULL)    {        debug(LOG_ERROR, "sound_PlayStream: Failed to open audio file for decoding");        free(stream);        return NULL;    }    stream->volume = volume;    stream->bufferSize = streamBufferSize;    alSourcef(stream->source, AL_GAIN, stream->volume);    // 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(stream->source, AL_PITCH, 1.001f);    // Create some OpenAL buffers to store the decoded data in    alGenBuffers(buffer_count, buffers);    sound_GetError();    // Fill some buffers with audio data    for (i = 0; i < buffer_count; ++i)    {        // Decode some audio data        soundDataBuffer *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;            // Copy the audio data into one of OpenAL's own buffers            alBufferData(buffers[i], format, soundBuffer->data, soundBuffer->size, soundBuffer->frequency);            sound_GetError();            // Clean up our memory            free(soundBuffer);        }        else        {            // If no data has been decoded we're probably at the end of our            // stream. So cleanup the excess stuff here.            // First remove the data buffer itself            free(soundBuffer);            // Then remove OpenAL's buffers            alDeleteBuffers(buffer_count - i, &buffers[i]);            sound_GetError();            break;        }    }//.........这里部分代码省略.........
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:101,


示例25: sound_Play2DSample

//*// =======================================================================================================================// =======================================================================================================================//bool sound_Play2DSample(TRACK *psTrack, AUDIO_SAMPLE *psSample, bool bQueued){    ALfloat zero[3] = { 0.0, 0.0, 0.0 };    ALfloat volume;    ALint error;    if (sfx_volume == 0.0)    {        return false;    }    volume = ((float)psTrack->iVol / 100.0f);		// each object can have OWN volume!    psSample->fVol = volume;						// save computed volume    volume *= sfx_volume;							// and now take into account the Users sound Prefs.    // We can't hear it, so don't bother creating 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...         */    }    alSourcef(psSample->iSample, AL_PITCH, 1.0f);    alSourcef(psSample->iSample, AL_GAIN, volume);    alSourcefv(psSample->iSample, AL_POSITION, zero);    alSourcefv(psSample->iSample, AL_VELOCITY, zero);    alSourcei(psSample->iSample, AL_BUFFER, psTrack->iBufferName);    alSourcei(psSample->iSample, AL_SOURCE_RELATIVE, AL_TRUE);    alSourcei(psSample->iSample, AL_LOOPING, (sound_SetupChannel(psSample)) ? AL_TRUE : AL_FALSE);    // NOTE: this is only useful for debugging.#ifdef DEBUG    psSample->is3d = false;    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();    if (bQueued)    {        current_queue_sample = psSample->iSample;    }    else if (current_queue_sample == psSample->iSample)    {        current_queue_sample = -1;    }    return true;}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:71,


示例26: sound_FreeTrack

void sound_FreeTrack(TRACK *psTrack){    alDeleteBuffers(1, &psTrack->iBufferName);    sound_GetError();}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:5,


示例27: sound_PauseSample

//*// =======================================================================================================================// =======================================================================================================================//void sound_PauseSample(AUDIO_SAMPLE *psSample){    alSourcePause(psSample->iSample);    sound_GetError();}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:9,


示例28: sound_Update

void sound_Update(){    SAMPLE_LIST *node = active_samples;    SAMPLE_LIST *previous = NULL;    ALCenum err;    ALfloat gain;    if (!openal_initialized)    {        return;    }    // Update all streaming audio    sound_UpdateStreams();    while (node != NULL)    {        ALenum state, err;        // query what the gain is for this sample        alGetSourcef(node->curr->iSample, AL_GAIN, &gain);        err = sound_GetError();        // if gain is 0, then we can't hear it, so we kill it.        if (gain == 0.0f)        {            sound_DestroyIteratedSample(&previous, &node);            continue;        }        //ASSERT(alIsSource(node->curr->iSample), "Not a valid source!");        alGetSourcei(node->curr->iSample, 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 continue with the next sample.        err = sound_GetError();        if (err != AL_NO_ERROR)        {            // Make sure to invoke the "finished" callback            sound_FinishedCallback(node->curr);            // Destroy this object and move to the next object            sound_DestroyIteratedSample(&previous, &node);            continue;        }        switch (state)        {        case AL_PLAYING:        case AL_PAUSED:            // If we haven't finished playing yet, just            // continue with the next item in the list.            // sound_SetObjectPosition(i->curr->iSample, i->curr->x, i->curr->y, i->curr->z);            // Move to the next object            previous = node;            node = node->next;            break;        // NOTE: if it isn't playing | paused, then it is most likely either done        // or a error.  In either case, we want to kill the sample in question.        default:            sound_DestroyIteratedSample(&previous, &node);            break;        }    }    // Reset the current error state    alcGetError(device);    alcProcessContext(context);    err = sound_GetContextError(device);    if (err != ALC_NO_ERROR)    {        debug(LOG_ERROR, "Error while processing audio context: %s", alGetString(err));    }}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:81,


示例29: 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;    alSourcef(stream->source, AL_GAIN, stream->volume);    sound_GetError();}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:12,


示例30: sound_ResumeSample

//*// =======================================================================================================================// =======================================================================================================================//void sound_ResumeSample(AUDIO_SAMPLE *psSample){    alSourcePlay(psSample->iSample);    sound_GetError();}
开发者ID:RodgerNO1,项目名称:warzone2100,代码行数:9,



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


C++ sound_init函数代码示例
C++ soundLock函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。