ごきげんよう
この記事は
「するめごはんのVUI・スマートスピーカー Advent Calendar 2018」
の7日目の記事です。
#Alexaのオーディオファイルの再生時間が90秒から240秒に延びた
この記事を書いている今日、つまり12月6日の
Alexa Dev Summit TokyoのAlexaスキルのクイズでオーディオ再生が4分まで対応できるようになった旨が出題されました。
■Alexa Dev Summit TokyoのAlexaスキル
https://www.amazon.co.jp/Amazon-Alexa-Dev-Summit-Tokyo/dp/B07KGH1VJ1/
また、smartioさんのツイートでも同様の報告がありました。
mp3のSSMLでの再生時間制限って90秒以内だったはずなのに…。
— smartio (スマートスピーカー楽しいよ) (@smartiolife) 2018年12月5日
いつの間に、こうなった!?https://t.co/VN46XhfBWD
#早速、約240秒告白されてみる
とのことなので、早速240秒、つまり4分間何かしらを流そうかと思い、考えた結果、やはり?もってる音声ファイルとしてAlexaスキル ヒロインの告白のうちの告白セリフを連結して3分58秒にしました。
実機テスト通りましたので録画・公開してみました。
なお、何も考えないで動くことのみを目的としたため、結城琴葉ちゃんの表示が遅れたりしています。
#ソースコード
たいして何もしてないので、今まで通りです。
とりあえず、LaunchRequestだけ作成して、実機で動くかのみ確かめました。
'use strict';
const Alexa = require('ask-sdk');
//20種類の告白セリフを結合したファイル
const kotoha_20 = '<audio src=\"https://s3-XXXXXXXXXXXXXXXXXX.mp3\" />';
//画像
const DisplayImg1 = {
title: '結城琴葉',
url: 'https://s3-ap-XXXXXXXXXXXXXXXXXXXXX.png'
};
const DisplayImg2 = {
title: '結城琴葉',
url: 'https://s3-ap-XXXXXXXXXXXXXXXXXXXXX.png'
};
const LaunchRequestHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'LaunchRequest';
},
async handle(handlerInput) {
// Template 6
if (supportsDisplay(handlerInput)){
const myImage1 = new Alexa.ImageHelper()
.addImageInstance(DisplayImg1.url)
.getImage();
const myImage2 = new Alexa.ImageHelper()
.addImageInstance(DisplayImg2.url)
.getImage();
const primaryText = new Alexa.RichTextContentHelper()
.withPrimaryText('')
.getTextContent();
handlerInput.responseBuilder.addRenderTemplateDirective({
type: 'BodyTemplate6',
token: 'string',
backButton: 'HIDDEN',
backgroundImage: myImage2,
image: myImage1,
title: "",
textContent: primaryText
});
}
///////////////////////////////////////////
var hoge = 'さぁ、付き合いますか!?';
///////////////////////////////////////////
let speechText = '<break time="0.7s"/>' + kotoha_20;
return handlerInput.responseBuilder
.speak('<speak>' + kotoha_20 + '</speak>')
.reprompt('<speak>' + kotoha_20 + '</speak>')
.withShouldEndSession(false) //本来きちんと対応する
.getResponse();
}
};
// returns true if the skill is running on a device with a display (show|spot)
function supportsDisplay(handlerInput) {
var hasDisplay =
handlerInput.requestEnvelope.context &&
handlerInput.requestEnvelope.context.System &&
handlerInput.requestEnvelope.context.System.device &&
handlerInput.requestEnvelope.context.System.device.supportedInterfaces &&
handlerInput.requestEnvelope.context.System.device.supportedInterfaces.Display;
console.log("Supported Interfaces are" + JSON.stringify(handlerInput.requestEnvelope.context.System.device.supportedInterfaces));
return hasDisplay;
}
// LaunchRequestHnadlerより後に書く必要あり
exports.handler = Alexa.SkillBuilders.standard()
.addRequestHandlers(LaunchRequestHandler)
.lambda();
#これによりどうなるか
僕個人ですと、もっとキャラクターの表現がしやすくなりますし、ポッドキャストに近いこともできることになります。
90秒は結構厳しかったので、今回の対応はうれしい限りです。
が、4分間告白され続け、終わった後8秒間返答しないと repromptで再度4分間告白される動きを上記のコードだとしてしまいます。
いずれにしろ、この長くなったからといって、やみくもに長いのはユーザーからすると鬱陶しいので、それこそVUIデザインの話になるかと思います。
スキルの特性によって適宜利用していきましょう。
以上