我一直在开发一款使用多个音轨的游戏,其音量会根据鼠标移动实时调整。我将 SDl-Mixer 用于音频,将 Reactive-Banana 用于游戏。问题是在开始时已经开始播放的曲目在输入循环开始时停止播放。原因可能是其他原因,但我想知道 SDL 和 Reactive-Banana 之间是否存在一些我不理解的奇怪交互。我一直试图解决这个问题一段时间,但这可能只是我忽略的一些简单的事情。提前致谢。下面是一个简单测试的代码:
import Reactive.Banana
import Graphics.UI.SDL
import Graphics.UI.SDL.Mixer
import Control.Monad
musicdir = "/home/silas/code/haskell/river/audio/"
testNet :: AddHandler (Int,Int,[MouseButton]) -> NetworkDescription t ()
testNet mouseHdlr = do
eMouse <- fromAddHandler mouseHdlr
reactimate $ (putStrLn . show) <$> eMouse
main = withInit [InitEverything] $ do
setVideoMode 100 100 32 [SWSurface]
openAudio defaultFrequency AudioS16Sys 1 1024
allocateChannels 1
chunk <- loadWAV $ musicdir ++ "guitar1" ++ ".ogg"
playChannel 0 chunk (-1)
(mouseHdlr, mouseAction) <- newAddHandler
net <- compile $ testNet mouseHdlr
actuate net
forever $ getMouseState >>= mouseAction
编辑:问题似乎不一定在于 Reactive Banana。任何形式的“永远”循环都会导致音频停止。