Skip to content

Instantly share code, notes, and snippets.

@pavlo
Created November 13, 2017 21:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pavlo/865d927b1df8aba4eed45282e47fd46c to your computer and use it in GitHub Desktop.
Save pavlo/865d927b1df8aba4eed45282e47fd46c to your computer and use it in GitHub Desktop.
package com.github.pavlo.bibi.tmp;
import com.amazon.speech.json.SpeechletRequestEnvelope;
import com.amazon.speech.speechlet.*;
import com.amazon.speech.speechlet.interfaces.audioplayer.AudioItem;
import com.amazon.speech.speechlet.interfaces.audioplayer.AudioPlayer;
import com.amazon.speech.speechlet.interfaces.audioplayer.PlayBehavior;
import com.amazon.speech.speechlet.interfaces.audioplayer.Stream;
import com.amazon.speech.speechlet.interfaces.audioplayer.directive.PlayDirective;
import com.amazon.speech.speechlet.interfaces.audioplayer.request.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
public class LongTokensSpeechletWorks implements SpeechletV2, AudioPlayer {
private static final Logger log = LoggerFactory.getLogger(LongTokensSpeechletWorks.class);
private static final List<File> playlist;
static {
playlist = new ArrayList<>();
playlist.add(new File("1qYO-7ndpgWA2bpKcDkvUon3Kc_QRA44g",
"1ZCpF50D4MEse2nu2nmhCrU9UvC1O7sbV",
"https://drive.google.com/uc?id=1ZCpF50D4MEse2nu2nmhCrU9UvC1O7sbV&export=download"));
playlist.add(new File("1qYO-7ndpgWA2bpKcDkvUon3Kc_QRA44g",
"1zogD436vP5o7McjFM8ZV4lHGf1rkkZ1c",
"https://drive.google.com/uc?id=1zogD436vP5o7McjFM8ZV4lHGf1rkkZ1c&export=download"));
playlist.add(new File("1qYO-7ndpgWA2bpKcDkvUon3Kc_QRA44g",
"1XHFb9rWI4svZvXJTQKD8dMT_Xfb3bh44",
"https://drive.google.com/uc?id=1XHFb9rWI4svZvXJTQKD8dMT_Xfb3bh44&export=download"));
}
@Override
public SpeechletResponse onIntent(SpeechletRequestEnvelope<IntentRequest> requestEnvelope) {
log.debug("Entered `onIntent`");
int index = 0;
File file = playlist.get(index);
Stream stream = new Stream();
stream.setToken(file.getToken());
stream.setUrl(file.getUrl());
stream.setOffsetInMilliseconds(0L);
AudioItem audioItem = new AudioItem();
audioItem.setStream(stream);
PlayDirective playDirective = new PlayDirective();
playDirective.setAudioItem(audioItem);
playDirective.setPlayBehavior(PlayBehavior.REPLACE_ALL);
List<Directive> directives = new ArrayList<>();
directives.add(playDirective);
SpeechletResponse result = new SpeechletResponse();
result.setDirectives(directives);
log.debug("Finished `onIntent`");
return result;
}
@Override
public SpeechletResponse onPlaybackNearlyFinished(SpeechletRequestEnvelope<PlaybackNearlyFinishedRequest> requestEnvelope) {
log.debug("Entered `onPlaybackNearlyFinished`");
String token = requestEnvelope.getRequest().getToken();
log.debug("Token: {}", token);
log.debug("OffsetInMilliseconds: {}", requestEnvelope.getRequest().getOffsetInMilliseconds());
int indexThatIsFinishing = Integer.MAX_VALUE - 1;
for(int i = 0; i < playlist.size(); i++) {
if (playlist.get(i).getToken().equals(token)) {
indexThatIsFinishing = i;
break;
}
}
int indexThatIsNext = indexThatIsFinishing + 1;
if (indexThatIsNext >= playlist.size()) {
log.debug("Reached the end of the playlist, returning null");
return null;
}
File file = playlist.get(indexThatIsNext);
Stream stream = new Stream();
stream.setToken(file.getToken());
stream.setUrl(file.getUrl());
stream.setExpectedPreviousToken(token);
stream.setOffsetInMilliseconds(0L);
AudioItem audioItem = new AudioItem();
audioItem.setStream(stream);
PlayDirective playDirective = new PlayDirective();
playDirective.setAudioItem(audioItem);
playDirective.setPlayBehavior(PlayBehavior.ENQUEUE);
List<Directive> directives = new ArrayList<>();
directives.add(playDirective);
SpeechletResponse result = new SpeechletResponse();
result.setDirectives(directives);
log.debug("Finished `onPlaybackNearlyFinished`");
return result;
}
static class File {
private String folderId;
private String fileId;
private String url;
File(String folderId, String fileId, String url) {
this.folderId = folderId;
this.fileId = fileId;
this.url = url;
}
String getFolderId() {
return folderId;
}
void setFolderId(String folderId) {
this.folderId = folderId;
}
String getFileId() {
return fileId;
}
void setFileId(String fileId) {
this.fileId = fileId;
}
String getUrl() {
return url;
}
void setUrl(String url) {
this.url = url;
}
String getToken() {
return url;
}
}
@Override
public void onSessionEnded(SpeechletRequestEnvelope<SessionEndedRequest> requestEnvelope) {
}
@Override
public SpeechletResponse onPlaybackFailed(SpeechletRequestEnvelope<PlaybackFailedRequest> requestEnvelope) {
return null;
}
@Override
public SpeechletResponse onPlaybackFinished(SpeechletRequestEnvelope<PlaybackFinishedRequest> requestEnvelope) {
return null;
}
@Override
public SpeechletResponse onPlaybackStarted(SpeechletRequestEnvelope<PlaybackStartedRequest> requestEnvelope) {
return null;
}
@Override
public SpeechletResponse onPlaybackStopped(SpeechletRequestEnvelope<PlaybackStoppedRequest> requestEnvelope) {
return null;
}
@Override
public void onSessionStarted(SpeechletRequestEnvelope<SessionStartedRequest> requestEnvelope) {
}
@Override
public SpeechletResponse onLaunch(SpeechletRequestEnvelope<LaunchRequest> requestEnvelope) {
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment