我正在使用这个模块在我的项目中播放声音 - https://github.com/faiface/beep 我想播放声音以及将声音播放到文件或 http 端点的流。
I am adding streams to mixer like this:
soundMixer.Add(stream)
speaker.Play(s.soundMixer)
有人可以帮我吗? 任何帮助表示赞赏
我想要此更改的确切代码 - https://github.com/ikemen-engine/Ikemen-GO/blob/9fcfb350fc5a1255ab74d264e96b773187e8ad71/src/sound.go#L222-L225
示例代码
package main
import (
"log"
"os"
"time"
"github.com/faiface/beep"
"github.com/faiface/beep/mp3"
"github.com/faiface/beep/speaker"
)
func main() {
s1 := getStream("./Lame_Drivers_-_01_-_Frozen_Egg.mp3")
s2 := getStream("./Miami_Slice_-_04_-_Step_Into_Me.mp3")
defer s1.Close()
defer s2.Close()
speaker.Init(48000, 2048)
mixer := &beep.Mixer{}
// done := make(chan bool)
speaker.Play(mixer)
mixer.Add(s1)
mixer.Add(s2)
time.Sleep(2 * time.Minute)
}
func getStream(file string) beep.StreamSeekCloser {
f, err := os.Open(file)
if err != nil {
log.Fatal(err)
}
streamer, _, err := mp3.Decode(f)
if err != nil {
log.Fatal(err)
}
return streamer
}
您的程序在声音播放之前就已完成。
f, err := os.Open("music.mp3")
if err != nil {
log.Fatal(err)
}
streamer, format, err := mp3.Decode(f)
if err != nil {
log.Fatal(err)
}
defer streamer.Close()
speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10))
done := make(chan bool)
speaker.Play(beep.Seq(streamer, beep.Callback(func() {
done <- true
})))
<-done