Alexa — выполнение фоновых задач во время audioPlayer.Play

Как можно выполнять какие-либо фоновые задачи, пока Alexa что-то воспроизводит с помощью audioPlayer.Play?

Ниже воспроизводится аудиопоток, но мне нужно выполнять другие задачи в фоновом режиме без вмешательства во время воспроизведения потока. Я знаю, что это возможно, потому что другие Навыки могут это сделать.

var handlers = {
  'LaunchRequest': function() {
    this.emit('Play');        
  },

  'Play': function() {   

    this.response.speak('Sure.').
    audioPlayerPlay(
        'REPLACE_ALL', 
        stream.url, 
        stream.url, 
        null, 
        0);

    this.emit(':responseReady');
    }
}

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


person omega1    schedule 05.06.2018    source источник


Ответы (1)


Alexa имеет несколько встроенных запросов, которые она отправляет вашему навыку на протяжении всего жизненного цикла аудиопотока именно для этой цели! Они следующие:

  1. AudioPlayer.PlaybackStarted — отправляется, когда начинается воспроизведение нового аудиоэлемента.
  2. AudioPlayer.PlaybackNearlyFinished — отправляется, когда аудиоэлемент почти закончился (чаще всего используется службой навыков для обработки очереди следующего элемента).
  3. AudioPlayer.PlaybackFinished — отправляется, когда заканчивается аудиоэлемент.

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

Чтобы использовать их, просто настройте обработчики в своем коде для любого из этих запросов и выполняйте там любые задачи, которые вам нужны!

Я вообще не знаком с node.js, но думаю, что конечный результат будет выглядеть примерно так:

var handlers = {
  'LaunchRequest': function() { /* your launch request code from above */ }
  'Play': function() { /* your play code from above */ }
  'AudioPlayer.PlaybackNearlyFinished': function() { 
    // Perform any background tasks here
  }
}
person Josh Hadik    schedule 05.06.2018
comment
Спасибо, я еще не пробовал, но AudioPlayer.PlaybackNearlyFinished работает только тогда, когда воспроизведение заканчивается? Поскольку это непрерывный (живой) поток, наверняка (PlaybackNearlyFinished) он никогда не будет вызываться, потому что поток никогда не заканчивается? - person omega1; 06.06.2018
comment
@ omega1 Да, насколько я знаю, он срабатывает только в конце каждого аудиоэлемента, поэтому, если вы транслируете только один элемент, он не будет отправлен. Но если это так, вы можете просто переключить мой пример на использование запроса PlaybackStarted и сделать там все, что вам нужно. - person Josh Hadik; 06.06.2018