nativeaudio

audio playback for Go
Log | Files | Refs | README | LICENSE

commit 54d36e7969249bef53db07591ffd595cc19bcd05
parent 8b40d468a0c715b6d0ad4b18fa6b6e6bbb531d78
Author: Jack Mordaunt <jackmordaunt.dev@gmail.com>
Date:   Fri,  5 Jan 2024 18:23:20 +0800

internal: TriggerReader

This type triggers a callback when it's internal Reader hits EOF.

This is useful with ebitengine/oto/v3 because it doesn't provide a nice
way to detect end of playback.

Signed-off-by: Jack Mordaunt <jackmordaunt.dev@gmail.com>

Diffstat:
Ainternal/trigger-reader.go | 27+++++++++++++++++++++++++++
1 file changed, 27 insertions(+), 0 deletions(-)

diff --git a/internal/trigger-reader.go b/internal/trigger-reader.go @@ -0,0 +1,27 @@ +package internal + +import "io" + +// TriggerReader invokes a callback when EOF is reached. +type TriggerReader struct { + r io.Reader + cb func() +} + +func NewTriggerReader(src io.Reader, cb func()) *TriggerReader { + return &TriggerReader{r: src, cb: cb} +} + +func (t *TriggerReader) Read(p []byte) (n int, err error) { + n, err = t.r.Read(p) + if err == io.EOF { + t.Callback() + } + return n, err +} + +func (t *TriggerReader) Callback() { + if t.cb != nil { + t.cb() + } +}