Запуск таймера в фоновом режиме в течение х секунд [Alexa Skill] - PullRequest
0 голосов
/ 14 января 2019

Я делаю функцию, которая возвращает звук, но только в течение х секунд.

Если пользователь говорит

сыграй мне песню за х секунд

Я играю песню, но мне нужно отменить ее через X секунд. Поэтому я планирую перед запуском аудио запустить таймер на х секунд. Затем, как только таймер подойдет, чтобы установить уведомление для другой функции, которая будет возвращать новый голос, говоря, что ваше время истекло.

Я получил логику, хотя мне нужен способ запустить фоновый таймер.

def start_audio():
    card_title = "Start Audio"
    session_attributes = {}


    sound_url = 'https://s3.amazonaws.com/........mp3'

    speech_output = "<speak><audio src='{}'/> </speak>".format(sound_url)



    should_end_session = False
    return build_response(session_attributes, myCustomSSML(
        card_title, speech_output, None, should_end_session))

def myLaunchIntent():
    """ If we wanted to initialize the session to have some attributes we could
    add those here
    """
    session_attributes = {}
    card_title = "Welcome"
    speech_output = "Welcome to your custom Alexa application!"

    return start_audio()

В настоящее время:

-> На запуске

-> вернуться к началу звука

-> Мне нужно будет передать X секунд

-> X секунд запустит таймер

-> Как только таймер завершит работу, вызовите другую функцию, которая остановится

Если кто-то может привести меня в правильном направлении, например, показать мне, как запустить фоновый таймер с x секундами, а затем вызвать другую функцию, тогда я смогу взять на себя и масштабировать это еще выше.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Поскольку Alexa работает как приложение запроса / ответа, после отправки ответа больше нет возможности управлять воспроизведением, пока пользователь не выполнит что-либо и новый запрос не поступит в ваш обработчик.

Я могу представить два возможных способа достижения желаемой функциональности. Либо сгенерируйте короткий аудиоклип на лету (с чем-то вроде FFmpeg), либо предварительно сгенерируйте его на все возможные длительности (1 с, 2 с, 3 с ...) и подайте соответствующий.

0 голосов
/ 14 января 2019

Вы можете сделать что-то вроде этого:

def start_audio():
  card_title = "Start Audio"
  session_attributes = {}


  sound_url = 'https://s3.amazonaws.com/........mp3'

  speech_output = "<speak><audio src='{}'/> </speak>".format(sound_url)



  should_end_session = False
  return build_response(session_attributes, myCustomSSML(card_title, speech_output, None, should_end_session))

def myLaunchIntent():
  """ If we wanted to initialize the session to have some attributes we could
  add those here
  """
  session_attributes = {}
  card_title = "Welcome"
  speech_output = "Welcome to your custom Alexa application!"

from threading import Event as event
play="Y"
number=0
x=int(input("Audio length:"))
return start_audio()
for i in range(x):
  if play="Y":
    event().wait(1)
    number+=1
    if number==play:
      play="N"
  else:
    #insert way to stop audio here
...