Files
go-mxl-player/internal/playback/audio.go
T
Dmitry Sergeev a8d277ee3d stats window
2026-09-01 22:59:09 +03:00

44 lines
1.1 KiB
Go

package playback
import "context"
// AudioFrame contains deinterleaved F32 audio samples.
//
// Samples contains one byte slice per channel. Each channel contains
// SampleCount float32 samples.
//
// The sample payload may borrow source-owned memory. AudioSink must finish
// reading it before ConsumeAudio returns.
type AudioFrame struct {
Index uint64
SampleCount uint64
Channels uint64
Label string
SampleRateNumerator int64
SampleRateDenominator int64
Samples [][]byte
}
// AudioReader reads batches from one audio feed.
//
// ReadAudio must not be called again until the previous frame has been
// consumed.
type AudioReader interface {
ReadAudio(context.Context) (AudioFrame, error)
Close() error
}
// AudioReaderFactory opens a reader for the configured audio feed.
type AudioReaderFactory interface {
OpenAudio(context.Context, FeedConfig) (AudioReader, error)
}
// AudioSink synchronously consumes one borrowed audio batch.
//
// ConsumeAudio must not retain frame.Samples or their underlying byte slices.
type AudioSink interface {
ConsumeAudio(context.Context, AudioFrame) error
}