├── .gitignore ├── LICENSE.txt ├── README.md ├── docs └── skill_setup.md ├── index.js ├── misc ├── SkillCertificate.png ├── SkillConfiguration.png ├── SkillGettingStarted.png ├── SkillInformation.png ├── SkillIntentSchema.png ├── SkillSampleUtterances.png ├── SkillServiceSimulator.png ├── SkillTest.png └── bst-proxy-output.png ├── package.json └── speechAssets ├── IntentSchema.json └── SampleUtterances.txt /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | https://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | Copyright 2017 Bespoken. 179 | 180 | Licensed under the Apache License, Version 2.0 (the "License"); 181 | you may not use this file except in compliance with the License. 182 | You may obtain a copy of the License at 183 | 184 | https://www.apache.org/licenses/LICENSE-2.0 185 | 186 | Unless required by applicable law or agreed to in writing, software 187 | distributed under the License is distributed on an "AS IS" BASIS, 188 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 189 | See the License for the specific language governing permissions and 190 | limitations under the License. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | Part 1 3 | | Part 2 4 | | Part 3 5 |

6 | 7 | # The Super Simple AudioPlayer - Getting Started 8 | This project is meant to make it as easy as possible to get started using the [Amazon Alexa AudioPlayer](https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/custom-audioplayer-interface-reference). 9 | 10 | It is an AWS Lambda project with no code dependencies and no frameworks. It is meant to illustrate the core behavior of the AudioPlayer in the simplest manner possible. 11 | 12 | This is the first iteration - we will be expanding on this as a tutorial that guides users through adding behavior to their AudioPlayer skill. 13 | 14 | ## Setting Up Locally 15 | To begin, just clone this repository: 16 | ``` 17 | git clone https://github.com/bespoken/super-simple-audio-player.git 18 | ``` 19 | 20 | To follow along, also install the BST (Bespoken Tools) CLI: 21 | ``` 22 | npm install bespoken-tools -g 23 | ``` 24 | 25 | ## Setting Up The Alexa Skill 26 | There are a number of steps to this. 27 | 28 | For a detailed walk-through, just [follow this guide](https://github.com/bespoken/super-simple-audio-player/blob/Part1/docs/skill_setup.md). 29 | 30 | ## What It Does 31 | This skill is very simple. It is meant to be a starting point for understanding how the AudioPlayer works. What does it do? 32 | 33 | * Launches and prompts the user to say "Play" 34 | * Starts playing a podcast when the user says "Play" 35 | * Pauses and Resumes, at the user's request 36 | 37 | We will expand on the behavior in future postings, but this is meant to get someone started as easily as possible. 38 | 39 | These instructions assume you are using the `bst proxy` for testing locally on your laptop. Alternatively, this can be run directly from the AWS Lambda environment. 40 | 41 | ## Testing With The Service Simulator 42 | To ensure everything is working correctly, make sure that your bst proxy is running: 43 | ``` 44 | bst proxy lambda index.js 45 | ``` 46 | (Again, this should be run from the directory where you cloned the project, such as /Users/jpk/dev/super-simple-audio-player) 47 | 48 | Then on the "Test" section, go to the **Service Simulator** section at the bottom and type `Play`. Then click the `Ask Super Simple Player` button. It should return output like below: 49 | 50 | ![Service Simulator](https://raw.githubusercontent.com/bespoken/super-simple-audio-player/Part1/misc/SkillServiceSimulator.png) 51 | 52 | ## Testing With An Echo Device 53 | Again, make sure that your bst proxy is running: 54 | ``` 55 | bst proxy lambda index.js 56 | ``` 57 | 58 | Then just talk to your Echo device - say something like: 59 | ``` 60 | Alexa, tell Simple Player to Play 61 | ``` 62 | 63 | You should also be able to interact with it saying "Alexa Pause" and "Alexa Resume". 64 | 65 | ## What's Next 66 | In Part 2, [we show you how to use the AudioPlayer queue](https://github.com/bespoken/super-simple-audio-player/blob/Part2/README.md), to move through a playlist of tracks automatically as well as at the user's command. 67 | -------------------------------------------------------------------------------- /docs/skill_setup.md: -------------------------------------------------------------------------------- 1 | # Configuring The Skill With Amazon 2 | This tutorial walks you through configuring your Alexa Skill on the Amazon Developer Console. 3 | 4 | If you have done this before, these steps will be fairly painless. 5 | 6 | And if it is your first time, no worries. We will guide you through it. 7 | 8 | ## Signing In 9 | Go to the Alexa Skills List on Amazon Developer console: 10 | https://developer.amazon.com/edw/home.html#/skills/list 11 | 12 | If you have not already signed up for Amazon Developer account, do so now. We'll wait here for you :-) 13 | 14 | Once you are set, select the "Skills" tab and then "Add A New Skill" on the top-right. 15 | 16 | ### Skill Information 17 | 18 | Provide the Skill Information: 19 | **Skill Type** is `Custom Interaction Model` 20 | **Name** is `Super Simple Player` 21 | **Invocation Name** is `simple player` 22 | **Audio Player** under Global Fields is set to `Yes` 23 | 24 | It should look like this when all filled out: 25 | 26 | ![Skill Information](https://raw.githubusercontent.com/bespoken/super-simple-audio-player/Part1/misc/SkillInformation.png) 27 | 28 | Once everything is entered, select "Next". Now we setup the Interaction Model. 29 | 30 | ### Skill Interaction Model 31 | For the skill interaction model, 32 | cut and paste the contents of [speechAssets/IntentSchema.json](https://raw.githubusercontent.com/bespoken/super-simple-audio-player/Part1/speechAssets/IntentSchema.json) into the Intent Schema section: 33 | 34 | ![Intent Schema](https://raw.githubusercontent.com/bespoken/super-simple-audio-player/Part1/misc/SkillIntentSchema.png) 35 | 36 | Then cut and paste the contents of [speechAssets/SampleUtterances.txt](https://raw.githubusercontent.com/bespoken/super-simple-audio-player/Part1/speechAssets/SampleUtterances.txt) into the Sample Utterances field: 37 | 38 | ![Intent Schema](https://raw.githubusercontent.com/bespoken/super-simple-audio-player/Part1/misc/SkillSampleUtterances.png) 39 | 40 | The click "Next" again. It may take a minute to save as it parses the intents and utterances. 41 | 42 | ### Skill Configuration 43 | First, set **Service Endpoint Type** to `HTTPS`. 44 | 45 | Then, set **Geographical Region** to `North America`. 46 | 47 | Finally, enter your bst proxy URL in the field for `North America`. Don't know your bst proxy URL? It's easy to get. 48 | 49 | If you have not already installed Bespoken Tools, you can do it now: 50 | ``` 51 | npm install bespoken-tools -g 52 | ``` 53 | 54 | If you get an error, you may need to run instead: 55 | ``` 56 | sudo npm install bespoken-tools -g 57 | ``` 58 | 59 | Once bespoken-tools are installed, go to a terminal window and enter the directory where you cloned this project. Type there: 60 | ``` 61 | bst proxy lambda index.js --verbose 62 | ``` 63 | 64 | It should print out something like this: 65 | 66 | ![Proxy Output](https://raw.githubusercontent.com/bespoken/super-simple-audio-player/Part1/misc/bst-proxy-output.png) 67 | 68 | Copy and paste the highlighted part into the configuration window. It should look like this: 69 | ![Skill Configuration](https://raw.githubusercontent.com/bespoken/super-simple-audio-player/Part1/misc/SkillConfiguration.png) 70 | 71 | Then hit "Next" again. 72 | 73 | ### Skill Certificate 74 | For the Skill Certificate screen, simply select: 75 | `My development endpoint is a sub-domain of a domain that has a wildcard certificate from a certificate authority` 76 | 77 | The page should look like this: 78 | ![Skill Certificate](https://raw.githubusercontent.com/bespoken/super-simple-audio-player/Part1/misc/SkillCertificate.png) 79 | 80 | Then click "Next" one more time. 81 | 82 | ### Skill Testing 83 | On the Skill Testing page, make sure to toggle the button at the top to `Enabled`. This allows you to test your skill with real Alexa devices, such as Echo, Dot or Tap. 84 | 85 | ## Quick Confirmation 86 | To ensure everything is working correctly, make sure that your bst proxy is running: 87 | ``` 88 | bst proxy lambda index.js --verbose 89 | ``` 90 | (Again, this should be run from the directory where you cloned the project, such as /Users/jpk/dev/super-simple-audio-player) 91 | 92 | Then on the "Test" section, go to the **Service Simulator** section at the bottom and type `Play`. Then click the `Ask Super Simple Player` button. It should return output like below: 93 | 94 | ![Service Simulator](https://raw.githubusercontent.com/bespoken/super-simple-audio-player/Part1/misc/SkillServiceSimulator.png) 95 | 96 | Now you are ready to do awesome stuff with the AudioPlayer! 97 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | // This is only initialized when the Lambda is, so it is preserved across calls 2 | // It is NOT a real database, but can be used for testing, as JavaScript Lambdas tend to live for a few hours 3 | // Stay tuned for a more sophisticated example that uses DynamoDB 4 | var lastPlayedByUser = {}; 5 | var podcastURL = "https://feeds.soundcloud.com/stream/309340878-user-652822799-episode-010-building-an-alexa-skill-with-flask-ask-with-john-wheeler.mp3"; 6 | 7 | const bst = require("bespoken-tools"); 8 | bst.Logless.Domain = "logless-dev.bespoken.tools"; 9 | 10 | // Entry-point for the Lambda 11 | exports.handler = bst.Logless.capture("a756512f-d091-477a-a4f9-fd57c916787a", function(event, context) { 12 | var player = new SimplePlayer(event, context); 13 | player.handle(); 14 | }); 15 | 16 | // The SimplePlayer has helpful routines for interacting with Alexa, within minimal overhead 17 | var SimplePlayer = function (event, context) { 18 | this.event = event; 19 | this.context = context; 20 | }; 21 | 22 | // Handles an incoming Alexa request 23 | SimplePlayer.prototype.handle = function () { 24 | var requestType = this.event.request.type; 25 | var userId = this.event.context ? this.event.context.System.user.userId : this.event.session.user.userId; 26 | 27 | // On launch, we tell the user what they can do (Play audio :-)) 28 | if (requestType === "LaunchRequest") { 29 | this.say("Welcome to the Simple Audio Player. Say Play to play some audio!", "You can say Play"); 30 | 31 | // Handle Intents here - Play, Pause and Resume is all for now 32 | } else if (requestType === "IntentRequest") { 33 | var intent = this.event.request.intent; 34 | if (intent.name === "Play") { 35 | this.play(podcastURL, 0); 36 | 37 | } else if (intent.name === "AMAZON.PauseIntent") { 38 | // When we receive a Pause Intent, we need to issue a stop directive 39 | // Otherwise, it will resume playing - essentially, we are confirming the user's action 40 | this.stop(); 41 | 42 | } else if (intent.name === "AMAZON.ResumeIntent") { 43 | var lastPlayed = this.loadLastPlayed(userId); 44 | var offsetInMilliseconds = 0; 45 | if (lastPlayed !== null) { 46 | offsetInMilliseconds = lastPlayed.request.offsetInMilliseconds; 47 | } 48 | 49 | this.play(podcastURL, offsetInMilliseconds); 50 | } 51 | } else if (requestType === "AudioPlayer.PlaybackStopped") { 52 | // We save off the PlaybackStopped Intent, so we know what was last playing 53 | this.saveLastPlayed(userId, this.event); 54 | 55 | // We respond with just true to acknowledge the request 56 | this.context.succeed(true); 57 | } 58 | }; 59 | 60 | /** 61 | * Creates a proper Alexa response using Text-To-Speech 62 | * @param message 63 | * @param repromptMessage 64 | */ 65 | SimplePlayer.prototype.say = function (message, repromptMessage) { 66 | var response = { 67 | version: "1.0", 68 | response: { 69 | shouldEndSession: false, 70 | outputSpeech: { 71 | type: "SSML", 72 | ssml: " " + message + " " 73 | }, 74 | reprompt: { 75 | outputSpeech: { 76 | type: "SSML", 77 | ssml: " " + repromptMessage + " " 78 | } 79 | } 80 | } 81 | }; 82 | this.context.succeed(response); 83 | }; 84 | 85 | /** 86 | * Plays a particular track, from specific offset 87 | * @param audioURL The URL to play 88 | * @param offsetInMilliseconds The point from which to play - we set this to something other than zero when resuming 89 | */ 90 | SimplePlayer.prototype.play = function (audioURL, offsetInMilliseconds) { 91 | var response = { 92 | version: "1.0", 93 | response: { 94 | shouldEndSession: true, 95 | directives: [ 96 | { 97 | type: "AudioPlayer.Play", 98 | playBehavior: "REPLACE_ALL", // Setting to REPLACE_ALL means that this track will start playing immediately 99 | audioItem: { 100 | stream: { 101 | url: audioURL, 102 | token: "0", // Unique token for the track - needed when queueing multiple tracks 103 | expectedPreviousToken: null, // The expected previous token - when using queues, ensures safety 104 | offsetInMilliseconds: offsetInMilliseconds 105 | } 106 | } 107 | } 108 | ] 109 | } 110 | }; 111 | 112 | this.context.succeed(response); 113 | }; 114 | 115 | // Stops the playback of Audio 116 | SimplePlayer.prototype.stop = function () { 117 | var response = { 118 | version: "1.0", 119 | response: { 120 | shouldEndSession: true, 121 | directives: [ 122 | { 123 | type: "AudioPlayer.Stop" 124 | } 125 | ] 126 | } 127 | }; 128 | 129 | this.context.succeed(response); 130 | }; 131 | 132 | // Saves information into our super simple, not-production-grade cache 133 | SimplePlayer.prototype.saveLastPlayed = function (userId, lastPlayed) { 134 | lastPlayedByUser[userId] = lastPlayed; 135 | }; 136 | 137 | // Load information from our super simple, not-production-grade cache 138 | SimplePlayer.prototype.loadLastPlayed = function (userId) { 139 | var lastPlayed = null; 140 | if (userId in lastPlayedByUser) { 141 | lastPlayed = lastPlayedByUser[userId]; 142 | } 143 | return lastPlayed; 144 | }; 145 | 146 | 147 | 148 | -------------------------------------------------------------------------------- /misc/SkillCertificate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bespoken-cookbook/super-simple-audio-player/1bc160003a2e538078b34913c5884e8432f8bf9d/misc/SkillCertificate.png -------------------------------------------------------------------------------- /misc/SkillConfiguration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bespoken-cookbook/super-simple-audio-player/1bc160003a2e538078b34913c5884e8432f8bf9d/misc/SkillConfiguration.png -------------------------------------------------------------------------------- /misc/SkillGettingStarted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bespoken-cookbook/super-simple-audio-player/1bc160003a2e538078b34913c5884e8432f8bf9d/misc/SkillGettingStarted.png -------------------------------------------------------------------------------- /misc/SkillInformation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bespoken-cookbook/super-simple-audio-player/1bc160003a2e538078b34913c5884e8432f8bf9d/misc/SkillInformation.png -------------------------------------------------------------------------------- /misc/SkillIntentSchema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bespoken-cookbook/super-simple-audio-player/1bc160003a2e538078b34913c5884e8432f8bf9d/misc/SkillIntentSchema.png -------------------------------------------------------------------------------- /misc/SkillSampleUtterances.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bespoken-cookbook/super-simple-audio-player/1bc160003a2e538078b34913c5884e8432f8bf9d/misc/SkillSampleUtterances.png -------------------------------------------------------------------------------- /misc/SkillServiceSimulator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bespoken-cookbook/super-simple-audio-player/1bc160003a2e538078b34913c5884e8432f8bf9d/misc/SkillServiceSimulator.png -------------------------------------------------------------------------------- /misc/SkillTest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bespoken-cookbook/super-simple-audio-player/1bc160003a2e538078b34913c5884e8432f8bf9d/misc/SkillTest.png -------------------------------------------------------------------------------- /misc/bst-proxy-output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bespoken-cookbook/super-simple-audio-player/1bc160003a2e538078b34913c5884e8432f8bf9d/misc/bst-proxy-output.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SuperSimpleAudioPlayer", 3 | "description": "Simple Audio Player", 4 | "dependencies": { 5 | "bespoken-tools": "^1.0.1" 6 | }, 7 | "private": true 8 | } 9 | -------------------------------------------------------------------------------- /speechAssets/IntentSchema.json: -------------------------------------------------------------------------------- 1 | { 2 | "intents": [ 3 | { 4 | "intent": "Play" 5 | }, 6 | { 7 | "intent": "AMAZON.PauseIntent" 8 | }, 9 | { 10 | "intent": "AMAZON.ResumeIntent" 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /speechAssets/SampleUtterances.txt: -------------------------------------------------------------------------------- 1 | Play play 2 | Play start 3 | Play start playing 4 | Play play now --------------------------------------------------------------------------------