Files
pipu-music/services/api/internal/uploads/quality.go
T
mrleo1nidandCursor 066ba24834
ci / api / api (push) Successful in 40s
ci / db / db (push) Successful in 1m3s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Failing after 1m48s
ci / docker / docker (образы собираются — их сервер собирает сам при обновлении) (push) Successful in 46s
ci / ts / ts (packages + web) (push) Failing after 4m57s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 5m7s
feat: finish the upload, playback, and test gaps from the docs
Quality upgrades, batch covers, staging preview, and resume after reload are in the queue. Loudness and crossfade work on web and Android, and the documented checks now have suites.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 09:37:53 +03:00

32 lines
1022 B
Go

package uploads
import "strings"
// BetterQuality — загружаемый файл заметно лучше уже лежащего в библиотеке (docs/uploads.md#4).
// Lossless вместо lossy, либо тот же класс и битрейт выше хотя бы на 32 кбит/с и на 20%.
func BetterQuality(inCodec, inFormat string, inBitrate int, exCodec, exFormat string, exBitrate int) bool {
inLoss, exLoss := lossless(inCodec, inFormat), lossless(exCodec, exFormat)
if inLoss && !exLoss {
return true
}
if inLoss == exLoss && inBitrate > 0 && exBitrate > 0 && inBitrate >= exBitrate+32_000 && inBitrate*5 >= exBitrate*6 {
return true
}
return false
}
func lossless(codec, format string) bool {
switch strings.ToLower(codec) {
case "flac", "alac", "wavpack", "ape", "tta":
return true
}
if strings.HasPrefix(strings.ToLower(codec), "pcm_") {
return true
}
switch strings.ToLower(format) {
case "flac", "wav", "aiff", "aif", "wv":
return true
}
return false
}