# til / AppleScript: Spotify current position and track duration

Previously, we got the artist, track, and album name for what’s currently playing in Spotify. But, we are missing one piece that makes this information useful, how far along we’ve listened. So, let’s get the current position and the total duration of the track.

```
tell application "Spotify"
-- Spotify data
set currentPosition to player position
set currentPosition to round currentPosition rounding down
end tell
```

We’ll start by getting the current player position. If we run the script with only the first line, we see that the number is a `real`

, a number with decimals. Note that AppleScript returns the last value automatically. We’ll get an error if we try adding rounding to the first line, so we reassign the variable on the second line and tell AppleScript to round the value down. Note that comments are marked by `--`

.

```
tell application "Spotify"
-- Spotify data
set currentPosition to player position
set currentPosition to round currentPosition rounding down
set totalDuration to duration of current track
end tell
```

If we run the code above, we’ll see that `totalDuration`

is a large value. This is because duration is in milliseconds and `currentPosition`

is in seconds. We’ll convert `totalDuration`

to seconds by dividing by 1000.

```
tell application "Spotify"
-- Spotify data
set currentPosition to player position
set currentPosition to round currentPosition rounding down
set totalDuration to (duration of current track) / 1000
-- Player position
set current to my calculateTime(currentPosition)
-- Total duration
set total to my calculateTime(totalDuration)
return "(" & current & " / " & total & ")"
end tell
```

We want to display both the current position and total duration as `minutes:seconds`

. For this, we’ll create a function, `calculateTime`

, that takes seconds and returns a string. Note that we need to add **my** before the function name. This tells AppleScript that it should look for a custom function. This keyword is only necessary inside a `tell`

block.

```
on calculateTime(totalSeconds)
-- Calculate minutes and seconds
set min to (totalSeconds / 60)
set s to round min mod 1 * 60
set min to round min rounding down
-- Handle if seconds is ever exactly 60
if s is equal to 60 then
set s to 0
set min to min + 1
end if
-- Add leading zeros
if s is less than 10 then
set s to "0" & s
end if
return min & ":" & s
end calculateTime
```

We start by getting the number of minutes by dividing the provided number of seconds by 60. To get seconds, we use a modulo operation on the calculated minutes. This gives us the remainder, which is the number of seconds in decimal form. If we multiply this value by 60 we get the number of seconds. After that, we can round the minutes down to remove the remainder.

We also add two `if`

sections, one that handles if seconds would ever be *exactly* 60 for whatever reason and one that adds leading zeros to seconds.

As mentioned earlier, AppleScript will return the last value automatically, so we don’t need to add the `return`

keyword, but I think it makes it clearer.

The full code is provided below. If we copy this to “Script Editor” and run it, we’ll get something like `"(1:12 / 2:07)"`

in the result section.

```
tell application "Spotify"
-- Spotify data
set currentPosition to player position
set currentPosition to round currentPosition rounding down
set totalDuration to (duration of current track) / 1000
-- Player position
set current to my calculateTime(currentPosition)
-- Total duration
set total to my calculateTime(totalDuration)
return "(" & current & " / " & total & ")"
end tell
on calculateTime(totalSeconds)
-- Calculate minutes and seconds
set min to (totalSeconds / 60)
set s to round min mod 1 * 60
set min to round min rounding down
-- Handle if seconds is ever exactly 60
if s is equal to 60 then
set s to 0
set min to min + 1
end if
-- Add leading zeros
if s is less than 10 then
set s to "0" & s
end if
return min & ":" & s
end calculateTime
```