90 lines
2.5 KiB
Python
90 lines
2.5 KiB
Python
import logging
|
|
import os
|
|
|
|
from flask import Flask, json, render_template
|
|
from flask_ask import Ask, request, session, question, statement, context, audio, current_stream
|
|
|
|
app = Flask(__name__)
|
|
ask = Ask(app, "/")
|
|
logger = logging.getLogger()
|
|
logging.getLogger('flask_ask').setLevel(logging.INFO)
|
|
|
|
|
|
@ask.launch
|
|
def launch():
|
|
card_title = 'Audio Example'
|
|
text = 'Welcome to an audio example. You can ask to begin demo, or try asking me to play the sax.'
|
|
prompt = 'You can ask to begin demo, or try asking me to play the sax.'
|
|
return question(text).reprompt(prompt).simple_card(card_title, text)
|
|
|
|
|
|
@ask.intent('DemoIntent')
|
|
def demo():
|
|
speech = "Here's one of my favorites"
|
|
stream_url = 'https://www.vintagecomputermusic.com/mp3/s2t9_Computer_Speech_Demonstration.mp3'
|
|
return audio(speech).play(stream_url, offset=93000)
|
|
|
|
|
|
# 'ask audio_skil Play the sax
|
|
@ask.intent('SaxIntent')
|
|
def george_michael():
|
|
speech = 'yeah you got it!'
|
|
stream_url = 'https://ia800203.us.archive.org/27/items/CarelessWhisper_435/CarelessWhisper.ogg'
|
|
return audio(speech).play(stream_url)
|
|
|
|
|
|
@ask.intent('AMAZON.PauseIntent')
|
|
def pause():
|
|
return audio('Paused the stream.').stop()
|
|
|
|
|
|
@ask.intent('AMAZON.ResumeIntent')
|
|
def resume():
|
|
return audio('Resuming.').resume()
|
|
|
|
@ask.intent('AMAZON.StopIntent')
|
|
def stop():
|
|
return audio('stopping').clear_queue(stop=True)
|
|
|
|
|
|
|
|
# optional callbacks
|
|
@ask.on_playback_started()
|
|
def started(offset, token):
|
|
_infodump('STARTED Audio Stream at {} ms'.format(offset))
|
|
_infodump('Stream holds the token {}'.format(token))
|
|
_infodump('STARTED Audio stream from {}'.format(current_stream.url))
|
|
|
|
|
|
@ask.on_playback_stopped()
|
|
def stopped(offset, token):
|
|
_infodump('STOPPED Audio Stream at {} ms'.format(offset))
|
|
_infodump('Stream holds the token {}'.format(token))
|
|
_infodump('Stream stopped playing from {}'.format(current_stream.url))
|
|
|
|
|
|
@ask.on_playback_nearly_finished()
|
|
def nearly_finished():
|
|
_infodump('Stream nearly finished from {}'.format(current_stream.url))
|
|
|
|
@ask.on_playback_finished()
|
|
def stream_finished(token):
|
|
_infodump('Playback has finished for stream with token {}'.format(token))
|
|
|
|
@ask.session_ended
|
|
def session_ended():
|
|
return "{}", 200
|
|
|
|
def _infodump(obj, indent=2):
|
|
msg = json.dumps(obj, indent=indent)
|
|
logger.info(msg)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if 'ASK_VERIFY_REQUESTS' in os.environ:
|
|
verify = str(os.environ.get('ASK_VERIFY_REQUESTS', '')).lower()
|
|
if verify == 'false':
|
|
app.config['ASK_VERIFY_REQUESTS'] = False
|
|
app.run(debug=True)
|
|
|