package middleware import ( "game-driver/internal/schema" "game-driver/leaf" "game-driver/pkg/audio" "game-driver/pkg/utils" "sync" "github.com/gopxl/beep/v2/speaker" "go.uber.org/zap" ) // PlayBgm 播放背景音乐 func PlayBgm() leaf.HandlerFunc { return func(c *leaf.Context) { pm := leaf.Value[*schema.PlayModal](c, PayloadJSONKey) bgm, err := utils.LinkAudio(pm.BGM) if err != nil { zap.S().Errorln("背景音乐数据解析异常:", err) } if bgm != nil { zap.S().Infoln("背景音乐解析成功") // 等待组 var wait sync.WaitGroup defer wait.Wait() // 结束信号通道 a := make(chan struct{}) // 发送结束信号 defer close(a) wait.Add(1) go func() { defer wait.Done() zap.S().Infoln("开始播放背景音乐") defer zap.S().Infoln("结束背景音乐播放") ctrl, closer, e := audio.PlayBgmMP3(bgm) defer closer() if e != nil { zap.S().Errorln("播放背景音乐异常:", e) return } <-a speaker.Lock() ctrl.Streamer = nil speaker.Unlock() }() } else { zap.S().Infoln("未解析到背景音乐") } c.Next() } }