So I tried to play the audio on Alexa skill from my S3 Bucket, from the test tab, it show but in fact, I can't hear any sound. Another fact is, that I tried to use the sample audio from https://developer.amazon.com/en-US/docs/alexa/custom-skills/ask-soundlibrary.html and it is worked, but why it won't work when it comes from my own S3 Bucket?
Notes:
I've tried to test the skill using my mobile phone also.
I've tried to encode the audio using FFmpeg.
I've tried to use Jovo to convert the audio. https://v3.jovo.tech/audio-converter
I don't know how to fix this error.
There is no error message on cloud watch.
Assumptions: There is some problem related to the audio resources or there is more set to play audio from S3 Bucket since the sample audio is working.
Steps to reproduce:
Build the interaction model
Encode the audio to make it Alexa skill friendly (fulfill the requirements, like sample rate, etc), I used and tried all of these:
A:
ffmpeg -i <input-file> -ac 2 -codec:a libmp3lame -b:a 48k -ar 16000 -write_xing 0 <output-file>
B:
ffmpeg -i <input-file> -ac 2 -codec:a libmp3lame -b:a 48k -ar 24000 -write_xing 0 <output-file>
C:
ffmpeg -y -i input.mp3 -ar 16000 -ab 48k -codec:a libmp3lame -ac 1 output.mp3
Upload the audio resources on S3Bucket Audio sample on s3 storage but none of them are produce any sounds
Use the link and insert it to APLA.json
{
"type": "APLA",
"version": "0.91",
"description": "Simple document that generates speech",
"mainTemplate": {
"parameters": [
"payload"
],
"type": "Sequencer",
"items": [
{
"type": "Audio",
"source": "https://72578561-d9d8-47b4-811c-cafbcbc5ddb9-us-east-1.s3.amazonaws.com/Media/one-small-step-alexa-24.mp3"
}
]
}
}
notes: I change the link sources based on audio that I tried.
the intent on lambda_function.py:
def _load_apl_document(file_path):
# type: (str) -> Dict[str, Any]
"""Load the apl json document at the path into a dict object."""
with open(file_path) as f:
return json.load(f)
class LaunchRequestHandler(AbstractRequestHandler):
"""Handler for Skill Launch."""
def can_handle(self, handler_input):
# type: (HandlerInput) -> bool
return ask_utils.is_request_type("LaunchRequest")(handler_input)
def handle(self, handler_input):
# type: (HandlerInput) -> Response
logger.info("In LaunchRequestHandler")
# type: (HandlerInput) -> Response
speak_output = "Hello World!"
# .ask("add a reprompt if you want to keep the session open for the user to respond")
return (
handler_input.response_builder
#.speak(speak_output)
.add_directive(
RenderDocumentDirective(
token="pagerToken",
document=_load_apl_document("APLA.json"),
datasources={}
)
)
.response
)
Deploy
Test it
The result of the test on my end: The response for testing
the JSON response:
{
"body": {
"version": "1.0",
"response": {
"directives": [
{
"type": "Alexa.Presentation.APLA.RenderDocument",
"token": "pagerToken",
"document": {
"type": "APLA",
"version": "0.91",
"description": "Simple document that generates speech",
"mainTemplate": {
"parameters": [
"payload"
],
"type": "Sequencer",
"items": [
{
"type": "Audio",
"source": "https://72578561-d9d8-47b4-811c-cafbcbc5ddb9-us-east-1.s3.amazonaws.com/Media/one-small-step-alexa-24.mp3"
}
]
}
},
"datasources": {}
}
],
"type": "_DEFAULT_RESPONSE"
},
"sessionAttributes": {},
"userAgent": "ask-python/1.16.1 Python/3.7.12"
}
}
On my cloud Watch: Cloud Watch