package audio import ( "github.com/gopxl/beep/v2" "github.com/gopxl/beep/v2/mp3" "github.com/gopxl/beep/v2/speaker" "io" "log" ) func PlayBgmMP3(r io.ReadCloser, opts ...beep.LoopOption) (*beep.Ctrl, func() error) { streamer, format, err := mp3.Decode(r) if err != nil { return nil, func() error { return nil } } loop2, err := beep.Loop2(streamer, opts...) if err != nil { log.Println("循环播放异常: ", err) return nil, streamer.Close } s := beep.Resample(4, format.SampleRate, DefaultSampleRate, loop2) ctrl := &beep.Ctrl{Streamer: s} speaker.Play(beep.Seq(ctrl, beep.Callback(func() { streamer.Close() }))) return ctrl, streamer.Close }