44 lines
1.0 KiB
Go
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
|
|
}
|