omnisiah-blessings/main.go
2025-04-25 17:39:44 -07:00

92 lines
2.1 KiB
Go

package main
import (
"bytes"
_ "embed"
"fmt"
"io"
"os"
"os/exec"
"strings"
"time"
"github.com/faiface/beep/mp3"
"github.com/faiface/beep/speaker"
"github.com/fatih/color"
)
//go:embed blessing.txt
var blessingBytes []byte
//go:embed chant.mp3
var chantBytes []byte
func playChant() {
streamer, format, err := mp3.Decode(io.NopCloser(bytes.NewReader(chantBytes)))
if err != nil {
fmt.Fprintf(os.Stderr, "ERROR: Unable to decode chant: %v\n", err)
return
}
speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10))
speaker.Play(streamer)
}
func main() {
blessing := string(blessingBytes)
go playChant()
clearScreen := "\033[2J"
moveCursorTop := "\033[H"
fmt.Print(clearScreen + moveCursorTop)
// Resize the terminal (Windows example)
resizeTerminal(50, 42) // Width, Height
// ANSI-compatible colors using "fatih/color"
boldGreen := color.New(color.FgGreen, color.Bold).SprintFunc()
italicRed := color.New(color.FgRed, color.Italic).SprintFunc()
// Terminal width (you can adjust this to your needs)
width := 50 // 50% thinner width
// Header and Footer
header := "+++ INITIATE COGITATOR RITE +++"
footer := "<< SYSTEM: BLESSED BY THE OMNISSIAH >>"
// Print header, center-aligned
fmt.Println(boldGreen(centerText(header, width)))
// Print the blessing with a slight delay between lines
lines := strings.Split(blessing, "\n")
for _, line := range lines {
fmt.Println(centerText(line, width))
time.Sleep(30 * time.Millisecond) // tweak for effect
}
// Print footer, center-aligned and italicized
fmt.Print("\n")
fmt.Print(italicRed(centerText(footer, width)))
select {} // keep app running while audio plays
}
// Resize the terminal window (Windows-specific)
func resizeTerminal(cols, rows int) {
cmd := exec.Command("mode", fmt.Sprintf("%d,%d", cols, rows))
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil {
fmt.Printf("Error resizing terminal: %v\n", err)
}
}
// Function to center text based on terminal width
func centerText(text string, width int) string {
padding := (width - len(text)) / 2
if padding < 0 {
padding = 0
}
return strings.Repeat(" ", padding) + text
}