M12: ljud, inställningar och release v0.1.0
All checks were successful
release / build-release (push) Successful in 1m35s
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>
This commit is contained in:
46
internal/game/audio_test.go
Normal file
46
internal/game/audio_test.go
Normal file
@@ -0,0 +1,46 @@
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user