本文整理汇总了C++中CAudio::EndSoundObject方法的典型用法代码示例。如果您正苦于以下问题:C++ CAudio::EndSoundObject方法的具体用法?C++ CAudio::EndSoundObject怎么用?C++ CAudio::EndSoundObject使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CAudio
的用法示例。
在下文中一共展示了CAudio::EndSoundObject方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Start
// Volume 0-I2X (1)
int CAudioChannel::Start (short nSound, int nSoundClass, fix nVolume, int nPan, int bLooping,
int nLoopStart, int nLoopEnd, int nSoundObj, int nSpeed,
const char *pszWAV, CFixVector* vPos)
{
CSoundSample* soundP = NULL;
int bPersistent = (nSoundObj > -1) || bLooping || (nVolume > I2X (1));
if (!(pszWAV && *pszWAV && gameOpts->sound.bUseSDLMixer)) {
if (nSound < 0)
return -1;
if (!gameData.pig.sound.nSoundFiles [gameStates.sound.bD1Sound])
return -1;
soundP = gameData.pig.sound.sounds [gameStates.sound.bD1Sound] + nSound % gameData.pig.sound.nSoundFiles [gameStates.sound.bD1Sound];
if (!(soundP->data [soundP->bCustom].Buffer () && soundP->nLength [soundP->bCustom]))
return -1;
}
if (m_info.bPlaying) {
m_info.bPlaying = 0;
if (m_info.nSoundObj > -1)
audio.EndSoundObject (m_info.nSoundObj);
if (soundQueue.Channel () == audio.FreeChannel ())
soundQueue.End ();
}
#if USE_OPENAL
if (m_info.source == 0xFFFFFFFF) {
CFloatVector fPos;
DigiALError ();
alGenSources (1, &m_info.source);
if (DigiALError ())
return -1;
alSourcei (m_info.source, AL_BUFFER, soundP->buffer);
if (DigiALError ())
return -1;
alSourcef (m_info.source, AL_GAIN, ((nVolume < I2X (1)) ? X2F (nVolume) : 1) * 2 * X2F (m_info.nVolume));
alSourcei (m_info.source, AL_LOOPING, (ALuint) ((nSoundObj > -1) || bLooping || (nVolume > I2X (1))));
fPos.Assign (vPos ? *vPos : OBJECTS [LOCALPLAYER.nObject].nPosition.vPos);
alSourcefv (m_info.source, AL_POSITION, reinterpret_cast<ALfloat*> (fPos));
alSource3f (m_info.source, AL_VELOCITY, 0, 0, 0);
alSource3f (m_info.source, AL_DIRECTION, 0, 0, 0);
if (DigiALError ())
return -1;
alSourcePlay (m_info.source);
if (DigiALError ())
return -1;
}
#endif
#if USE_SDL_MIXER
if (gameOpts->sound.bUseSDLMixer) {
if (m_info.mixChunkP) {
Mix_HaltChannel (m_info.nChannel);
if (m_info.bBuiltIn)
m_info.bBuiltIn = 0;
else
Mix_FreeChunk (m_info.mixChunkP);
m_info.mixChunkP = NULL;
}
}
#endif
if (m_info.bResampled) {
m_info.sample.Destroy ();
m_info.bResampled = 0;
}
#if USE_SDL_MIXER
if (gameOpts->sound.bUseSDLMixer) {
//resample to two channels
m_info.nChannel = audio.FreeChannel ();
if (pszWAV && *pszWAV) {
if (!(m_info.mixChunkP = LoadAddonSound (pszWAV, &m_info.bBuiltIn)))
return -1;
}
else {
int l;
if (soundP->bHires) {
l = soundP->nLength [soundP->bCustom];
m_info.sample.SetBuffer (soundP->data [soundP->bCustom].Buffer (), 1, l);
m_info.mixChunkP = Mix_QuickLoad_WAV (reinterpret_cast<Uint8*> (m_info.sample.Buffer ()));
}
else {
if (gameOpts->sound.bHires [0])
return -1; //cannot mix hires and standard sounds
l = Resample (soundP, gameStates.sound.bD1Sound && (gameOpts->sound.digiSampleRate != SAMPLE_RATE_11K), songManager.MP3 ());
if (l <= 0)
return -1;
if (nSpeed < I2X (1))
l = Speedup (soundP, nSpeed);
#if MAKE_WAV
m_info.mixChunkP = Mix_QuickLoad_WAV (reinterpret_cast<Uint8*> (m_info.sample.Buffer ()));
#else
m_info.mixChunkP = Mix_QuickLoad_RAW (reinterpret_cast<Uint8*> (m_info.sample.Buffer ()), l);
#endif
}
}
Mix_VolPan (m_info.nChannel, nVolume, nPan);
Mix_PlayChannel (m_info.nChannel, m_info.mixChunkP, bLooping ? -1 : nLoopEnd - nLoopStart);
}
else
#else
if (pszWAV && *pszWAV)
//.........这里部分代码省略.........