53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package metadata
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
)
|
|
|
|
// AudioFileExtension represents a supported audio file extension.
|
|
type AudioFileExtension string
|
|
|
|
// Supported audio file extensions.
|
|
const (
|
|
MP3 AudioFileExtension = ".mp3"
|
|
FLAC AudioFileExtension = ".flac"
|
|
OGG AudioFileExtension = ".ogg"
|
|
WAV AudioFileExtension = ".wav"
|
|
)
|
|
|
|
// SupportedFileExtensions lists all supported audio formats.
|
|
var SupportedFileExtensions = []AudioFileExtension{MP3, FLAC, OGG, WAV}
|
|
|
|
// GetSupportedFileType checks if a file extension is supported.
|
|
func GetSupportedFileType(ext string) (AudioFileExtension, bool) {
|
|
for _, supported := range SupportedFileExtensions {
|
|
if string(supported) == ext {
|
|
return supported, true
|
|
}
|
|
}
|
|
|
|
return "", false
|
|
}
|
|
|
|
// GetTrackLengthMillis returns the duration of an audio file in milliseconds.
|
|
func GetTrackLengthMillis(path string) (int64, error) {
|
|
f, err := os.Open(path)
|
|
if err != nil {
|
|
return 0, fmt.Errorf("could not open file: %w", err)
|
|
}
|
|
|
|
streamer, format, err := DecodeFile(f)
|
|
if err != nil {
|
|
f.Close()
|
|
|
|
return 0, fmt.Errorf("error decoding file: %w", err)
|
|
}
|
|
|
|
lengthMillis := int64(float64(streamer.Len()*1000) / float64(format.SampleRate))
|
|
streamer.Close()
|
|
f.Close()
|
|
|
|
return lengthMillis, nil
|
|
}
|