From a16f89fe9cc4410ffe8ddf1a4ce6ff642c2708e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20=C3=87elik?= Date: Mon, 1 Dec 2025 11:39:34 +0100 Subject: [PATCH] Add sound effect --- main.go | 21 ++++++++++++++++++++- squeak.pcm_s16be | Bin 0 -> 24584 bytes 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 squeak.pcm_s16be diff --git a/main.go b/main.go index c47fa3a..9816d14 100644 --- a/main.go +++ b/main.go @@ -5,20 +5,23 @@ import ( "fmt" "image" "image/color" + "io" "github.com/clktmr/n64/drivers/cartfs" "github.com/clktmr/n64/drivers/controller" "github.com/clktmr/n64/drivers/display" "github.com/clktmr/n64/drivers/draw" + "github.com/clktmr/n64/drivers/rspq/mixer" "github.com/clktmr/n64/fonts/gomono12" _ "github.com/clktmr/n64/machine" + "github.com/clktmr/n64/rcp/audio" "github.com/clktmr/n64/rcp/serial/joybus" "github.com/clktmr/n64/rcp/texture" "github.com/clktmr/n64/rcp/video" ) var ( - //go:embed gopher-anim.CI8 + //go:embed gopher-anim.CI8 squeak.pcm_s16be _tutorialFiles embed.FS tutorialFiles cartfs.FS = cartfs.Embed(_tutorialFiles) ) @@ -53,6 +56,20 @@ func main() { gopherRect := image.Rect(0, 0, 128, 128) blows := 0 + audio.Start(48000) + mixer.Init() + + go func() { + audio.Buffer.ReadFrom(mixer.Output) + }() + + squeakFile, err := tutorialFiles.Open("squeak.pcm_s16be") + if err != nil { + panic(err) + } + squeakReader := squeakFile.(io.ReadSeeker) + squeakSource := mixer.NewSource(squeakReader, 16000) + for { fb := display.Swap() // Blocks until next VBlank input := <-controllers @@ -71,6 +88,8 @@ func main() { if blows < 8 { if input[0].Pressed()&joybus.ButtonA != 0 { blows++ + squeakReader.Seek(0, io.SeekStart) + mixer.SetSource(0, squeakSource) } if input[0].Down()&joybus.ButtonA != 0 { gopherFrame.X += 128 // blowing gopher diff --git a/squeak.pcm_s16be b/squeak.pcm_s16be new file mode 100644 index 0000000000000000000000000000000000000000..075ad8a7876d96137fa43da7f1143d1d5841b7a4 GIT binary patch literal 24584 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 I?Fkm-KMm$_UH||9 literal 0 HcmV?d00001