package middleware import ( "game-driver/internal/schema" "game-driver/leaf" "game-driver/pkg/audio" "game-driver/pkg/logger" "game-driver/pkg/utils" "github.com/gopxl/beep/v2/speaker" "sync" ) // 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 { logger.Errorln("背景音乐解析异常", err) } if bgm != nil { logger.Infoln("背景音乐解析成功") // 等待组 var wait sync.WaitGroup defer wait.Wait() // 结束信号通道 a := make(chan struct{}) // 发送结束信号 defer close(a) wait.Add(1) go func() { // 等待结束 defer wait.Done() logger.Infoln("开始播放背景音乐") defer logger.Infoln("结束背景音乐播放") ctrl, closer, e := audio.PlayBgmMP3(bgm) defer closer() if e != nil { logger.Errorln("播放背景音乐失败", e) return } select { case <-a: { speaker.Lock() ctrl.Streamer = nil speaker.Unlock() return } } }() } else { logger.Errorln("背景音乐解析为空") } c.Next() } }