【问题标题】:FMOD channel setVolume doesn't workFMOD 通道 setVolume 不起作用
【发布时间】:2019-04-29 17:49:14
【问题描述】:

我用这个:

err = channel->setVolume(someVolumeBetween0and1);

即使 err 为 FMOD_OK,音量也不会改变。难道我做错了什么?有没有办法改变声音(通道)的音量?除了 [0, 1] 还有其他音量范围吗?

谢谢!

编辑:我在此之后使用 setVolume:

err = soundSystem->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);

【问题讨论】:

  • 我觉得你需要多写一点代码,设置音量是很基本的。您是否尝试过使用 setVolume 调用修改 playsound 示例?这与您的代码有何不同?

标签: audio fmod


【解决方案1】:

我在 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);

【讨论】:

    【解决方案2】:

    更改 setVolume 和 playSound 的顺序,它在我的项目中有效

    【讨论】:

      【解决方案3】:

      我不能 100% 确定,但在设置音量之前可能需要停止/暂停声音才能解锁并在设置音量后继续播放声音。

      要检查的其他事项可能是声音正在正确的频道上播放(或者您正在正确的频道上设置音量)。声音是否被锁定?声音是否是可能覆盖音量的通道组的一部分(尽管 FMOD 文档说通道组应该缩放,而不是覆盖)?

      【讨论】:

        【解决方案4】:

        我在使用 FMOD 时遇到了这个问题,并且走了很多同样的路。我试着暂停声音。我想知道是不是因为我的声音被循环播放了。

        最终这完全是一个应用程序问题。我没有使用正确的通道对象。

        无需暂停即可更改音量。播放声音最初暂停,然后将音量设置为非默认值,然后取消暂停声音,是为了避免以默认音量短暂播放该声音。

        【讨论】:

          【解决方案5】:

          试试这个

          result = channle->setPaused(false);//after you set volume
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-02-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-10-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多