我用这个:
err = channel->setVolume(someVolumeBetween0and1);
即使 err 为 FMOD_OK,音量也不会改变。难道我做错了什么?有没有办法改变声音(通道)的音量?音量是否有其他范围而不是 [0, 1]?
谢谢!
编辑:我在此之后使用 setVolume:
err = soundSystem->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);
我在 FMOD 手册中找到了一些关于音量的内容:“播放声音时,它将使用声音的默认频率、音量、声像、电平和优先级……要在声音被听到之前更改通道属性,请启动暂停的通道将 paused 标志设置为 true,并调用相关的基于频道的函数。然后,使用 Channel::setPaused 取消暂停频道。 "
所以,正确的代码应该是这样的:
err = soundSystem->playSound(FMOD_CHANNEL_FREE, sound, true, &channel);
err = channel->setVolume(someVolumeBetween0and1);
err = channel->setPaused(false);
或者,你也可以试试这个:
err = soundSystem->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);
err = channel->setVolume(someVolumeBetween0and1);
更改 setVolume 和 playSound 的顺序,它适用于我的项目
我不确定 100%,但在设置音量之前可能需要停止/暂停声音以解锁它并在设置音量后恢复播放声音。
其他要检查的事情可能是声音正在正确的频道上播放(或者您正在正确的频道上设置音量)。声音是否被锁定?声音是否是可能覆盖音量的通道组的一部分(尽管 FMOD 文档说通道组应该缩放,而不是覆盖)?
我在使用 FMOD 时遇到了这个问题,并且走了很多同样的路。我试着暂停声音。我想知道是不是因为我的声音被循环播放了。
最后,这完全是一个应用程序问题。我没有使用正确的通道对象。
无需暂停即可更改音量。播放声音最初暂停,然后将音量设置为非默认值,然后取消暂停声音,是为了避免以默认音量短暂播放该声音。
试试这个
result = channle->setPaused(false);//after you set volume