diff --git a/audio-linux.go b/audio-linux.go index 4ef25ad..18a2a22 100644 --- a/audio-linux.go +++ b/audio-linux.go @@ -97,6 +97,10 @@ func (a *audioStruct) recLoop(deinitNeededChan, deinitFinishedChan chan bool) { } } + // Do not send silence frames to the radio unnecessarily + if allZero(frameBuf[:n]) { + continue + } buf.Write(frameBuf[:n]) for buf.Len() >= len(frameBuf) { @@ -167,6 +171,7 @@ func (a *audioStruct) init(devName string) error { a.sink.Rate = audioSampleRate a.sink.Format = "s16le" a.sink.Channels = 1 + a.sink.UseSystemClockForTiming = true a.sink.SetProperty("device.buffering.buffer_size", (audioSampleRate*16)/10) a.sink.SetProperty("device.description", "kappanhang: "+devName) diff --git a/util.go b/util.go new file mode 100644 index 0000000..b3daa4c --- /dev/null +++ b/util.go @@ -0,0 +1,11 @@ +package main + +// Checks if all bytes are zeros +func allZero(s []byte) bool { + for _, v := range s { + if v != 0 { + return false + } + } + return true +}