Как отобразить оставшееся время звучания песни Spotify на панели Touch Bar?

Как отобразить оставшееся время звучания песни Spotify на панели Touch Bar?

В настоящее время я использую BetterTouchTool (BTT) для автоматизации задач. Я хотел сделать скрипт, который бы отображал оставшееся время песни (в формате MM: SS) в виде метки на моей сенсорной панели.

Вот что я попытался сделать для достижения этой цели (настроить кнопку для запуска этого скрипта):

если приложение "Spotify" запущено, то скажите приложению "Spotify" вернуть (продолжительность текущего трека) - (позиция проигрывателя) end tell else return "" end if

Он не выдает мне ожидаемого результата. Кто-нибудь знает, как это исправить?

решение1

tell application "Spotify" to if running then tell ¬
    (duration of current track) - (player position) ¬
    to return "" & (it div minutes) & ":" & (it mod minutes)

return ""

Однако в моей системеСпотифайнеправильно сообщает длительность трека в AppleScript.

Системная информация: Версия AppleScript:2.7 Версия системы:10.13.6

решение2

Вот что мне помогло:

tell application "Spotify" to if running then
    set song_duration to (duration of current track) / 1000
    set song_duration_minutes to song_duration div minutes
    set song_duration_seconds to song_duration mod minutes div 1
    -- pad with 0 if necessary 
    if (count of ("" & song_duration_seconds)) is 1 then
        set song_duration_seconds to "0" & song_duration_seconds
    end if
    set player_position_minutes to (player position) div minutes
    set player_postition_seconds to (player position) mod minutes div 1
    -- pad with 0 if necessary
    if (count of ("" & player_postition_seconds)) is 1 then
        set player_postition_seconds to "0" & player_postition_seconds
    end if
    return "" & player_position_minutes & ":" & player_postition_seconds & "/" & song_duration_minutes & ¬
        ":" & song_duration_seconds
else
    return ""
end if

Он будет отображать "1:43/3:31"

Длительность песни возвращается в миллисекундах, поэтому, чтобы получить минуты, сначала нужно разделить на 1000, чтобы получить секунды, а затем разделить на, minutesчтобы получить минуты. Для секунд это даст доли секунды, поэтому я добавил d, div 1чтобы преобразовать их в int (целое число, без дробей). player positionуказано в секундах, так проще.

Связанный контент