package oto import ( "math" ) // FloatBufferTo16BitLE is a naive helper method to convert []float32 buffers to // 16-bit little-endian, but encoded in byte buffer // // Appends the encoded bytes into "to" slice, allowing you to preallocate the // capacity or just use nil func FloatBufferTo16BitLE(from []float32, to []byte) []byte { for _, v := range from { var uv int16 if v < -1.0 { uv = -math.MaxInt16 // we are a bit lazy: -1.0 is encoded as -32767, as this makes math easier, and -32768 is unused } else if v > 1.0 { uv = math.MaxInt16 } else { uv = int16(v * math.MaxInt16) } to = append(to, byte(uv&255), byte(uv>>8)) } return to }