Add wyoming module

This commit is contained in:
Alex X
2025-04-21 20:30:38 +03:00
parent 7fe23c7bc5
commit 902af5e5d7
12 changed files with 886 additions and 6 deletions
+20
View File
@@ -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},
}
}
+42
View File
@@ -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)
}