beep icon indicating copy to clipboard operation
beep copied to clipboard

Cannot Play Two Sounds In Parallel

Open zarkones opened this issue 1 year ago • 2 comments

Hello. The following code would crash the process with this stack trace: stacktrace.txt

I might be missing something obvious, however, just not to me. :)

The code: package main

import ( "bytes" "fmt" "time" "ui/assets"

"github.com/faiface/beep/speaker"
"github.com/faiface/beep/wav"

)

func play() { streamer, format, err := wav.Decode(bytes.NewReader(assets.ButtonClick)) if err != nil { fmt.Println("failed to wav decide sfx:", err) return }

if err := speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10)); err != nil {
	fmt.Println("failed to speaker.Init sfx:", err)
	return
}

speaker.Play(streamer)

}

func main() { play() play()

time.Sleep(time.Second * 3)

}

zarkones avatar Jul 27 '24 19:07 zarkones

This project is maintained at https://github.com/gopxl/beep, please direct all future inquiries there.

This is an incorrect usage of beep; in order to play multiple streams of audio at the same time, only one instance of play is called. You can use the Mix function https://github.com/faiface/beep/blob/master/compositors.go#L100 to create a Streamer that mixes the inputs together into a single stream

dusk125 avatar Jul 30 '24 02:07 dusk125

You can only initialize the speaker once, but it should be possible to call play multiple times. Speaker has a built-in mixer.

MarkKremer avatar Aug 08 '24 08:08 MarkKremer