Cocos2d-X 简单音频引擎的音量设置有问题吗?
Problems to set volume of Cocos2d-X Simple Audio Engine?
我在 Marmalade SDK 7.8.0 上使用 Cocos2d-X 2.2.6 开发游戏,我在设置 Cocos Denshion 简单音频引擎的音效音量时遇到了一些问题。
我的代码是这样的:
void AudioHelper::init()
{
s3eResult result;
context = GameContext::getInstance();
s3eSoundSetInt(S3E_SOUND_DEFAULT_FREQ, 44100);
audioEngine = SimpleAudioEngine::sharedEngine();
preloadSoundEffects();
setVolume(context->getSoundVolume());
}
void AudioHelper::preloadSoundEffects()
{
unsigned int i;
CCArray *keysArray;
CCString *key;
const CCString *sound;
keysArray = soundEffects->allKeys();
for (i = 0; i < keysArray->count(); i++)
{
key = (CCString *) keysArray->objectAtIndex(i);
sound = soundEffects->valueForKey(key->getCString());
audioEngine->preloadEffect(sound->getCString());
}
}
void AudioHelper::setVolume(int volumeLevel)
{
float volume;
// Note: there are 6 volume levels in my game, they go from
// 0 (max volume) to 5 (no sound).
volume = 1 - volumeLevel / 5.0;
audioEngine->setEffectsVolume(volume);
}
void AudioHelper::playSoundEffect(const char *effectKey)
{
const CCString *sound;
int volume;
sound = soundEffects->valueForKey(effectKey);
if (sound != NULL)
audioEngine->playEffect(sound->getCString());
}
问题是当我调用setVolume方法时,音效音量没有改变,除非我将音量级别参数设置为5(没有声音)。发生这种情况时,不会播放任何声音(如预期的那样)。
我做错了什么?
s3eSound
设置音量时期望值介于 0-255 之间。
您可以通过调用追踪当前成交量:
s3eSoundGetInt(S3E_SOUND_VOLUME)
每次将音量设置为特定值并查看 S3E_SOUND_VOLUME
是否按预期变化。
我注意到你使用:
volume = 1 - volumeLevel / 5.0;
如果提供从 1 到 5 的输入值,这将导致 1 到 0 之间的值递减 0.20。
这些值要么设置错误,要么被简单音频引擎错误地转换为 s3eSound
值。
找出两者将使您更深入地了解可能出了什么问题。
您是否在此代码中记录了实际值?
void AudioHelper::setVolume(int volumeLevel)
{
float volume;
// Note: there are 6 volume levels in my game, they go from
// 0 (max volume) to 5 (no sound).
volume = 1 - volumeLevel / 5.0;
audioEngine->setEffectsVolume(volume);
}
您不能以这种方式混合浮点数和整数计算。 float volume
这里无论如何都是 1 或 0,因为您使用 volumeLevel
作为 int 类型。您的代码应如下所示:
void AudioHelper::setVolume(int volumeLevel)
{
float volume;
// Note: there are 6 volume levels in my game, they go from
// 0 (max volume) to 5 (no sound).
volume = 1.0f - (float)volumeLevel / 5.0f;
audioEngine->setEffectsVolume(volume);
}
还要考虑到在 win 平台上使用 CocosDenshion 有一些限制(那里没有音量变化)。
我在 Marmalade SDK 7.8.0 上使用 Cocos2d-X 2.2.6 开发游戏,我在设置 Cocos Denshion 简单音频引擎的音效音量时遇到了一些问题。
我的代码是这样的:
void AudioHelper::init()
{
s3eResult result;
context = GameContext::getInstance();
s3eSoundSetInt(S3E_SOUND_DEFAULT_FREQ, 44100);
audioEngine = SimpleAudioEngine::sharedEngine();
preloadSoundEffects();
setVolume(context->getSoundVolume());
}
void AudioHelper::preloadSoundEffects()
{
unsigned int i;
CCArray *keysArray;
CCString *key;
const CCString *sound;
keysArray = soundEffects->allKeys();
for (i = 0; i < keysArray->count(); i++)
{
key = (CCString *) keysArray->objectAtIndex(i);
sound = soundEffects->valueForKey(key->getCString());
audioEngine->preloadEffect(sound->getCString());
}
}
void AudioHelper::setVolume(int volumeLevel)
{
float volume;
// Note: there are 6 volume levels in my game, they go from
// 0 (max volume) to 5 (no sound).
volume = 1 - volumeLevel / 5.0;
audioEngine->setEffectsVolume(volume);
}
void AudioHelper::playSoundEffect(const char *effectKey)
{
const CCString *sound;
int volume;
sound = soundEffects->valueForKey(effectKey);
if (sound != NULL)
audioEngine->playEffect(sound->getCString());
}
问题是当我调用setVolume方法时,音效音量没有改变,除非我将音量级别参数设置为5(没有声音)。发生这种情况时,不会播放任何声音(如预期的那样)。
我做错了什么?
s3eSound
设置音量时期望值介于 0-255 之间。
您可以通过调用追踪当前成交量:
s3eSoundGetInt(S3E_SOUND_VOLUME)
每次将音量设置为特定值并查看 S3E_SOUND_VOLUME
是否按预期变化。
我注意到你使用:
volume = 1 - volumeLevel / 5.0;
如果提供从 1 到 5 的输入值,这将导致 1 到 0 之间的值递减 0.20。
这些值要么设置错误,要么被简单音频引擎错误地转换为 s3eSound
值。
找出两者将使您更深入地了解可能出了什么问题。
您是否在此代码中记录了实际值?
void AudioHelper::setVolume(int volumeLevel)
{
float volume;
// Note: there are 6 volume levels in my game, they go from
// 0 (max volume) to 5 (no sound).
volume = 1 - volumeLevel / 5.0;
audioEngine->setEffectsVolume(volume);
}
您不能以这种方式混合浮点数和整数计算。 float volume
这里无论如何都是 1 或 0,因为您使用 volumeLevel
作为 int 类型。您的代码应如下所示:
void AudioHelper::setVolume(int volumeLevel)
{
float volume;
// Note: there are 6 volume levels in my game, they go from
// 0 (max volume) to 5 (no sound).
volume = 1.0f - (float)volumeLevel / 5.0f;
audioEngine->setEffectsVolume(volume);
}
还要考虑到在 win 平台上使用 CocosDenshion 有一些限制(那里没有音量变化)。