94 lines · 2.3 KB
package main

import (
	"testing"

	"github.com/gopxl/beep/v2"
)

// stubStreamer is a no-op beep.Streamer used to exercise resampling wiring.
type stubStreamer struct{}

func (stubStreamer) Stream(samples [][2]float64) (int, bool) { return 0, false }
func (stubStreamer) Err() error                              { return nil }

func TestResampleForPlayback(t *testing.T) {
	src := stubStreamer{}

	tests := []struct {
		name         string
		fileRate     beep.SampleRate
		speakerRate  beep.SampleRate
		speed        float64
		wantResample bool
		wantRatio    float64
	}{
		{
			name:         "matching rate normal speed returns source unchanged",
			fileRate:     44100,
			speakerRate:  44100,
			speed:        1.0,
			wantResample: false,
		},
		{
			name:         "48k file on 44.1k speaker resamples down",
			fileRate:     48000,
			speakerRate:  44100,
			speed:        1.0,
			wantResample: true,
			wantRatio:    48000.0 / 44100.0,
		},