首页 > 编程知识 正文

百度语音广播文字转语音,百度文字转语音引擎

时间:2023-05-06 13:44:19 阅读:192029 作者:4143

登录百度AI开发平台

申请自己的ak

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

package com.可耐的大山.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); }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。