All checks were successful
release / build-release (push) Successful in 1m35s
tools/gensound syntetiserar 21 ljud: fyra stationsmelodier i klockklang (en per station via melody-fältet eller banans id), ankomstjingel, ding-dong vid inrullning, dörrsignal vid avgång, spärrens pip och nekande, kiosk, toalett, lärt ord, bekräfta/varning, byte, personal, vinst, förlust, flygplan, sorl och menymusik. sfx.go spelar effekter utifrån vad som hänt i sim.Run sedan förra bildrutan. Ljudlagret har huvudvolym × effekter/musik och byter inte slinga i onödan. Inställningar (S på bankartan, sparas): volymer, språk sv/en som laddas om direkt, fönsterskala, fullskärm (F11 överallt) och tangentöversikt. Fönsterikon från genart. CHANGELOG.md. Tester för ljudfiler, melodival och inställningar. Docs, wiki och skärmdumpar uppdaterade. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
47 lines
1.2 KiB
Go
47 lines
1.2 KiB
Go
package game
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"gitea.brasse-pc.eu/brasse/metro-puzzle-jp/internal/level"
|
|
)
|
|
|
|
// TestAllSoundsDecode: alla ljud som spelet refererar finns och går att
|
|
// avkoda (utan ljudkontext eller fönster).
|
|
func TestAllSoundsDecode(t *testing.T) {
|
|
seen := map[string]bool{}
|
|
for _, name := range AllSounds() {
|
|
if seen[name] {
|
|
t.Errorf("%s listas två gånger", name)
|
|
}
|
|
seen[name] = true
|
|
pcm, err := decodeSound(name)
|
|
if err != nil {
|
|
t.Errorf("%s: %v", name, err)
|
|
continue
|
|
}
|
|
if len(pcm) < sampleRate/20*4 { // minst 50 ms stereo 16-bit
|
|
t.Errorf("%s: för kort (%d byte)", name, len(pcm))
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestMelodyForIsStableAndKnown(t *testing.T) {
|
|
known := map[string]bool{}
|
|
for _, m := range StationMelodies {
|
|
known[m] = true
|
|
}
|
|
a := &level.Level{ID: "005-ueno", Station: "ueno"}
|
|
if m := MelodyFor(a); !known[m] || m != MelodyFor(a) {
|
|
t.Fatalf("MelodyFor = %q", m)
|
|
}
|
|
if m := MelodyFor(&level.Level{ID: "x", Melody: "c"}); m != "melody-c" {
|
|
t.Fatalf("melody-fältet ska vinna: %q", m)
|
|
}
|
|
var nilAudio *Audio
|
|
nilAudio.Play(SoundWin, 1) // nil-säkert
|
|
nilAudio.Loop(SoundMusicMap, 1)
|
|
nilAudio.SetVolumes(1, 1, 1)
|
|
nilAudio.StopLoop()
|
|
}
|