百度语音合成技术

  1. 登录百度AI开发平台
    在这里插入图片描述

  2. 申请自己的ak
    在这里插入图片描述

  3. 开放平台上有各种语言支持的开发文档,自学能力差得人,不用担心,我为你们封装了语音合成与识别的utils,复制粘贴即可使用

    package com.czxy.TestSample;
    
    import com.baidu.aip.speech.AipSpeech;
    import com.baidu.aip.speech.TtsResponse;
    import com.baidu.aip.util.Util;
    import javazoom.spi.mpeg.sampled.file.MpegAudioFileReader;
    import org.json.JSONObject;
    
    import javax.sound.sampled.AudioFileFormat;
    import javax.sound.sampled.AudioFormat;
    import javax.sound.sampled.AudioInputStream;
    import javax.sound.sampled.AudioSystem;
    import java.io.File;
    import java.io.IOException;
    
    /**
     * 百度语音工具类
     */
    public class SpeechUtils {
    
        public static final String APP_ID = "14456779";
    
        public static final String API_KEY = "swit9DZ57kxo4rFjz8sauyuR";
    
        public static final String SECRET_KEY = "CDlpqaGRLoXGHGsedE21ufI3EBU8DCct";
    
    
        /**
         * 语音合成
         * @param text 文字内容
         * @param Path 合成语音生成路径
         * @return
         */
        public static void SpeechSynthesis(String text, String Path) {
            /*
            最长的长度
             */
            int maxLength = 1024;
            if (text.getBytes().length >= maxLength) {
                return ;
            }
            // 初始化一个AipSpeech
            AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);
    
            // 可选:设置网络连接参数
            client.setConnectionTimeoutInMillis(2000);
            client.setSocketTimeoutInMillis(60000);
    
            // 可选:设置代理服务器地址, http和socket二选一,或者均不设置
    //        client.setHttpProxy("proxy_host", proxy_port);  // 设置http代理
    //        client.setSocketProxy("proxy_host", proxy_port);  // 设置socket代理
    
            // 调用接口
            TtsResponse res = client.synthesis(text, "zh", 1, null);
            byte[] data = res.getData();
            //定义变量调用转换格式
            boolean a = true;
            if (data != null) {
                try {
                    Util.writeBytesToFileSystem(data, "D:\\rap\\output.mp3");
                    a=false;
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (!a) {
                convertMP3ToPcm(Path,"D:\\temp\\output.pcm");
            }
    
        }
    
        /**
         * 语音识别
         * @param Path 路径
         * @param Path 语音类型
         * @return
         */
        public static String SpeechRecognition(String Path) throws IOException {
            // 初始化一个AipSpeech
            AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);
    
            // 可选:设置网络连接参数
            client.setConnectionTimeoutInMillis(2000);
            client.setSocketTimeoutInMillis(60000);
    
            // 调用接口
            byte[] data = Util.readFileByBytes(Path);     //readFileByBytes仅为获取二进制数据示例
            JSONObject asrRes2 = client.asr(data, "pcm", 16000, null);
            return asrRes2.toString(2);
        }
    
    
        /**
         *  mp3转pcm
         * @param mp3path MP3文件存放路径
         * @param pcmpath pcm文件保存路径
         * @return
         */
        public static boolean convertMP3ToPcm(String mp3path, String pcmpath){
            try {
                //获取文件的音频流,pcm的格式
                AudioInputStream audioInputStream = getPcmAudioInputStream(mp3path);
                //将音频转化为  pcm的格式保存下来
                AudioSystem.write(audioInputStream, AudioFileFormat.Type.WAVE, new File(pcmpath));
                return true;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
        }
    
        /**
         * 获得pcm文件的音频流
         * @param mp3filepath
         * @return
         */
        private static AudioInputStream getPcmAudioInputStream(String mp3filepath) {
            File mp3 = new File(mp3filepath);
            AudioInputStream audioInputStream = null;
            AudioFormat targetFormat = null;
            try {
                AudioInputStream in = null;
                MpegAudioFileReader mp = new MpegAudioFileReader();
                in = mp.getAudioInputStream(mp3);
                AudioFormat baseFormat = in.getFormat();
                targetFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16,
                        baseFormat.getChannels(), baseFormat.getChannels()*2, baseFormat.getSampleRate(), false);
                audioInputStream = AudioSystem.getAudioInputStream(targetFormat, in);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return audioInputStream;
        }
    
    }
    
    
    

4 简单使用

    public static void main(String[] args) throws IOException {
    	//第一个参数是你输入的文字,第二个参数是你保存到本地的路径
        SpeechSynthesis("你好,我是dog", "D:\\rap\\output.mp3");
        //这个参数是刚合成的本地路径
        String s = SpeechRecognition("D:\\temp\\output.pcm");
        System.out.println(s);
    }

猜你喜欢

转载自blog.csdn.net/qq_42917455/article/details/84201032