package transcode import ( "context" "github.com/gopxl/beep" "github.com/gopxl/beep/effects" ) func buildPipeline(streamer beep.Streamer, format beep.Format, opt Options) (beep.Streamer, beep.Format) { out := streamer if opt.SampleRate > 0 && format.SampleRate != beep.SampleRate(opt.SampleRate) { out = beep.Resample(4, format.SampleRate, beep.SampleRate(opt.SampleRate), out) format.SampleRate = beep.SampleRate(opt.SampleRate) } if opt.Channels == 1 { out = effects.Mono(out) format.NumChannels = 1 } return out, format } func drainSamples(ctx context.Context, s beep.Streamer) ([]float64, error) { buf := make([][2]float64, 4096) var samples []float64 for { if err := ctx.Err(); err != nil { return nil, err } n, ok := s.Stream(buf) if !ok { if err := s.Err(); err != nil { return nil, err } break } for i := 0; i < n; i++ { samples = append(samples, buf[i][0]) } } return samples, nil }