Files
tia-love/internal/audio/sounds.go
T

44 lines
1.0 KiB
Go

package audio
import (
"embed"
"fmt"
)
//go:embed assets/*.wav
var assets embed.FS
// Event — jenis efek suara (F-024).
type Event string
const (
Click Event = "click"
Navigate Event = "navigate"
ModalOpen Event = "modal_open"
ModalClose Event = "modal_close"
NotifySuccess Event = "notify_success"
NotifyWarning Event = "notify_warning"
NotifyError Event = "notify_error"
Exec Event = "exec"
)
var allEvents = []Event{Click, Navigate, ModalOpen, ModalClose, NotifySuccess, NotifyWarning, NotifyError, Exec}
// loadSounds membaca + memvalidasi semua aset sekali di awal; PCM di-cache
// supaya Play() tidak menyentuh disk/embed FS.
func loadSounds() (map[Event][]byte, error) {
out := make(map[Event][]byte, len(allEvents))
for _, ev := range allEvents {
raw, err := assets.ReadFile("assets/" + string(ev) + ".wav")
if err != nil {
return nil, err
}
pcm, err := ParsePCM(raw)
if err != nil {
return nil, fmt.Errorf("%s.wav: %w", ev, err)
}
out[ev] = pcm
}
return out, nil
}