Files
game-driver/internal/middleware/bgm.go
2024-11-06 15:44:35 +08:00

54 lines
874 B
Go

package middleware
import (
"game-driver/internal/schema"
"game-driver/leaf"
"game-driver/pkg/audio"
"github.com/gopxl/beep/v2/speaker"
"log"
"sync"
)
func PlayBgm() leaf.HandlerFunc {
return func(c *leaf.Context) {
pm := leaf.Value[*schema.PlayModal](c, PayloadJSONKey)
bgm := audio.LinkAudio(pm.BGM)
if bgm != nil {
// 等待组
var wait sync.WaitGroup
defer wait.Wait()
// 结束信号通道
a := make(chan struct{})
// 发送结束信号
defer close(a)
go func() {
// 等待结束
wait.Add(1)
defer wait.Done()
ctrl, closer := audio.PlayBgmMP3(bgm)
defer closer()
if ctrl == nil {
log.Println("播放背景音乐失败")
return
}
select {
case <-a:
{
speaker.Lock()
ctrl.Streamer = nil
speaker.Unlock()
return
}
}
}()
}
c.Next()
}
}