微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以取消对 speakTextAsync 的调用?

如何解决是否可以取消对 speakTextAsync 的调用?

我正在使用 javascript SDK of Microsoft Speech Synthesizer调用 speakTextAsync 将文本转换为语音。

这很好用,但有时文本很长,我希望能够在中间取消,但我找不到任何方法来做到这一点。该文档似乎没有表明任何取消方式。名称 speakTextAsync 表明它返回一个可以取消的任务,但实际上该方法返回 undefined,我找不到任何其他方法来执行此操作。这怎么办?

解决方法

它说话的时候似乎没有办法阻止它。但实际上,作为一种解决方法,您可以只下载音频文件并自己播放文件,以便您可以控制一切。试试下面的代码:

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;

import java.nio.file.*;
import java.io.*;
import javax.sound.sampled.*;

public class TextToSpeech {

    public static void main(String[] args) {
        try {

            String speechSubscriptionKey = "key";

            String serviceRegion = "location";

            String audioTempPath = "d://test.wav"; //temp file location

            SpeechConfig config = SpeechConfig.fromSubscription(speechSubscriptionKey,serviceRegion);

          
            AudioConfig streamConfig = AudioConfig.fromWavFileOutput(audioTempPath);

            SpeechSynthesizer synth = new SpeechSynthesizer(config,streamConfig);

            String filePath = "....//test2.txt"; // .txt file for test with long text
            Path path = Paths.get(filePath);
            String text = Files.readString(path);
            synth.SpeakText(text);

            Thread thread = new Thread(new Speaker(audioTempPath));
            thread.start();

            System.out.println("play audio for 8s...");
            Thread.sleep(8000);
            System.out.println("stop play audio");
            thread.stop();

        } catch (Exception ex) {
            System.out.println("Unexpected exception: " + ex);

            assert (false);
            System.exit(1);
        }
    }

}

class Speaker implements Runnable {

    private String path;

    public String getText(String path) {
        return this.path;
    }

    public Speaker(String path) {

        this.path = path;
    }

    public void run() {
        try {
            File file = new File(path);
            AudioInputStream stream;
            AudioFormat format;
            DataLine.Info info;
            Clip clip;

            stream = AudioSystem.getAudioInputStream(file);
            format = stream.getFormat();
            info = new DataLine.Info(Clip.class,format);
            clip = (Clip) AudioSystem.getLine(info);
            clip.open(stream);
            clip.start();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。