我目前正在做一个盲测试动作,我将播放随机音乐,用户将不得不猜测它。当他回答时,他会播放另一首音乐,直到他给出3个答案并且他的分数将会确定。
当我使用 Google Home 或 Google智能助理启动我的应用时,一切正常正常。不幸的是,当我在谷歌的模拟器中启动它时,每首歌曲都会与第一首歌曲返回相同(即如果第一首音乐是A,第二首是B,第三首是C,模拟器将播放三次A而不是A,B,C)。
这是模拟器的已知错误吗?
更新
这是我用来获取mp3的代码。它存储在我的服务器上,我将访问它。
function getRandomMusic(conv) {
return new Promise(resolve => {
let URL = "http://"+VPS+":"+EXPRESS_PORT+"/blindTest";
console.log("URL="+URL);
unirest.get(URL)
.headers({'Accept': 'application/json', 'Content-Type': 'application/json'})
.end(response => {
console.log("Response = "+JSON.stringify(response));
if (response.body && response.body.link) {
const link = response.body.link;
conv.data.artist = response.body.artist;
conv.data.track = response.body.track;
console.log("Link="+link);
conv.ask(new MediaObject({
name: "Musique à deviner",
icon: new Image({
url: "https://cibul.s3.amazonaws.com/event_blind-test-series_291687.jpg"
}),
url: link,
description: "Quel est l'artiste ?"
}));
conv.ask(new Suggestions('Not yet implemented'));
return resolve()
} else {
ask(conv, "La communication avec le serveur distant a échoué.");
return resolve()
}
})
})
}
在服务器端,我使用ffmpeg来分割我的mp3文件,并且只保留10个随机秒,然后将其保存在另一个文件中。此10S文件的链接将发送到我的操作。
app.get('/blindTest', function(req, res) {
//Need to download the mp3
//Take a random 10 s
let name = "FullMusic.mp3";
const mp3Duration = require('mp3-duration');
const ffmpeg = require('ffmpeg');
const MongoClient = require('mongodb').MongoClient;
let url = 'URL';
MongoClient.connect(url, function (err, client) {
if (err) {
console.error(err);
}
let db = client.db('DB');
console.log("Connected successfully to database");
let collection = db.collection('COLLECTION');
collection.count(function (err, resultat) {
if (err) console.error(err);
let randNum = Math.floor(Math.random()*resultat);
collection.find().limit(-1).skip(randNum).next(function (err, resu) {
if (err) console.error(err);
client.close();
download(resu.link, name, () => {
console.log("Download complete!");
mp3Duration(name, function (err, duration) {
if (err) console.error(err);
console.log("Le fichier fait "+duration+" s de long.");
try {
new ffmpeg(name, function (err, video) {
if (!err) {
let randStart = Math.floor(Math.random()*(duration - 10));
console.log("RandStart="+randStart+"s");
video.setVideoStartTime(randStart);
video.setVideoDuration(10);
video.addCommand('-y');
video.save('/home/musiques/10sMusic.mp3', function (error, file) {
if (!error) {
console.log('Video file '+file);
res.send({
artist:resu.artist,
track: resu.track,
link:"http://IP+PORT/10sMusic.mp3"
});
fs.unlink(name, () => {
console.log("Delete of "+ name +"complete !");
})
} else {
console.log("ERREUR!!!+"+error);
}
})
} else {
console.error(err);
}
})
} catch (e) {
console.log(e.code);
console.log(e.msg);
}
})
})
})
});
});
});