package reduction import ( "encoding/binary" // "fmt" "math" ) func lowPassFilter(input []float64, cutoffFrequency, sampleRate float64) []float64 { rc := 1.0 / (cutoffFrequency * 2.0 * math.Pi) dt := 1.0 / sampleRate alpha := dt / (rc + dt) output := make([]float64, len(input)) output[0] = input[0] for i := 1; i < len(input); i++ { output[i] = output[i-1] + alpha*(input[i]-output[i-1]) } return output } func ProcessAudio(input []byte, cutoffFrequency, sampleRate float64) ([]byte, error) { numSamples := len(input) / 2 samples := make([]float64, numSamples) for i := 0; i < numSamples; i++ { samples[i] = float64(int16(binary.BigEndian.Uint16(input[i*2:]))) } filteredSamples := lowPassFilter(samples, cutoffFrequency, sampleRate) output := make([]byte, len(input)) for i := 0; i < numSamples; i++ { value := int16(filteredSamples[i]) binary.LittleEndian.PutUint16(output[i*2:], uint16(value)) } return output, nil } /* func main() { inputBuffer := make([]byte, 16000*2) // 1 секунда на 16 кГц, 16 бит cutoffFrequency := 200.0 // Частота среза в Гц sampleRate := 16000.0 // Частота дискретизации в Гц processedBuffer, err := ProcessAudio(inputBuffer, cutoffFrequency, sampleRate) if err != nil { fmt.Println("Ошибка:", err) return } fmt.Println("Обработка завершена, размер выходного буфера:", len(processedBuffer)) } */