Files
yellowjacket/backend/metadata/decoder.go
T
2026-02-25 21:16:29 -05:00

37 lines
887 B
Go

// Package metadata handles audio file decoding and metadata extraction.
package metadata
import (
"errors"
"fmt"
"os"
"path/filepath"
"github.com/gopxl/beep/v2"
"github.com/gopxl/beep/v2/flac"
"github.com/gopxl/beep/v2/mp3"
"github.com/gopxl/beep/v2/vorbis"
"github.com/gopxl/beep/v2/wav"
)
// ErrUnsupportedFileType is returned when the audio file type is not supported.
var ErrUnsupportedFileType = errors.New("unsupported file type")
// DecodeFile decodes an audio file into a stream seeker and format.
func DecodeFile(f *os.File) (beep.StreamSeekCloser, beep.Format, error) {
ext := filepath.Ext(f.Name())
switch ext {
case ".mp3":
return mp3.Decode(f)
case ".flac":
return flac.Decode(f)
case ".ogg":
return vorbis.Decode(f)
case ".wav":
return wav.Decode(f)
default:
return nil, beep.Format{}, fmt.Errorf("%w: %s", ErrUnsupportedFileType, ext)
}
}