Предварительный просмотр песен в Spotify с Applescript - NeedleDrop от Doug

Мы все знаем скрипты Дуга для iTunes. Однако с ростом потоковой музыки я больше не использую iTunes, а скорее Spotify.

Я пытался адаптировать скрипт NeedleDrop для предварительного просмотра песен. Скрипт позволяет установить

a - запуск с заданного времени, например, начало воспроизведения песен через 30 секунд; b - воспроизведение этой песни в течение определенного времени, например, 10 секунд.

Проблема заключается в том, что сценарий запускает первую песню в заданное время и воспроизводит ее в течение заданного времени, но затем следующие песни воспроизводятся в течение заданного времени, но начинаются с начала вместо заданного значения во времени.

Сценарий находится под лицензией GNU Дуга, и лицензия включена. Я публикую сценарий и экспортированное приложение из него. Если у кого есть идея?!

ССЫЛКА: Скачать

Вот сценарий, представленный в файле загрузки:

-- handler to get a number from user
to get_a_number(pmpt, addenda, defnum)
    set rez to (display dialog addenda & pmpt default answer defnum buttons {"Cancel ", "OK"}          default button 2 with title "Needle Drop")
    if button returned of rez starts with "cancel" then tell me to quit
    set myNumber to text returned of rez
    try
        if myNumber is "" then get_a_number(pmpt, "Enter only numbers..." & return & return, defnum)
        return (myNumber as integer)
    on error -- m number n
        get_a_number(pmpt, "Enter only numbers..." & return & return, defnum)
    end try
end get_a_number

global start_time -- seconds into each track to begin playing
global needle_drop_interval -- seconds to play each track

on run
-- get number of seconds between songs
    set needle_drop_interval to my get_a_number("Play each track for how many seconds?", "", "10")
-- get seconds into each track to play
    set start_time to my get_a_number("How many seconds into each track to start playing?", "", "10")

-- play first song in the playlist
    tell application "Spotify"
        activate
        set player position to start_time
        play
        delay needle_drop_interval
    end tell
end run

on idle
    tell application "Spotify"
        if player state is not playing then tell me to quit
        pause
        next track
        set player position to start_time
        play
    end tell
return needle_drop_interval
end idle

on quit
    try
        tell application "Spotify" to stop
    end try
    continue quit
    error number -128
end quit

2 ответа

Решение

Удивительно!

Тем не менее, после некоторых песен ошибка все еще случалась иногда, которая, кажется, полностью исправлена ​​добавлением задержки до установленной позиции игрока.

Это может звучать противоречиво, но лучше для меня.

Спасибо!

on idle
    tell application "Spotify"
        if player state is not playing then tell me to quit
        next track
        pause
        delay 1
        set player position to start_time
        play
    end tell
    return needle_drop_interval
end idle

Предоставленный скрипт отлично работает для автономных плейлистов, но не для потоковых. Spotify, вероятно, не имеет времени для буферизации дорожки или чего-то еще.

Когда я добавил задержку, чтобы дать спойтизации время для буферизации, он работал нормально. (Вы можете экспериментировать с более короткими и длинными задержками)

tell application "Spotify"
    if player state is not playing then tell me to quit
    next track
    pause
    set player position to start_time
    delay 1
    play
end tell

Обратите внимание на переключение строк между "следующей дорожкой" и "паузой"

Другие вопросы по тегам