mirror of
https://github.com/vsariola/sointu.git
synced 2025-05-27 10:50:23 -04:00
Throughout sointu, we assume stereo audiobuffers, but were passing around []float32. This had several issues, including len(buf)/2 and numSamples*2 type of length conversion in many places. Also, it caused one bug in a test case, causing it to succeed when it should have not (the test had +-1 when it should have had +-2). This refactoring makes it impossible to have odd length buffer issues.
25 lines
865 B
Go
25 lines
865 B
Go
package sointu
|
|
|
|
// AudioBuffer is a buffer of stereo audio samples of variable length, each
|
|
// sample represented by a slice of [2]float32. [0] is left channel, [1] is
|
|
// right
|
|
type AudioBuffer [][2]float32
|
|
|
|
// AudioOutput represents something where we can send audio e.g. audio output.
|
|
// WriteAudio should block if not ready to accept audio e.g. buffer full.
|
|
type AudioOutput interface {
|
|
WriteAudio(buffer AudioBuffer) error
|
|
Close() error
|
|
}
|
|
|
|
// AudioContext represents the low-level audio drivers. There should be at most
|
|
// one AudioContext at a time. The interface is implemented at least by
|
|
// oto.OtoContext, but in future we could also mock it.
|
|
//
|
|
// AudioContext is used to create one or more AudioOutputs with Output(); each
|
|
// can be used to output separate sound & closed when done.
|
|
type AudioContext interface {
|
|
Output() AudioOutput
|
|
Close() error
|
|
}
|