32 lines
712 B
Go
32 lines
712 B
Go
package audio
|
|
|
|
import (
|
|
"github.com/gopxl/beep/v2"
|
|
"github.com/gopxl/beep/v2/mp3"
|
|
"github.com/gopxl/beep/v2/speaker"
|
|
"go.uber.org/zap"
|
|
"io"
|
|
)
|
|
|
|
func PlayBgmMP3(r io.ReadCloser, opts ...beep.LoopOption) (*beep.Ctrl, func() error, error) {
|
|
streamer, format, err := mp3.Decode(r)
|
|
if err != nil {
|
|
return nil, func() error { return nil }, err
|
|
}
|
|
|
|
loop2, err := beep.Loop2(streamer, opts...)
|
|
if err != nil {
|
|
zap.S().Infoln("循环播放异常: ", err)
|
|
return nil, streamer.Close, err
|
|
}
|
|
|
|
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, nil
|
|
}
|