From e8539a4ea1ed31cdad97590c96ebc06c816592bf Mon Sep 17 00:00:00 2001 From: Arthur Jamet Date: Wed, 11 Mar 2026 19:30:02 +0000 Subject: [PATCH] Transcoder: Audio Quality Enum --- transcoder/src/audioquality.go | 60 ++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 transcoder/src/audioquality.go diff --git a/transcoder/src/audioquality.go b/transcoder/src/audioquality.go new file mode 100644 index 00000000..2c0fc6b3 --- /dev/null +++ b/transcoder/src/audioquality.go @@ -0,0 +1,60 @@ +package src + +import ( + "net/http" + + "github.com/labstack/echo/v4" +) + +type AudioQuality string + +const ( + K128 AudioQuality = "128k" + K192 AudioQuality = "192k" + K256 AudioQuality = "256k" + K320 AudioQuality = "320k" + M1 AudioQuality = "1411k" // AKA CD Quality (1,411mbps) + AOriginal AudioQuality = "original" +) + +var AudioQualities = []AudioQuality{K128, K192, K256, K320, M1} + +func AudioQualityFromString(str string) (AudioQuality, error) { + if str == string(AOriginal) { + return AOriginal, nil + } + + for _, quality := range AudioQualities { + if string(quality) == str { + return quality, nil + } + } + return AOriginal, echo.NewHTTPError(http.StatusBadRequest, "Invalid quality") +} + +func (a AudioQuality) Bitrate() uint32 { + switch a { + case K128: + return 128_000 + case K192: + return 192_000 + case K256: + return 256_000 + case K320: + return 320_000 + case M1: + return 1_411_000 + case AOriginal: + panic("Original quality must be handled specially") + } + panic("Invalid quality value") +} + +func (audio *Audio) Quality() AudioQuality { + for _, quality := range AudioQualities { + if quality.Bitrate() >= audio.Bitrate { + return quality + } + } + return K128 +}