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

omega1 спросил: 12 мая 2018 в 04:44 в: node.js

Как можно выполнять любые фоновые задачи, в то время как 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');
    }
}

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

1 ответ

Josh Hadik ответил: 12 мая 2018 в 10:21

У 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
  }
}
omega1 ответил: 13 мая 2018 в 06:33
Спасибо, я еще не пробовал это, но работает ли AudioPlayer.PlaybackNearlyFinished, только когда воспроизведение закончится? Поскольку это непрерывный (живой) поток, безусловно (PlaybackNearlyFinished), это никогда не будет вызвано, потому что поток никогда не заканчивается?
Josh Hadik ответил: 13 мая 2018 в 12:47
@ omega1 Да, насколько я знаю, это только срабатывает ближе к концу каждого звукового элемента, поэтому, если вы только передаете один элемент, он не отправит. Но если это так, вы можете просто переключить мой пример на использование запроса PlaybackStarted и сделать все, что вам нужно.