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行。