В примере jukebox.c из libspotify я подсчитываю все кадры текущего трека в обратном вызове music_delivery
. Когда end_of_track
называется количеством кадров, каждый раз, когда я играл на той же дорожке. Таким образом, end_of_track
вызывается через несколько секунд после окончания песни. И этот временной интервал отличается для каждого воспроизведения.Разное количество кадров для одного и того же трека
Как определить, действительно ли песня действительно закончена? Должен ли я взять продолжительность песни в секундах и умножить ее на частоту дискретизации, чтобы позаботиться о том, когда песня закончилась?
Почему больше кадров доставлено, чем необходимо для дорожки? И почему end_of_track
не вызывается на его реальном конце? Или я чего-то не хватает?
Я рассчитываю только в обратном вызове 'music_delivery' не в реализации звукового драйвера. Я добавляю каждый параметр num_frames к глобальной переменной и печатаю его в 'end_of_track'. Интересно, почему каждый раз, когда я транслирую один и тот же трек, количество кадров отличается. Когда продолжительность песни равна, например, 3:10, чем общее количество отсчетов, должно быть всегда одинаковым, учитывая, что частота выборки одинакова. – dnlkng
Является ли это причиной других проблем, кроме смены счетчика? Существует ряд условий, которые могут привести к тому, что бэкэнд будет предоставлять другую версию трека (особенно между разными пользователями), которые выходят за рамки Stack Overflow. Кроме того, обратные вызовы доставки музыки вызываются в другом потоке ко всему остальному, поэтому убедитесь, что вы не сталкиваетесь с ошибками при загрузке при сбросе счетчика/etc. – iKenndac
Нет, я думаю, что никаких реальных проблем нет. Я думал, что могу уведомить свой уровень воспроизведения, когда был вызван «end_of_track», чтобы обновить состояние воспроизведения/паузы. Кроме того, я думал, что могу предположить, что доставляется только полная песня и не больше аудиоданных, даже если это тишина. – dnlkng