Add wyoming module
This commit is contained in:
@@ -185,3 +185,23 @@ func Transcode(dst, src *core.Codec) func([]byte) []byte {
|
||||
return writer(samples)
|
||||
}
|
||||
}
|
||||
|
||||
func ConsumerCodecs() []*core.Codec {
|
||||
return []*core.Codec{
|
||||
{Name: core.CodecPCML},
|
||||
{Name: core.CodecPCM},
|
||||
{Name: core.CodecPCMA},
|
||||
{Name: core.CodecPCMU},
|
||||
}
|
||||
}
|
||||
|
||||
func ProducerCodecs() []*core.Codec {
|
||||
return []*core.Codec{
|
||||
{Name: core.CodecPCML, ClockRate: 16000},
|
||||
{Name: core.CodecPCM, ClockRate: 16000},
|
||||
{Name: core.CodecPCML, ClockRate: 8000},
|
||||
{Name: core.CodecPCM, ClockRate: 8000},
|
||||
{Name: core.CodecPCMA, ClockRate: 8000},
|
||||
{Name: core.CodecPCMU, ClockRate: 8000},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
package s16le
|
||||
|
||||
func PeaksRMS(b []byte) int16 {
|
||||
// RMS of sine wave = peak / sqrt2
|
||||
// https://en.wikipedia.org/wiki/Root_mean_square
|
||||
// https://www.youtube.com/watch?v=MUDkL4KZi0I
|
||||
var peaks int32
|
||||
var peaksSum int32
|
||||
var prevSample int16
|
||||
var prevUp bool
|
||||
|
||||
var i int
|
||||
for n := len(b); i < n; {
|
||||
lo := b[i]
|
||||
i++
|
||||
hi := b[i]
|
||||
i++
|
||||
|
||||
sample := int16(hi)<<8 | int16(lo)
|
||||
up := sample >= prevSample
|
||||
|
||||
if i >= 4 {
|
||||
if up != prevUp {
|
||||
if prevSample >= 0 {
|
||||
peaksSum += int32(prevSample)
|
||||
} else {
|
||||
peaksSum -= int32(prevSample)
|
||||
}
|
||||
peaks++
|
||||
}
|
||||
}
|
||||
|
||||
prevSample = sample
|
||||
prevUp = up
|
||||
}
|
||||
|
||||
if peaks == 0 {
|
||||
return 0
|
||||
}
|
||||
|
||||
return int16(peaksSum / peaks)
|
||||
}
|
||||
Reference in New Issue
Block a user