Golangで音声ファイルを鳴らす
Goで音声ファイルを鳴らします github.com/faiface/beepを使います コード
package main
import (
"os"
"time"
"github.com/faiface/beep"
"github.com/faiface/beep/mp3"
"github.com/faiface/beep/speaker"
)
func main() {
if len(os.Args) <= 1 {
panic("need music file")
}
f, err := os.Open(os.Args[1])
if err != nil {
panic(err)
}
streamer, format, err := mp3.Decode(f)
if err != nil {
panic(err)
}
defer streamer.Close()
if err := speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10)); err != nil {
panic(err)
}
done := make(chan bool)
speaker.Play(beep.Seq(
streamer,
beep.Callback(
func() {
done <- true
},
),
))
<-done
}
気になりそうなところ
Callbackを渡してるところ
speaker.Play(streamer)
だとあんまり綺麗にできなくて
// 音が聞こえる前に終わる :cry:
speaker.Play(streamer)
// ハングさせる
// 終了を受け取れない :thinking:
speaker.Play(streamer)
select {}
// Callbackでchannelで終了を通知するようにする :ok_woman:
speaker.Play(beep.Seq(
streamer,
beep.Callback(
func() {
done <- true
},
),
))
他の拡張子は?
MP3/WAV/OGG/FLACが(メジャーなものだと)使えるらしい wavの場合 "github.com/faiface/beep/wav"
をインポートして wav.Decode(f)
でできる
参考
https://github.com/faiface/beep