arrays - Alexa Skill:如何循环播放一系列声音文件
问题描述
我有在亚马逊 Alexa 上播放动物声音的技能。
用户:狗的声音是什么样的?Alexa:(吠)用户:猫的声音是什么样的?亚历克萨:(喵)
等等……等等。
我正在尝试添加一个按顺序循环遍历数组并播放数组中可用的所有动物声音文件的意图:
var animalNoises = {
'bear' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_bear_roar_small_01.mp3'/>"
},
'bird' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_bird_forest_01.mp3'/>"
},
'cat' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_cat_meow_1x_02.mp3'/>"
},
'cow' : {
'noise' : "<audio src='https://s3.amazonaws.com/animalhouse-noises/animal+house+(cow-moo).mp3'/>"
},
'chicken' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_chicken_cluck_01.mp3'/>"
},
'dog' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_dog_med_bark_2x_02.mp3'/>"
},
'elephant' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_elephant_01.mp3'/>"
},
'horse' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_horse_whinny_01.mp3'/>"
},
'lion' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_lion_roar_02.mp3'/>"
},
'pig' : {
'noise' : "<audio src='https://s3.amazonaws.com/animalhouse-noises/animal+house+(pig-snort).mp3'/>"
},
'monkey' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_monkey_chimp_01.mp3'/>"
},
'rat' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_rat_squeak_2x_01.mp3'/>"
},
'raven' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_raven_caw_2x_01.mp3'/>"
},
'rooster' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_rooster_crow_02.mp3'/>"
},
'sheep' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_sheep_bleat_02.mp3'/>"
},
'turkey' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_turkey_gobbling_01.mp3'/>"
},
'wolf' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_wolf_howl_02.mp3'/>"
}
};
这是我的意图中的代码,但没有任何运气可以播放声音文件:
'PlayAllAnimalsIntent' : function () {
speechOutput = '';
for (var i = 0; i < animalNoises.length; i++) {
var animalSounds = animalNoises[animalNoises[i]]['noise'];
speechOutput = animalSounds;
this.emit(":tell", speechOutput);
}
},
解决方案
问题
animalNoises.length
是undefined
因为animalNoises
没有钥匙length
。因此i < animalNoises.length
成为i < undfeined
。由于i
first 得到 的值0
,我们得到0 < undefined
。
由于 javascript 的类型强制噱头,0 < undefined
评估为false
并且循环内的代码块永远不会执行。
此外,var animalSounds = animalNoises[animalNoises[i]]['noise'];
将导致 TypeError,因为animalNoises[animalNoises[i]]
is undefined
,但我们永远不会走那么远。
修复
要遍历对象,您需要对象的可迭代表示。Object.keys(object)
将对象的所有键作为数组返回。
Object.keys(animalSounds).forEach(key => {
const sound = animalSounds[key]['noise'];
/* Append sound to speechOutput here */
})
this.emit(":tell", speechOutput);
推荐阅读
- android - 我可以从突然消失的 GO Note android 小部件中恢复我的列表吗?
- mongodb - AWS EKS - kubectl 日志 [pod 名称]
- kotlin - 用 mockk 模拟 OffsetDateTime.now
- javascript - 密码验证码每次随机测试都没有通过,不明白为什么?
- bash - 在bash中删除带有大写字母的单词
- gradle-plugin - Gradle 设置 groovy 文件到 kts 文件
- c++ - 提高基于组件的游戏引擎的效率
- android - Android Studio 在约束布局中嵌套 ScrollView
- c++ - std::ifstream 在读取文件中的最后一项时设置 eofbit,但仅在读取数字类型时发生
- json - NodeJS 和 HTTP:如何在 POST/PUT 调用中将 JSON 内容作为字符串发送而不是创建新密钥