mirror of
https://github.com/pion/mediadevices.git
synced 2025-09-27 04:46:10 +08:00
64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
// Package wave implements a basic audio data library.
|
|
package wave
|
|
|
|
// Audio is a finite series of audio Sample values.
|
|
type Audio interface {
|
|
SampleFormat() SampleFormat
|
|
ChunkInfo() ChunkInfo
|
|
At(i, ch int) Sample
|
|
}
|
|
|
|
// EditableAudio is an editable finite series of audio Sample values.
|
|
type EditableAudio interface {
|
|
Audio
|
|
Set(i, ch int, s Sample)
|
|
}
|
|
|
|
// ChunkInfo contains size of the audio chunk.
|
|
type ChunkInfo struct {
|
|
Len int
|
|
Channels int
|
|
SamplingRate int
|
|
}
|
|
|
|
// SampleFormat can convert any Sample to one from its own sample format.
|
|
type SampleFormat interface {
|
|
Convert(c Sample) Sample
|
|
}
|
|
|
|
// SampleFormatFunc returns a SampleFormat that invokes f to implement the conversion.
|
|
func SampleFormatFunc(f func(Sample) Sample) SampleFormat {
|
|
return &sampleFormatFunc{f}
|
|
}
|
|
|
|
type sampleFormatFunc struct {
|
|
f func(Sample) Sample
|
|
}
|
|
|
|
func (f *sampleFormatFunc) Convert(s Sample) Sample {
|
|
return f.f(s)
|
|
}
|
|
|
|
// SampleFormats for the standard formats.
|
|
var (
|
|
Int16SampleFormat = SampleFormatFunc(func(s Sample) Sample {
|
|
if _, ok := s.(Int16Sample); ok {
|
|
return s
|
|
}
|
|
return Int16Sample(s.Int() >> 16)
|
|
})
|
|
Float32SampleFormat = SampleFormatFunc(func(s Sample) Sample {
|
|
if _, ok := s.(Float32Sample); ok {
|
|
return s
|
|
}
|
|
return Float32Sample(float32(s.Int()) / 0x100000000)
|
|
})
|
|
)
|
|
|
|
// Sample can convert itself to 64-bits signed value.
|
|
type Sample interface {
|
|
// Int returns the audio level value for the sample.
|
|
// A value ranges within [0, 0xffffffff], but is represented by a int64.
|
|
Int() int64
|
|
}
|