feat(recordings): перемотка записей + тайм-коды треков
1) Перемотка: записи эфира — сырой ADTS-AAC/MP3 без индексов, ExoPlayer считал их неперематываемыми (старт всегда с нуля). Включён CBR-seeking (DefaultExtractorsFactory.setConstantBitrateSeekingEnabled) — seek работает. 2) Тайм-коды треков: при записи фиксируются смены now-playing с offset от начала (модель TrackMarker, колонка markers в recordings, миграция v6, захват через NowPlayingRepository — свой поллинг, не зависит от экрана). В плеере записи — список «Треки в записи»: тайм-код + название, тап переходит к моменту, текущий трек подсвечен. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -8,5 +8,17 @@ data class Recording(
|
||||
val startTime: Long,
|
||||
val endTime: Long?,
|
||||
val trackName: String?,
|
||||
val duration: Long?
|
||||
val duration: Long?,
|
||||
// Тайм-коды треков, звучавших во время записи (для навигации при прослушивании).
|
||||
val markers: List<TrackMarker> = emptyList()
|
||||
)
|
||||
|
||||
/** Отметка трека в записи: смещение от начала записи + что играло. */
|
||||
data class TrackMarker(
|
||||
val offsetMs: Long,
|
||||
val artist: String,
|
||||
val song: String
|
||||
) {
|
||||
val title: String
|
||||
get() = listOf(artist, song).filter { it.isNotBlank() }.joinToString(" — ")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user