Javascript 根据某些情况在另一个函数中运行函数
我想创建一个功能,以一种非常简单的方式将自然录制的人声与语音合成结合起来,下面是代码:Javascript 根据某些情况在另一个函数中运行函数,javascript,Javascript,我想创建一个功能,以一种非常简单的方式将自然录制的人声与语音合成结合起来,下面是代码: 功能发言(文本、类型){ 开关(类型){ 案例“答案”: //启动语音合成 演讲(“这就是答案”); //语音合成完成后 playVoice(“voice_1.mp3”); 打破 } } 功能语音(输入){ //获取可用的声音。 const voice=speechSynthesis.getVoices().filter(voice=>voice.lang=='en-US'); var msg=newspe
功能发言(文本、类型){
开关(类型){
案例“答案”:
//启动语音合成
演讲(“这就是答案”);
//语音合成完成后
playVoice(“voice_1.mp3”);
打破
}
}
功能语音(输入){
//获取可用的声音。
const voice=speechSynthesis.getVoices().filter(voice=>voice.lang=='en-US');
var msg=newspeechsynthesisutterance();
msg.voice=voice[0];
//设置文本。
msg.text=输入;
//把这句话排成队。
window.speechSynthesis.speak(msg);
//跟踪语音合成是否已完成
msg.onend=函数(事件){
log('语音在'+event.elapsedTime+'毫秒'之后已完成讲话');
}
}
能否将mp3的文件名作为参数传递给“speech”函数,并在“oned”函数中调用它?像这样
function speak(text, type){
switch(type){
case 'answer':
// Initiate Speech Synthesis & voice to play when done
speech('This is the Answer', 'voice_1.mp3');
break;
case 'question':
// Play an specific voice
playVoice('voice_2.mp3');
// Then Talk the text & voice to play when done
speech('This is the Question', 'voice_3.mp3');
break;
}
}
function speech(input,voiceToPlay){
// Fetch the available voices.
const voice = speechSynthesis.getVoices().filter(voice => voice.lang == 'en-US');
var msg = new SpeechSynthesisUtterance();
msg.voice = voice[0];
// Set the text.
msg.text = input;
// Queue this utterance.
window.speechSynthesis.speak(msg);
// After Speech Synthesis has finished
msg.onend = function(event) {
console.log('Speech has finished being spoken after ' + event.elapsedTime + ' milliseconds.');
if(voiceToPlay) {
console.log('Play voice.');
playVoice(voiceToPlay);
}
}
}
关于问题的情况,在你的语音合成之前和之后你有一个MP3文件,我会考虑一些东西来检查MP3文件的持续时间是什么,然后在执行Script()函数之前使用StimeTimeTo时间长度。我相信您可以编写一个函数,该函数将音频文件的路径传递给“speech”函数,进行查找,然后在变量中返回以毫秒为单位的持续时间
我用你的叉子叉的。这就是我想要的!“开始”出现后,您有2秒钟的时间单击页面上的任意位置播放语音合成
console.log('Start'))
setTimeout(函数(){
让承诺;
说话(‘这是一段文字’、‘答案’);
功能发言(文本、类型){
开关(类型){
案例“答案”:
//启动语音合成
演讲(“这就是答案”);
//语音合成完成后
onSpeechEnd()
打破
个案"问题":
//播放特定的声音
playVoice(“voice_2.mp3”);
//然后讲课文
演讲(“这就是问题”);
}
异步函数onSpeechEnd(){
让结果=等待承诺;
播放声音(结果)
}
}
//作用
功能语音(输入){
//获取可用的声音。
const voice=speechSynthesis.getVoices().filter(voice=>voice.lang=='en-US');
var msg=newspeechsynthesisutterance();
msg.voice=voice[0];
//设置文本。
msg.text=输入;
//把这句话排成队。
window.speechSynthesis.speak(msg);
//跟踪语音合成是否已完成
承诺=新承诺((解决、拒绝)=>{
msg.onend=函数(事件){
console.log('Speech has finished speaked');
解析('voice_1.mp3');
}
});
}
},2000)
功能播放语音(语音){
控制台日志(语音)
}
我肯定会选择Promise
sNow我在寻找什么是Promise
你的问题到底是什么?你是在问如何播放mp3文件还是视频?想要的行为似乎不清楚。你能澄清到底会发生什么吗?谢谢。请看一下代码笔。在语音合成完成后(我在第51行跟踪),我想要执行playVoice(value)代码>在第17行。。。该值由resolve('voice_1.mp3')提供代码>在第54行。