<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>