main.go
package main
import (
"log"
"os"
"time"
"github.com/faiface/beep"
"github.com/faiface/beep/effects"
"github.com/faiface/beep/mp3"
"github.com/faiface/beep/speaker"
)
func main() {
f, err := os.Open("beep.mp3") // 300ms くらいの再生時間のビープ音源を用意しておく
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))
ctrl := &beep.Ctrl{Streamer: beep.Loop(-1, streamer), Paused: false} // beep.Loop に -1 を指定して、無限に再生し続ける
volume := &effects.Volume{
Streamer: ctrl,
Base: 2,
Volume: -7, // 音量調整。音が鳴ってさえいればいいので、気が散らないように音量を下げる
Silent: false,
}
speaker.Play(volume) // 非同期再生開始
for {
if ctrl.Paused { // 再生が中断になった時は
time.Sleep(time.Second * 120) // 120 秒スリープして、120 秒後に再生されるようにする
} else { // 再生中の時は
time.Sleep(time.Millisecond * 300) // 300ms だけスリープして、300ms beep.mp3 を再生する
}
speaker.Lock()
ctrl.Paused = !ctrl.Paused // ここで再生状態と停止状態を切り替える
speaker.Unlock()
}
}