JS有没有办法做到这样 如:三亿二千零伍万二千零五元陆角柒分有0,1,2,3,4,5,6,7,8,9,10,100,1000,1W,1Y,YUAN,JIAO,FENG,dian,的声音文件如:0.mps3,1.mp3,100.mp3,yuan.mp3等,如何读依顺序读出上面中文数据! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自己找到关系,然后按你找到的这种特定关系在后台代码中进行映射,传到前台嘛。以JSON格式就可以了,不是非常难吧?不知道这是不是LZ的意思捏? 可以用在数组中存放对象,用对象映射。var ary = new Array();ary.push({key: 1, mp3: 1.mp3}); 做个对应关系,var rel = { ,'一' => '1.mp3' ,'二' => '2.mp3' ,'三' => '3.mp3' .. .. ..}剩下的问题是如何顺序播放的问题,一般播放器使用flash搞的,可以将'三亿二千零伍万二千零五元陆角柒分'发送给flash,flash根据这个串,切分,顺序播放相应mp3文件.这样的话,95%的工作量是写actionscript而不是javascript了. 不行啊,要求在同一页面,能用FLASH当然最好,且不要刷新当前页!如直接点个按钮什么的就可以读出正确数字来了! 最好是不要用FLASH播放器,因为我用的是直接调用MP3文件的! 方法1.无论是数组、JSON、还是一个分隔符连接的字中,反正先构造好一个声音文件的序列存储,好去依次取值。然后用js的setInterval定时每次播放一个声音文件。具体来说,就是更换播放器代码的媒体文件参数,调用PLAY方法。这个去查看OBJECT和EMBED的参数。方法2.将你的媒体序列作为一个播放列表,指给播放器。由它自动依次播放。 这个要比上法好些,但更难讲,所以给你找了具体的实现方法,可以看下面的帖子:http://hi.baidu.com/widebright/blog/item/e122e9c45bfc84a88226ac93.html IE可用,FF不行……<BGSOUND id="bg_music" src=""><INPUT TYPE="text" id="money" NAME="money" size="30" value="叁亿贰千零伍万贰千零伍元陆角柒分"><INPUT TYPE="button" VALUE="读" ONCLICK="readMoney()"><SCRIPT LANGUAGE="JavaScript"><!-- var arr = new Array(); arr[0] = ['零','0']; arr[1] = ['壹','1']; arr[2] = ['贰','2']; arr[3] = ['叁','3']; arr[4] = ['肆','4']; arr[5] = ['伍','5']; arr[6] = ['陆','6']; arr[7] = ['柒','7']; arr[8] = ['捌','8']; arr[9] = ['玖','9']; arr[10] = ['十','shi']; arr[11] = ['百','bai']; arr[12] = ['千','qian']; arr[13] = ['万','wan']; arr[14] = ['亿','yi']; arr[15] = ['兆','zhao']; arr[16] = ['元','yuan']; arr[17] = ['角','jiao']; arr[18] = ['分','fen'];var i=0;var bg_music = document.getElementById('bg_music'); function readMoney(){ var str = document.getElementById('money').value; if (i==str.length) { i = 0; return; } for (var j=0; j<arr.length; j++) { if (arr[j][0] == str.substring(i,i+1)) { //alert("SpeechFile\/"+arr[j][1]+".mp3"); bg_music.src = "SpeechFile\/"+arr[j][1]+".mp3"; setTimeout("readMoney()",4000); i += 1; return; } } }//--></SCRIPT> 其实不考虑楼主的具体要求,把这个问题扩展一下,就是使网页发出指定的连续读音,这个可以去找下TTS的资料。以前有一阵子我做过这个,当时也弄到一个网页形式的,并加以扩展。其实如果有下载一些英语学习资料,有的CHM,就可以根据你所点的英语词汇发音,这个就是利用TTS技术,不需要额外带什么语音库。如果你自己做这种WAV或MP3的语音库,那恐怕也太巨大了。楼主自己找下资料吧。我忘性大,现在也不容易找了。 现在假想一下,那应该还是创建ACTIVEX对象,然后象一般编程一样设置它的属性,赋给要朗读的文字内容,然后调用类似SPEAK这样的一个方法。总体讲,很方便。 // IE 的话,尝试下, 未测试var fread = new ActiveXObject("SAPI.SpVoice");fread.Voice = fread.GetVoices("Name=Microsoft Simplified Chinese").Item(0);fread.Rate = 5; //速度:-10,10 0 fread.Volume = 100; //声音:0,100 100 fread.Speak("叁亿贰仟零伍萬贰仟零伍元陆角柒分"); 或者服务端程序,生成 wav组件,权限,服务端环境等一系列问题,自行研究<script language="jscript" runat="server">// 大致程序var fread = new ActiveXObject("SAPI.SpVoice");fread.Voice = fread.GetVoices("Name=Microsoft Simplified Chinese").Item(0);fread.Rate = 5; fread.Volume = 100;var file = new ActiveXObject("SAPI.SpFileStream.1");file.Open("C:\\test.wav", 3);fread.AudioOutputStream = file;fread.Speak("叁亿贰仟零伍萬贰仟零伍元陆角柒分"); file.Close();</script> 可以,用一个hashmap就可以了,或者以别的key--value的形式都可以 这个肯定是要有hashmap对应关系的。 那些声音文件你有吗?没有的话自然不出声……我的所有声音文件都存在名为SpeechFile的文件夹下,分别名为0.mp3、1.mp3……yuan.mp3、jiao.mp3、fen.mp3把 bg_music.src = "SpeechFile\/"+arr[j][1]+".mp3";这里的 SpeechFile\/ 改为你本地的路径(/全部替换为\/)文件格式如果不是mp3的话也需要修改;再把arr[0] = ['零','0'];……arr[18] = ['分','fen'];所有的0、1、2……yuan、jiao、fen 改成你的声音文件名称试试 我用的是wav文件,都做好了对应关系,但提示说:行:3字符:1错误:缺少对象代码:0请问这是为什么啊? 我已改过请看现面代码,但老是出现如上提示!<BGSOUND id="bg_music" src=""><INPUT TYPE="text" id="money" NAME="money" size="30" value="叁亿贰千零伍万贰千零伍元陆角柒分"><INPUT TYPE="button" VALUE="读" ONCLICK="readMoney()"><SCRIPT LANGUAGE="JavaScript"><!-- var arr = new Array(); arr[0] = ['零','0']; arr[1] = ['壹','1']; arr[2] = ['贰','2']; arr[3] = ['叁','3']; arr[4] = ['肆','4']; arr[5] = ['伍','5']; arr[6] = ['陆','6']; arr[7] = ['柒','7']; arr[8] = ['捌','8']; arr[9] = ['玖','9']; arr[10] = ['拾','shi']; arr[11] = ['百','bai']; arr[12] = ['千','qian']; arr[13] = ['万','wan']; arr[14] = ['亿','yi']; arr[15] = ['兆','zhao']; arr[16] = ['元','yuan']; arr[17] = ['角','jiao']; arr[18] = ['分','fen'];var i=0;var bg_music = document.getElementById('bg_music'); function readMoney(){ var str = document.getElementById('money').value; if (i==str.length) { i = 0; return; } for (var j=0; j<arr.length; j++) { if (arr[j][0] == str.substring(i,i+1)) { //alert("H:\MU\mu\"+arr[j][1]+".wav"); bg_music.src = "H:\MU\mu\"+arr[j][1]+".wav"; setTimeout("readMoney()",4000); i += 1; return; } } }//--></SCRIPT> 把 bg_music.src = "SpeechFile\/"+arr[j][1]+".mp3";这里的 SpeechFile\/ 改为你本地的路径(“\”全部替换为"\"或"\/")注意红色部分!LZ的代码"H:\MU\mu\"+arr[j][1]+".wav" 其中蓝色的部分会视为转义,使字符串不能正常结束应改为:bg_music.src = "H:/MU/mu/"+arr[j][1]+".wav";或:bg_music.src = "H:\/MU\/mu\/"+arr[j][1]+".wav"; 木有wav文件,我还上百度搜了3个比较小的,居然是“北京烤鸭”的普通话、粤语和English版本…… 确保可以读wav文件,测试通过! 呵呵,我现在只用wav文件代用并不是读音,但问题是不出声!直接代码到:<BGSOUND id="bg_music" src="0.wav">就可以出声! <BGSOUND id="bg_music" src="0.wav">这样肯定可以.但不方便更换和控制播放停顿.用OBJECT的播放控制应该可以.上面还有提到那种TTS技术的,我也看过一些,的确不错.而且还有的网页利用AGENT,会出现一个动画小人物(包括在国外大名鼎鼎的魔法师梅林大师),能做各种表情动作,然后就是还可以读你让他读的话.用在教育类的网页上是最合适的.但正规网站就几乎没用的了. 看第一种.相对于BGSOUND,用OBJECT较好.它能更好地监测和控制.可以做到读完上一个声音文件后,监测到已播放完毕,然后就让它去播放下一个声音文件.这样,对于声音长度不同的文件来说,效果更好,听来更自然. 关于弹出窗口 如何用js重写asp?用for in语句 js和css加载问题 jquery事件如何传递参数 我想输出以下格式:123 4567 4567 4567 4567 …… JQuery获取父容器 [请教],求助一段“自动复制链接”的 Html 代码,谢谢。 请教一个My97DatePicker的问题 怎样将一个结果返回给父窗口的js数组中 如何用javascript实现网页的保存功能? 为什么我的浏览器取screen.width不正确 在DW中,我想实现跟QQ聊天窗口的表情功能一样
可以用在数组中存放对象,用对象映射。
var ary = new Array();
ary.push({key: 1, mp3: 1.mp3});
var rel = {
,'一' => '1.mp3'
,'二' => '2.mp3'
,'三' => '3.mp3'
..
..
..
}剩下的问题是如何顺序播放的问题,一般播放器使用flash搞的,
可以将'三亿二千零伍万二千零五元陆角柒分'发送给flash,flash根据这个串,切分,顺序播放相应mp3文件.
这样的话,95%的工作量是写actionscript而不是javascript了.
具体来说,就是更换播放器代码的媒体文件参数,调用PLAY方法。这个去查看OBJECT和EMBED的参数。方法2.将你的媒体序列作为一个播放列表,指给播放器。由它自动依次播放。
这个要比上法好些,但更难讲,所以给你找了具体的实现方法,可以看下面的帖子:
http://hi.baidu.com/widebright/blog/item/e122e9c45bfc84a88226ac93.html
<BGSOUND id="bg_music" src="">
<INPUT TYPE="text" id="money" NAME="money" size="30" value="叁亿贰千零伍万贰千零伍元陆角柒分">
<INPUT TYPE="button" VALUE="读" ONCLICK="readMoney()">
<SCRIPT LANGUAGE="JavaScript">
<!--
var arr = new Array();
arr[0] = ['零','0'];
arr[1] = ['壹','1'];
arr[2] = ['贰','2'];
arr[3] = ['叁','3'];
arr[4] = ['肆','4'];
arr[5] = ['伍','5'];
arr[6] = ['陆','6'];
arr[7] = ['柒','7'];
arr[8] = ['捌','8'];
arr[9] = ['玖','9'];
arr[10] = ['十','shi'];
arr[11] = ['百','bai'];
arr[12] = ['千','qian'];
arr[13] = ['万','wan'];
arr[14] = ['亿','yi'];
arr[15] = ['兆','zhao'];
arr[16] = ['元','yuan'];
arr[17] = ['角','jiao'];
arr[18] = ['分','fen'];
var i=0;
var bg_music = document.getElementById('bg_music');
function readMoney(){
var str = document.getElementById('money').value;
if (i==str.length) {
i = 0;
return;
}
for (var j=0; j<arr.length; j++)
{
if (arr[j][0] == str.substring(i,i+1))
{
//alert("SpeechFile\/"+arr[j][1]+".mp3");
bg_music.src = "SpeechFile\/"+arr[j][1]+".mp3";
setTimeout("readMoney()",4000);
i += 1;
return;
}
}
}
//-->
</SCRIPT>
以前有一阵子我做过这个,当时也弄到一个网页形式的,并加以扩展。
其实如果有下载一些英语学习资料,有的CHM,就可以根据你所点的英语词汇发音,这个就是利用TTS技术,不需要额外带什么语音库。如果你自己做这种WAV或MP3的语音库,那恐怕也太巨大了。
楼主自己找下资料吧。我忘性大,现在也不容易找了。
// IE 的话,尝试下, 未测试var fread = new ActiveXObject("SAPI.SpVoice");
fread.Voice = fread.GetVoices("Name=Microsoft Simplified Chinese").Item(0);
fread.Rate = 5; //速度:-10,10 0
fread.Volume = 100; //声音:0,100 100
fread.Speak("叁亿贰仟零伍萬贰仟零伍元陆角柒分");
组件,权限,服务端环境等一系列问题,自行研究
<script language="jscript" runat="server">
// 大致程序
var fread = new ActiveXObject("SAPI.SpVoice");
fread.Voice = fread.GetVoices("Name=Microsoft Simplified Chinese").Item(0);
fread.Rate = 5;
fread.Volume = 100;var file = new ActiveXObject("SAPI.SpFileStream.1");
file.Open("C:\\test.wav", 3);
fread.AudioOutputStream = file;
fread.Speak("叁亿贰仟零伍萬贰仟零伍元陆角柒分");
file.Close();
</script>
那些声音文件你有吗?没有的话自然不出声……
我的所有声音文件都存在名为SpeechFile的文件夹下,分别名为0.mp3、1.mp3……yuan.mp3、jiao.mp3、fen.mp3
把
bg_music.src = "SpeechFile\/"+arr[j][1]+".mp3";
这里的 SpeechFile\/ 改为你本地的路径(/全部替换为\/)
文件格式如果不是mp3的话也需要修改;
再把
arr[0] = ['零','0'];
……
arr[18] = ['分','fen'];
所有的0、1、2……yuan、jiao、fen 改成你的声音文件名称
试试
我用的是wav文件,都做好了对应关系,但提示说:
行:3
字符:1
错误:缺少对象
代码:0请问这是为什么啊?
<INPUT TYPE="text" id="money" NAME="money" size="30" value="叁亿贰千零伍万贰千零伍元陆角柒分">
<INPUT TYPE="button" VALUE="读" ONCLICK="readMoney()">
<SCRIPT LANGUAGE="JavaScript">
<!--
var arr = new Array();
arr[0] = ['零','0'];
arr[1] = ['壹','1'];
arr[2] = ['贰','2'];
arr[3] = ['叁','3'];
arr[4] = ['肆','4'];
arr[5] = ['伍','5'];
arr[6] = ['陆','6'];
arr[7] = ['柒','7'];
arr[8] = ['捌','8'];
arr[9] = ['玖','9'];
arr[10] = ['拾','shi'];
arr[11] = ['百','bai'];
arr[12] = ['千','qian'];
arr[13] = ['万','wan'];
arr[14] = ['亿','yi'];
arr[15] = ['兆','zhao'];
arr[16] = ['元','yuan'];
arr[17] = ['角','jiao'];
arr[18] = ['分','fen'];
var i=0;
var bg_music = document.getElementById('bg_music');
function readMoney(){
var str = document.getElementById('money').value;
if (i==str.length) {
i = 0;
return;
}
for (var j=0; j<arr.length; j++)
{
if (arr[j][0] == str.substring(i,i+1))
{
//alert("H:\MU\mu\"+arr[j][1]+".wav");
bg_music.src = "H:\MU\mu\"+arr[j][1]+".wav";
setTimeout("readMoney()",4000);
i += 1;
return;
}
}
}
//-->
</SCRIPT>
把
bg_music.src = "SpeechFile\/"+arr[j][1]+".mp3";
这里的 SpeechFile\/ 改为你本地的路径(“\”全部替换为"\"或"\/")注意红色部分!
LZ的代码"H:\MU\mu\"+arr[j][1]+".wav" 其中蓝色的部分会视为转义,使字符串不能正常结束
应改为:bg_music.src = "H:/MU/mu/"+arr[j][1]+".wav";
或:bg_music.src = "H:\/MU\/mu\/"+arr[j][1]+".wav";
确保可以读wav文件,测试通过!
呵呵,我现在只用wav文件代用并不是读音,但问题是不出声!直接代码到:<BGSOUND id="bg_music" src="0.wav">就可以出声!
这样肯定可以.但不方便更换和控制播放停顿.用OBJECT的播放控制应该可以.上面还有提到那种TTS技术的,我也看过一些,的确不错.而且还有的网页利用AGENT,会出现一个动画小人物(包括在国外大名鼎鼎的魔法师梅林大师),能做各种表情动作,然后就是还可以读你让他读的话.用在教育类的网页上是最合适的.但正规网站就几乎没用的了.