zoukankan      html  css  js  c++  java
  • 实现文字转语音功能

    Python实现文字转语音功能 https://zhuanlan.zhihu.com/p/26726297

    语音库(发音人) - 朗读女 http://www.443w.com/tts/?post=2

    文档中心--百度AI https://ai.baidu.com/docs#/TTS-Online-Python-SDK/top

    Java SDK_语音合成(TTS)_智能语音交互-阿里云 https://help.aliyun.com/document_detail/30431.html

    package com.mycom;
    
    
    import com.alibaba.idst.nls.NlsClient;
    import com.alibaba.idst.nls.NlsFuture;
    import com.alibaba.idst.nls.event.NlsEvent;
    import com.alibaba.idst.nls.event.NlsListener;
    import com.alibaba.idst.nls.protocol.NlsRequest;
    import com.alibaba.idst.nls.protocol.NlsResponse;
    
    import java.io.File;
    import java.io.FileOutputStream;
    
    import java.util.Random;
    
    import java.io.IOException;
    import java.util.logging.*;
    import java.text.SimpleDateFormat;
    
    public class TTSmy implements NlsListener {
        private NlsClient client = new NlsClient();
        private String akId;
        private String akSecert;
        private String tts_text = "薄雾浓云愁永昼。瑞脑消金兽。阿里巴巴与四十大盗。";
        String LogDir = "D://JAVALOGtts//";
    
        public TTSmy(String akId, String akSecret) {
            System.out.println("init Nls client...");
            this.akId = akId;
            this.akSecert = akSecret;
            // 初始化NlsClient
            client.init();
        }
    
        public void shutDown() {
            System.out.println("close NLS client");
            client.close();
            System.out.println("demo done");
    
        }
    
        public void startTTS() {
            String audioDir = "D:/AliTts/";
    //        String audiopath = audioDir + "InforId_" + this.randomPositiveIntWithTm() + ".wav";
            String audiopath = audioDir + "A_0627InforId_" + this.randomPositiveIntWithTm() + ".mp3";
            File file = new File(audiopath);
            if (!file.exists()) {
                try {
                    file.createNewFile();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            NlsRequest req = new NlsRequest();
            String appkey = "nls-service";
            req.setAppKey(appkey);//设置语音文件格式
            req.setTtsRequest(tts_text);
            req.setTtsEncodeType("wav");//返回语音数据格式,支持pcm,wav,alaw
            req.setTtsVolume(30);//音量大小,阈值0-100
            req.setTtsSpeechRate(0);//语速,阈值-500~500
            req.setTtsBackgroundMusic(1, 0);//背景音乐编号,偏移量
            req.authorize(akId, akSecert);
            try {
                FileOutputStream fileOutputStream = new FileOutputStream(file);
                NlsFuture future = client.createNlsFuture(req, this);//实例化请求,传入请求和监听器
                int total_len = 0;
                byte[] data;
                while ((data = future.read()) != null) {
                    fileOutputStream.write(data, 0, data.length);
                }
                fileOutputStream.close();
                System.out.println("tts audio file size is :" + total_len);
                future.await(10000);//设置服务端超时时间
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
        @Override
        public void onMessageReceived(NlsEvent e) {
            NlsResponse response = e.getResponse();
            String result = "";
            int statusCode = response.getStatus_code();
            if (response.getTts_ret() != null) {
                result += "
    get tts result: statusCode=[" + statusCode + "], " + response.getTts_ret();
            }
    
            if (result != null) {
                System.out.println(result);
            } else {
                System.out.println("response.jsonResults.toString()");
            }
        }
    
        @Override
        public void onOperationFailed(NlsEvent e) {
            //识别失败的回调
            System.out.print("on operation failed");
            System.out.println(e.getErrorMessage());
        }
    
        @Override
        public void onChannelClosed(NlsEvent e) {
            //socket连接关闭的回调
            System.out.println("on websocket closed;");
    
    
        }
    
    
        /*
         * user defined function
         *
         * */
        public int randomPositiveInt() {
            int i = new Random().nextInt();
            return Math.abs(i);
        }
    
        public String randomPositiveIntWithTm() {
            int i = this.randomPositiveInt();
            long tmMillis = System.currentTimeMillis();
            String r = String.valueOf(i) + "_" + String.valueOf(tmMillis);
            return r;
        }
    
        public static String getThisFilename() {
            return Thread.currentThread().getStackTrace()[2].getFileName();
        }
    
        public static String getThisClassname() {
            return Thread.currentThread().getStackTrace()[2].getClassName();
        }
    
        //    public static void main(String[] args) {
        public static void main(String[] args) throws SecurityException, IOException {
    //        String akId = args[0];
    //        String akSecret = args[1];
            String akId = "L7";
            String akSecret = "rrq72";
    
            TTSmy tts = new TTSmy(akId, akSecret);
            //todo log4j
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd--HH-mm-ss");
            long cTm = System.currentTimeMillis();
            String df = sdf.format(cTm);
    
            Logger logger = Logger.getLogger(tts.getClass().getName());
            String fn = tts.LogDir + df + tts.getThisFilename() + ".log";
            FileHandler fileHandler = new FileHandler(fn);
            LogRecord lr = new LogRecord(Level.INFO, "akId,akSecret:" + akId + "_" + akSecret);
            SimpleFormatter sf = new SimpleFormatter();
            fileHandler.setFormatter(sf);
            logger.addHandler(fileHandler);
            logger.log(lr);
    
            tts.startTTS();
            tts.shutDown();
        }
    
    }
    

      

  • 相关阅读:
    Java:多线程<一>
    Java:Exception
    Java: 内部类
    Ubuntu安装jdk
    ubuntu搜狗拼音安装
    录音-树莓派USB摄像头话筒
    leetcode 最小栈
    leetcode 编辑距离 动态规划
    leetcode 最小覆盖字串
    leetcode 最长上升子序列 动态规划
  • 原文地址:https://www.cnblogs.com/rsapaper/p/8717246.html
Copyright © 2011-2022 走看看