feat(player): переключатель качества звука на экране воспроизведения
Перепроверены все 594 рабочие станции на наличие битрейт-вариантов потока (скрипт-пробер). У 71 станции найдено по 2–4 качества (Record-флагманы 96/64/32, zaycev 256/128/48, ВГТРК 192/128/64, НАШЕ/Орфей/Шансон HQ и др.) — записаны в поле qualities в stations.json. HLS (EMG) и Love (UID-привязка) корректно пропущены. Клиент: модель StreamQuality, хранение в Room (миграция v5), предпочтение битрейта в настройках. На экране плеера — чип текущего качества (виден только если вариантов ≥2) и шторка «Качество звука» со ступенями; переключение на лету без сброса now-playing, выбор запоминается между станциями. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -9,5 +9,24 @@ data class Station(
|
||||
val genre: String,
|
||||
val tags: List<String>,
|
||||
val sortOrder: Int,
|
||||
val source: String = "record"
|
||||
val source: String = "record",
|
||||
// Доступные качества потока (битрейты). Пусто или один элемент — переключателя нет.
|
||||
val qualities: List<StreamQuality> = emptyList()
|
||||
)
|
||||
|
||||
/** Один вариант качества потока станции. */
|
||||
data class StreamQuality(
|
||||
val bitrate: Int, // kbps
|
||||
val url: String,
|
||||
val type: String // "aac" | "mp3"
|
||||
) {
|
||||
/** Человекочитаемая ступень качества по битрейту. */
|
||||
val tierLabel: String
|
||||
get() = when {
|
||||
bitrate >= 256 -> "Максимальное"
|
||||
bitrate >= 128 -> "Высокое"
|
||||
bitrate >= 96 -> "Среднее"
|
||||
bitrate >= 64 -> "Экономно"
|
||||
else -> "Минимальное"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,4 +14,7 @@ interface SettingsRepository {
|
||||
suspend fun setEqualizerPreset(preset: String)
|
||||
fun isRecordingEnabled(): Flow<Boolean>
|
||||
suspend fun setRecordingEnabled(enabled: Boolean)
|
||||
// Предпочитаемый битрейт (kbps). 0 = авто (брать качество по умолчанию станции).
|
||||
fun getPreferredBitrate(): Flow<Int>
|
||||
suspend fun setPreferredBitrate(bitrate: Int)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user