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 0000000..075ad8a Binary files /dev/null and b/squeak.pcm_s16be differ