From 32fb349db7af96031604310778eb0015b56923b7 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 29 Jan 2021 01:35:05 +0100 Subject: [PATCH 1/6] Able to ignore low idle time (in case I'm not alone and write on my computer) --- main.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 3ececa2..7447769 100644 --- a/main.go +++ b/main.go @@ -159,6 +159,7 @@ func loadFile(path string) (s beep.StreamSeekCloser, format beep.Format, err err func main() { var weatherTime = flag.Duration("weather", -1, "Speak weather?") var noshuffle = flag.Bool("noshuffle", false, "Don't shuffle music order") + var ignoreidle = flag.Bool("ignoreidle", false, "Don't stop the reveil on idle detection change") var sr = flag.Int("samplerate", 44100, "Samplerate for unifying output stream") var claironTime = flag.Duration("clairon", -1, "Time before running the wake up clairon song") flag.DurationVar(&MaxRunTime, "maxruntime", MaxRunTime, "Maximum duration before auto exit") @@ -278,8 +279,12 @@ loop: volume.Volume = -2 - math.Log(5/float64(ntick))/3 } - if xPrintIdle() < idle { - break loop + if ignoreidle == nil || !*ignoreidle { + if idle < 60000 { + idle = xPrintIdle() + } else if xPrintIdle() < idle { + break loop + } } case <-interrupt: break loop From 6f9b56e2bd2f051f9567ee8eb07ab55fabd4fdd8 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 29 Jan 2021 01:36:42 +0100 Subject: [PATCH 2/6] New formula for speaking --- main.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 7447769..9a3d0f8 100644 --- a/main.go +++ b/main.go @@ -47,7 +47,7 @@ func xPrintIdle() (idle uint64) { } func speakToday() { - cmdSetVolume := exec.Command("amixer", "-D", "pulse", "set", "Master", fmt.Sprintf("%d%%", 50+(ntick/int64(MaxRunTime.Seconds()/3))*50)) + cmdSetVolume := exec.Command("amixer", "-D", "pulse", "set", "Master", fmt.Sprintf("%d%%", 50+50/(int64(MaxRunTime.Seconds()/3)/ntick+1))) if err := cmdSetVolume.Run(); err != nil { log.Println(err) } @@ -101,7 +101,7 @@ func speakWeather() { log.Println(err) } - cmdSetVolume := exec.Command("amixer", "-D", "pulse", "set", "Master", fmt.Sprintf("%d%%", 50+(ntick/int64(MaxRunTime.Seconds()/3))*50)) + cmdSetVolume := exec.Command("amixer", "-D", "pulse", "set", "Master", fmt.Sprintf("%d%%", 50+50/(int64(MaxRunTime.Seconds()/3)/ntick+1))) if err := cmdSetVolume.Run(); err != nil { log.Println(err) } @@ -121,6 +121,11 @@ func speakWeather() { log.Println(err) } + cmd3 := exec.Command("/home/nemunaire/scripts/wakeup/ratp-traffic.sh", "rers", "B") + if err := cmd3.Run(); err != nil { + log.Println(err) + } + if cmdAmbiant.Process != nil { (*cmdAmbiant.Process).Kill() } From d0ffc59becf5a57944d21ef14c3e91843d8fd84e Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 29 Jan 2021 01:37:44 +0100 Subject: [PATCH 3/6] Try to avoid too much repetitions --- main.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index 9a3d0f8..b0a1bdf 100644 --- a/main.go +++ b/main.go @@ -175,7 +175,11 @@ func main() { return } - rand.Seed(time.Now().UnixNano()) + seed := time.Now().Unix() % 172800 * 64 + + log.Println("Starting reveil with seed:", seed) + + rand.Seed(seed) sampleRate := beep.SampleRate(*sr) @@ -209,9 +213,10 @@ func main() { dontUpdateVolume := false hasClaironed := claironTime == nil || *claironTime == -1 hasSpokeWeather := weatherTime == nil || *weatherTime == -1 + reverseOrder := time.Now().Unix()%86400%2 == 0 + playedItem := -1 // Create infinite stream - playedItem := -1 stream := beep.Iterate(func() beep.Streamer { if !hasClaironed && time.Since(launched) >= *claironTime { log.Println("clairon time!") @@ -236,9 +241,17 @@ func main() { dontUpdateVolume = false volume.Volume = -2 - math.Log(5/float64(ntick))/3 - playedItem += 1 + + if reverseOrder { + playedItem -= 1 + } else { + playedItem += 1 + } + if playedItem >= len(playlist) { playedItem = 0 + } else if playedItem < 0 { + playedItem = len(playlist) - 1 } if i, ok := playlist[playedItem].(beep.StreamSeekCloser); ok { From e7d0bb953830e17a24aa1671dedb6ac9008c6c1b Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 29 Jan 2021 01:38:26 +0100 Subject: [PATCH 4/6] Returns path to audio files --- main.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/main.go b/main.go index b0a1bdf..e1659b8 100644 --- a/main.go +++ b/main.go @@ -137,11 +137,13 @@ func speakWeather() { } } -func loadFile(path string) (s beep.StreamSeekCloser, format beep.Format, err error) { +func loadFile(filepath string) (name string, s beep.StreamSeekCloser, format beep.Format, err error) { for _, decoder := range []func(io.ReadCloser) (beep.StreamSeekCloser, beep.Format, error){flac.Decode, mp3.Decode, wav.Decode} { var fd *os.File - fd, err = os.Open(path) + name = path.Base(filepath) + + fd, err = os.Open(filepath) if err != nil { return } @@ -183,17 +185,19 @@ func main() { sampleRate := beep.SampleRate(*sr) + paths := []string{} playlist := []beep.Streamer{} formats := []beep.Format{} // Load playlist log.Println("Loading playlist...") for _, arg := range flag.Args() { - s, f, err := loadFile(arg) + p, s, f, err := loadFile(arg) if err != nil { log.Printf("Unable to load %s: %s", arg, err) continue } + paths = append(paths, p) playlist = append(playlist, s) formats = append(formats, f) } @@ -202,6 +206,7 @@ func main() { log.Println("Shuffling playlist...") // Shuffle the playlist rand.Shuffle(len(playlist), func(i, j int) { + paths[i], paths[j] = paths[j], paths[i] playlist[i], playlist[j] = playlist[j], playlist[i] formats[i], formats[j] = formats[j], formats[i] }) @@ -221,7 +226,7 @@ func main() { if !hasClaironed && time.Since(launched) >= *claironTime { log.Println("clairon time!") hasClaironed = true - sample, format, err := loadFile("/home/nemunaire/www/audio/miracle-morning/clairon-reveil.mp3") + _, sample, format, err := loadFile("/home/nemunaire/www/audio/miracle-morning/clairon-reveil.mp3") if err == nil { volume.Volume = 1 dontUpdateVolume = true From be13494b8af0aba66ca5348bdcfa9a8e6d08a512 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 29 Jan 2021 01:41:35 +0100 Subject: [PATCH 5/6] New strategy for clairon --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index e1659b8..8e0e707 100644 --- a/main.go +++ b/main.go @@ -225,7 +225,7 @@ func main() { stream := beep.Iterate(func() beep.Streamer { if !hasClaironed && time.Since(launched) >= *claironTime { log.Println("clairon time!") - hasClaironed = true + *claironTime += *claironTime / 2 _, sample, format, err := loadFile("/home/nemunaire/www/audio/miracle-morning/clairon-reveil.mp3") if err == nil { volume.Volume = 1 From ad731a24170cdba09bd37d4da57b94958167c564 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 29 Jan 2021 01:41:54 +0100 Subject: [PATCH 6/6] Show error when unable to load clairon --- main.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/main.go b/main.go index 8e0e707..5c60a7c 100644 --- a/main.go +++ b/main.go @@ -235,6 +235,8 @@ func main() { } else { return sample } + } else { + log.Println("Error loading clairon:", err) } }