-
登录百度AI开发平台
-
申请自己的ak
-
开放平台上有各种语言支持的开发文档,自学能力差得人,不用担心,我为你们封装了语音合成与识别的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);
}