java实现中文语音朗读

核心代码

package com.read.util;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;

import cn.hutool.core.io.FileUtil;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;

public class SoundUtil {

	public static void read(String content) {
		try {
			FileInputStream file = new FileInputStream(FileUtil.getAbsolutePath("sound\\" + content + ".wav"));
			AudioStream as = new AudioStream(file);
			AudioPlayer.player.start(as);
			Thread.sleep(500);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void readWord(String pinYin) {
		try {
			FileInputStream file = new FileInputStream(FileUtil.getAbsolutePath("word\\" + pinYin + ".wav"));
			AudioStream as = new AudioStream(file);
			AudioPlayer.player.start(as);
			Thread.sleep(500);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 阅读多少号到多少窗口
	 *
	 * @param ss
	 * @param winF
	 * @throws IOException
	 * @throws InterruptedException
	 */
	public static synchronized void playSound(String ss, String name, String winF)
			throws IOException, InterruptedException {
		read("please");
		List<String> pinYinList = PinYinUtil.getPinYinWidthTone(name);
		for (String pinYin : pinYinList) {
			readWord(pinYin);
		}
		Thread.sleep(400);
		for (int i = 0; i < ss.length(); i++) {
			read(String.valueOf(ss.charAt(i)));
		}
		read("dao");
		for (int i = 0; i < winF.length(); i++) {
			read(String.valueOf(winF.charAt(i)));
		}
		read("last");
	}

	/**
	 * 测试playSound()方法的作用
	 */
	public static void main(String[] args) {
		try {
			SoundUtil.playSound("A2015", "赵本山", "8");
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

汉子转换拼音 

package com.read.util;

import com.google.common.collect.Lists;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

import java.util.List;
/**
 * @author: ZhangHouYing
 * @date: 2021-09-23 21:15
 */
public class PinYinUtil {
	public static void main(String[] args) {
		System.out.println(getPinYinWidthTone("中国红"));
	}

	/**
	 * @param china (字符串 汉字)
	 * @return 汉字转拼音 其它字符不变
	 */
	public static String getPinyin(String china) {
		HanyuPinyinOutputFormat formart = new HanyuPinyinOutputFormat();
		formart.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		formart.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		formart.setVCharType(HanyuPinyinVCharType.WITH_V);
		char[] arrays = china.trim().toCharArray();
		String result = "";
		try {
			for (int i = 0; i < arrays.length; i++) {
				char ti = arrays[i];
				if (Character.toString(ti).matches("[\\u4e00-\\u9fa5]")) { //匹配是否是中文
					String[] temp = PinyinHelper.toHanyuPinyinStringArray(ti, formart);
					result += temp[0];
				} else {
					result += ti;
				}
			}
		} catch (BadHanyuPinyinOutputFormatCombination e) {
			e.printStackTrace();
		}
		return result;
	}

	public static List<String> getPinYinWidthTone(String src) {
		List<String> pinYinList = Lists.newArrayList();
		char[] t1 = null;
		t1 = src.toCharArray();
		String[] t2 = new String[t1.length];
		//format是全部的拼音并且带声调
		HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
		format.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);
		format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
		int t0 = t1.length;
		try {
			for (int i = 0; i < t0; i++) {
				// 判断是否为汉字字符
				if (java.lang.Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {
					t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], format);
					pinYinList.add(t2[0]);
				} else {
					pinYinList.add(java.lang.Character.toString(t1[i]));
				}
			}
		} catch (BadHanyuPinyinOutputFormatCombination e1) {
			e1.printStackTrace();
		}
		return pinYinList;
	}
}

依赖pom.xml 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.read</groupId>
  <artifactId>reader</artifactId>
  <version>1.0.0</version>
  <name>reader</name>
  
  
	<dependencies>
		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>26.0-jre</version>
		</dependency>
		<dependency>
		    <groupId>cn.hutool</groupId>
		    <artifactId>hutool-all</artifactId>
		    <version>4.5.11</version>
		</dependency>
		<dependency>
			<groupId>com.belerweb</groupId>
			<artifactId>pinyin4j</artifactId>
			<version>2.5.0</version>
		</dependency>
	</dependencies>
</project>

代码下载地址:https://download.csdn.net/download/zwhfyy/24422043

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值