Compare commits
6 commits
0057ca3479
...
ad731a2417
Author | SHA1 | Date | |
---|---|---|---|
ad731a2417 | |||
be13494b8a | |||
e7d0bb9538 | |||
d0ffc59bec | |||
6f9b56e2bd | |||
32fb349db7 |
1 changed files with 42 additions and 12 deletions
50
main.go
50
main.go
|
@ -47,7 +47,7 @@ func xPrintIdle() (idle uint64) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func speakToday() {
|
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 {
|
if err := cmdSetVolume.Run(); err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ func speakWeather() {
|
||||||
log.Println(err)
|
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 {
|
if err := cmdSetVolume.Run(); err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
}
|
}
|
||||||
|
@ -121,6 +121,11 @@ func speakWeather() {
|
||||||
log.Println(err)
|
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 {
|
if cmdAmbiant.Process != nil {
|
||||||
(*cmdAmbiant.Process).Kill()
|
(*cmdAmbiant.Process).Kill()
|
||||||
}
|
}
|
||||||
|
@ -132,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} {
|
for _, decoder := range []func(io.ReadCloser) (beep.StreamSeekCloser, beep.Format, error){flac.Decode, mp3.Decode, wav.Decode} {
|
||||||
var fd *os.File
|
var fd *os.File
|
||||||
|
|
||||||
fd, err = os.Open(path)
|
name = path.Base(filepath)
|
||||||
|
|
||||||
|
fd, err = os.Open(filepath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -159,6 +166,7 @@ func loadFile(path string) (s beep.StreamSeekCloser, format beep.Format, err err
|
||||||
func main() {
|
func main() {
|
||||||
var weatherTime = flag.Duration("weather", -1, "Speak weather?")
|
var weatherTime = flag.Duration("weather", -1, "Speak weather?")
|
||||||
var noshuffle = flag.Bool("noshuffle", false, "Don't shuffle music order")
|
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 sr = flag.Int("samplerate", 44100, "Samplerate for unifying output stream")
|
||||||
var claironTime = flag.Duration("clairon", -1, "Time before running the wake up clairon song")
|
var claironTime = flag.Duration("clairon", -1, "Time before running the wake up clairon song")
|
||||||
flag.DurationVar(&MaxRunTime, "maxruntime", MaxRunTime, "Maximum duration before auto exit")
|
flag.DurationVar(&MaxRunTime, "maxruntime", MaxRunTime, "Maximum duration before auto exit")
|
||||||
|
@ -169,21 +177,27 @@ func main() {
|
||||||
return
|
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)
|
sampleRate := beep.SampleRate(*sr)
|
||||||
|
|
||||||
|
paths := []string{}
|
||||||
playlist := []beep.Streamer{}
|
playlist := []beep.Streamer{}
|
||||||
formats := []beep.Format{}
|
formats := []beep.Format{}
|
||||||
|
|
||||||
// Load playlist
|
// Load playlist
|
||||||
log.Println("Loading playlist...")
|
log.Println("Loading playlist...")
|
||||||
for _, arg := range flag.Args() {
|
for _, arg := range flag.Args() {
|
||||||
s, f, err := loadFile(arg)
|
p, s, f, err := loadFile(arg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Unable to load %s: %s", arg, err)
|
log.Printf("Unable to load %s: %s", arg, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
paths = append(paths, p)
|
||||||
playlist = append(playlist, s)
|
playlist = append(playlist, s)
|
||||||
formats = append(formats, f)
|
formats = append(formats, f)
|
||||||
}
|
}
|
||||||
|
@ -192,6 +206,7 @@ func main() {
|
||||||
log.Println("Shuffling playlist...")
|
log.Println("Shuffling playlist...")
|
||||||
// Shuffle the playlist
|
// Shuffle the playlist
|
||||||
rand.Shuffle(len(playlist), func(i, j int) {
|
rand.Shuffle(len(playlist), func(i, j int) {
|
||||||
|
paths[i], paths[j] = paths[j], paths[i]
|
||||||
playlist[i], playlist[j] = playlist[j], playlist[i]
|
playlist[i], playlist[j] = playlist[j], playlist[i]
|
||||||
formats[i], formats[j] = formats[j], formats[i]
|
formats[i], formats[j] = formats[j], formats[i]
|
||||||
})
|
})
|
||||||
|
@ -203,14 +218,15 @@ func main() {
|
||||||
dontUpdateVolume := false
|
dontUpdateVolume := false
|
||||||
hasClaironed := claironTime == nil || *claironTime == -1
|
hasClaironed := claironTime == nil || *claironTime == -1
|
||||||
hasSpokeWeather := weatherTime == nil || *weatherTime == -1
|
hasSpokeWeather := weatherTime == nil || *weatherTime == -1
|
||||||
|
reverseOrder := time.Now().Unix()%86400%2 == 0
|
||||||
|
playedItem := -1
|
||||||
|
|
||||||
// Create infinite stream
|
// Create infinite stream
|
||||||
playedItem := -1
|
|
||||||
stream := beep.Iterate(func() beep.Streamer {
|
stream := beep.Iterate(func() beep.Streamer {
|
||||||
if !hasClaironed && time.Since(launched) >= *claironTime {
|
if !hasClaironed && time.Since(launched) >= *claironTime {
|
||||||
log.Println("clairon time!")
|
log.Println("clairon time!")
|
||||||
hasClaironed = true
|
*claironTime += *claironTime / 2
|
||||||
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 {
|
if err == nil {
|
||||||
volume.Volume = 1
|
volume.Volume = 1
|
||||||
dontUpdateVolume = true
|
dontUpdateVolume = true
|
||||||
|
@ -219,6 +235,8 @@ func main() {
|
||||||
} else {
|
} else {
|
||||||
return sample
|
return sample
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
log.Println("Error loading clairon:", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,9 +248,17 @@ func main() {
|
||||||
|
|
||||||
dontUpdateVolume = false
|
dontUpdateVolume = false
|
||||||
volume.Volume = -2 - math.Log(5/float64(ntick))/3
|
volume.Volume = -2 - math.Log(5/float64(ntick))/3
|
||||||
|
|
||||||
|
if reverseOrder {
|
||||||
|
playedItem -= 1
|
||||||
|
} else {
|
||||||
playedItem += 1
|
playedItem += 1
|
||||||
|
}
|
||||||
|
|
||||||
if playedItem >= len(playlist) {
|
if playedItem >= len(playlist) {
|
||||||
playedItem = 0
|
playedItem = 0
|
||||||
|
} else if playedItem < 0 {
|
||||||
|
playedItem = len(playlist) - 1
|
||||||
}
|
}
|
||||||
|
|
||||||
if i, ok := playlist[playedItem].(beep.StreamSeekCloser); ok {
|
if i, ok := playlist[playedItem].(beep.StreamSeekCloser); ok {
|
||||||
|
@ -278,9 +304,13 @@ loop:
|
||||||
volume.Volume = -2 - math.Log(5/float64(ntick))/3
|
volume.Volume = -2 - math.Log(5/float64(ntick))/3
|
||||||
}
|
}
|
||||||
|
|
||||||
if xPrintIdle() < idle {
|
if ignoreidle == nil || !*ignoreidle {
|
||||||
|
if idle < 60000 {
|
||||||
|
idle = xPrintIdle()
|
||||||
|
} else if xPrintIdle() < idle {
|
||||||
break loop
|
break loop
|
||||||
}
|
}
|
||||||
|
}
|
||||||
case <-interrupt:
|
case <-interrupt:
|
||||||
break loop
|
break loop
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue