语音播报

<script>
		var audios = {
			zero: {
				src: "tts_0.mp3",
				duration: 800
			},
			one: {
				src: "tts_1.mp3",
				duration: 800
			},
			two: {
				src: "tts_2.mp3",
				duration: 800
			},
			three: {
				src: "tts_3.mp3",
				duration: 800
			},
			four: {
				src: "tts_4.mp3",
				duration: 800
			},
			five: {
				src: "tts_5.mp3",
				duration: 1.2
			},
			six: {
				src: "tts_6.mp3",
				duration: 800
			},
			seven: {
				src: "tts_7.mp3",
				duration: 800
			},
			eight: {
				src: "tts_8.mp3",
				duration: 1.2
			},
			nine: {
				src: "tts_9.mp3",
				duration: 800
			},
			point: {
				src: "tts_dot.mp3",
				duration: 800
			},
			ten: {
				src: "tts_ten.mp3",
				duration: 1.2
			},
			hd: {
				src: "tts_hundred.mp3",
				duration: 700
			},
			td: {
				src: "tts_thousand.mp3",
				duration: 700
			},
			ttd: {
				src: "tts_ten_thousand.mp3",
				duration: 700
			},
			hm: {
				src: "media/hm.wav",
				duration: 1.2
			},
			yuan: {
				src: "tts_yuan.mp3",
				duration: 1.2
			},
			it: {
				src: "media/it.wav",
				duration: 1.2
			},
			get: {
				src: "media/get.wav",
				duration: 1800
			}
		};

		var unitsInWan = ["", audios.ten, audios.hd, audios.td];
		var unitsUpWan = ["", audios.ttd, audios.hm, audios.ttd];
		var units = [audios.zero, audios.one, audios.two, audios.three, audios.four, audios.five, audios.six, audios.seven, audios.eight, audios.nine];
		var unitsOther = {
			"point": audios.point,
			"yuan": audios.yuan,
			"it": audios.it,
			"get": audios.get
		};
		var arr = []


		// 获取数字转语音文件的队列
		function getArrayByNumber(num) {
			num = num + "";
			if (/^(0|[1-9]\d*)(.\d*[1-9])?$/.test(num)) {
				var nums = num.split("."), pointAfter = nums[1], flag = 0;
				num = Number(nums[0]);
				num = dealNum(num);
				// num.unshift(unitsOther.get);
				if(pointAfter) {
					nums = pointAfter.split('');
					num.push(unitsOther.point);
					nums.map(function (val) {
						num.push(units[Number(val)]);
					});
					num.push(unitsOther.yuan);
				} else {
					num.push(unitsOther.yuan);
					num.push(unitsOther.it);
				}
				return arr = num;
			} else {
				return [audios.zero];
			}
		}

		// 获取万以上的解析数组
		function dealNum(num) {
			var currNum, level = 0;
			var arr = [],arrTemp, addZero;
			if(num === 0){
				return [units[0]];
			}
			while (num > 0) {
				currNum = num % 10000;
				if (currNum) {
					if (addZero) {
						arr.unshift(units[0]);
					}
					if (level === 2) {
						arr = [unitsUpWan[2]].concat(arr);
					} else if (level) {
						arr = [unitsUpWan[1]].concat(arr);
					}
					arrTemp = dealNumInWan(currNum);
					addZero = arrTemp[0];
					arr = arrTemp[1].concat(arr);
				}
				level++;
				num = Math.floor(num / 10000);
			}
			return arr;
		}

		// 获取万以内的解析数组
		function dealNumInWan(num) {
			var zero, firstIsZero = num / 1000 < 1 && num > 0;
			var arr = [], currNum, unit = 0;
			while (num > 0) {
				currNum = num % 10;
				if (currNum) {
					zero === undefined && (zero = false);
					if (unit) {
						if (zero) {
							arr.unshift(units[0]);
							zero = false;
						}
						arr.unshift(unitsInWan[unit]);
					}
					arr.unshift(units[currNum]);
				} else {
					zero === false && (zero = true);
				}
				unit++;
				num = Math.floor(num / 10);
			}
			return [firstIsZero, arr];
		}



		getArrayByNumber(58158.5);
		var audio;
		var number = 0;
		function voicePaly (src) {
				audio = src;
				audio = new Audio(audio);
				audio.playbackRate = 1.2;
				// 循环播放,播放结束继续播放
				audio.addEventListener("ended", function(){
					number++;
					if (number === arr.length) {
						alert(4);
						audio.pause();
						number = 0;
						return;
					}
					voicePaly (arr[number].src)
					audio.play();
				})
				audio.play();
		}
		document.getElementsByClassName('btn')[0].onclick = function() {
			voicePaly(arr[0].src)
		}
		
	</script>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值