新哈飞

 找回密码
 立即注册
搜索
查看: 5300|回复: 25

请教先生:

[复制链接]
发表于 2007-1-4 19:38:38 | 显示全部楼层 |阅读模式
<P>他这个歌词和音乐同步是如何搞得? </P>
<P><U><FONT color=#800080><A href="http://box&#46;zhangmen&#46;baidu&#46;com/m?gate=1&ct=134217728&tn=baidubox">http://box&#46;zhangmen&#46;baidu&#46;com/m?gate=1&ct=134217728&tn=baidubox,蝶儿蝶儿满天飞%20%2091f%20net&word=wma,http://xinfen&#46;w8&#46;171kj&#46;cn/wma/Ymgz&#46;wma,,[%B5%FB%B6%F9%B5%FB%B6%F9%C2%FA%CC%EC%B7%C9]&si=%B5%FB%B6%F9%B5%FB%B6%F9%C2%FA%CC%EC%B7%C9;;%B8%DF%CA%A4%C3%C0;;11599;;11599&lm=16777216</A></FONT></U></P>
发表于 2007-1-4 19:48:03 | 显示全部楼层
不好意思,不懂
发表于 2007-1-4 21:58:46 | 显示全部楼层
这个俺也不懂
发表于 2007-1-4 23:23:46 | 显示全部楼层
发表于 2007-1-5 01:50:15 | 显示全部楼层
</EMBED>
<P>我给您简单说一下,其实很简单:</P>
<P>首先要说清楚的是:所谓的音乐和歌词同步其实是很难的,因为网络存在差异性,不同的人看相同的内容要视乎网络的实际而会出现不同程度的延时,因此只能是大概做一下。</P>
<P>在这里假设音乐的传输延时忽略不计。</P>
<P>规划我们打算演示给大家看的音乐和歌词同步的基本框架。</P>
<P>1、音乐的准备。一般需要准备一首大家都认为很快的歌曲,在这里我以陈慧娴的《蝶儿蝶儿满天飞》为例。音乐的地址是:<A href=\"http://xinfen&#46;w8&#46;171kj&#46;cn/wma/16&#46;wma\"><A href=\"http://xinfen&#46;w8&#46;171kj&#46;cn/wma/16&#46;wma\" target=_blank><A href=\"http://xinfen&#46;w8&#46;171kj&#46;cn/wma/16&#46;wma\" target=_blank>http://xinfen&#46;w8&#46 ... /wma/16&#46;wma</A></A></A>。</P>
<P>2、需要显示歌词的字幕大小的设计。一般需要考虑一行歌词的宽度,以及适当的高度,以便显示较多行数,以免出现歌词已走过了,而音乐还没有出来的现象。假设字幕宽500,高200。</P>
<P>3、首先编辑字幕。在HTML状态下编辑:</P>
<P>
<MARQUEE scrollAmount=1 direction=up width=500 height=200>(需要编辑的歌词放在这里。</MARQUEE></P>
<P>参数说明:MARQUEE定义属性,表示这是一个走马灯字幕。scrollAmount=1定义字幕走动的速度,1最小,可以改为2、3等。direction=up定义字幕走动的方向,可以改为left,right和down。width=500 height=200定义宽和高。</P>
<P>3、其次编辑播放器。这个前面我们已经讲过了,在这里我们再重复一下。在HTML状态下编辑:</P>
<P><EMBED SRC=HTTP: volume=\"0\" autostart=\"true\" height=\"45 loop=true\" width=\"500\" 16&#46;wma wma xinfen&#46;w8&#46;171kj&#46;cn></EMBED></P>
<P>参数说明:EMBED定义属性,表示这是一个播放器。width=500 height=45定义播放器界面的大小,您可以根据自己的需要修改数字的大小。loop=true表示歌曲不停循环播放(改为数字表示播放次数)。autostart=true表示歌曲自动开始播放(改为false则为手动播放)。volume=0表示播放器的音量最大。</P>
<P>4、往字幕里加歌词。《蝶儿蝶儿满天飞》的歌词是:</P>
<P>蝴蝶恋花美 花却随春去春回<BR>与君双双飞 你却只能留一夜<BR>人情似流水 流到我心却是泪<BR>爱一回 痛一回<BR>离别能教肠寸结<BR><BR>蝴蝶为花醉 花却随风魂散飞<BR>我心慢慢给 你却将爱当宿醉<BR>良人唤不回 回到我梦都成灰<BR>盼一些 恨一些<BR>却始终不懂后悔<BR>蝶儿蝶儿满天飞<BR>哦 花不谢心不会飘雪<BR><BR>蝶儿蝶儿满天飞<BR>哦 盼和你再梦断一回  </P>
<P>但是如果是在HTML状态下编辑则需要在换行的地方加上<BR>,加地越多,空行越多。另外由于音乐一般有过门,因此还需要在第一行歌词前面加上一些<BR>,让音乐在过门的时候,字幕走一些空行,在歌声出来的时候才开始显示歌词,这个需要反复调整。</P>
<P>假设我们已经调整好了,并且填进了字幕里,最后代码是这样的:</P>
<P>
<MARQUEE scrollAmount=1 direction=up width=500 height=200>
<P></P>
<P>
<P align=center><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>蝴蝶恋花美,花却随春去春回 <BR><BR>与君双双飞,你却只能留一夜<BR><BR>人情似流水,流到我心却是泪<BR><BR>爱一回,痛一回,离别能教肠寸结 <BR><BR><BR><BR>蝴蝶为花醉,花却随风魂散飞<BR><BR>我心慢慢给,你却将爱当宿醉<BR><BR>良人唤不回,回到我梦都成灰<BR><BR>盼一些,恨一些,却始终不懂后悔<BR><BR>蝶儿蝶儿满天飞,OH,花儿不谢,情不会飘雪<BR><BR><BR><BR><BR><BR>蝴蝶恋花美,花却随春去春回<BR><BR>与君双双飞,你却只能留一夜<BR><BR>人情似流水,流到我心却是泪<BR><BR>爱一回,痛一回,离别能教肠寸结<BR><BR>蝶儿蝶儿满天飞,OH,盼和你再梦断一回<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>蝴蝶为花醉,花却随风魂散飞<BR><BR>我心慢慢给,你却将爱当宿醉<BR><BR>良人唤不回,回到我梦都成灰<BR><BR>盼一些,恨一些,却始终不懂后悔<BR><BR>蝶儿蝶儿满天飞,OH,花儿不谢,情不会飘雪<BR><BR>蝶儿蝶儿满天飞,OH,盼和你再梦断一回</P>
<P></P></MARQUEE></P>
<P><EMBED SRC=HTTP: volume=\"0\" autostart=\"true\" height=\"45 loop=true\" width=\"500\" 16&#46;wma wma xinfen&#46;w8&#46;171kj&#46;cn></EMBED></P>
<P>5、最后的效果是这样的:</P>
<P>
<MARQUEE scrollAmount=1 direction=up width=500 height=200>
<P align=center><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>蝴蝶恋花美,花却随春去春回 <BR><BR>与君双双飞,你却只能留一夜<BR><BR>人情似流水,流到我心却是泪<BR><BR>爱一回,痛一回,离别能教肠寸结 <BR><BR><BR><BR>蝴蝶为花醉,花却随风魂散飞<BR><BR>我心慢慢给,你却将爱当宿醉<BR><BR>良人唤不回,回到我梦都成灰<BR><BR>盼一些,恨一些,却始终不懂后悔<BR><BR>蝶儿蝶儿满天飞,OH,花儿不谢,情不会飘雪<BR><BR><BR><BR><BR><BR>蝴蝶恋花美,花却随春去春回<BR><BR>与君双双飞,你却只能留一夜<BR><BR>人情似流水,流到我心却是泪<BR><BR>爱一回,痛一回,离别能教肠寸结<BR><BR>蝶儿蝶儿满天飞,OH,盼和你再梦断一回<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>蝴蝶为花醉,花却随风魂散飞<BR><BR>我心慢慢给,你却将爱当宿醉<BR><BR>良人唤不回,回到我梦都成灰<BR><BR>盼一些,恨一些,却始终不懂后悔<BR><BR>蝶儿蝶儿满天飞,OH,花儿不谢,情不会飘雪<BR><BR>蝶儿蝶儿满天飞,OH,盼和你再梦断一回 </P></MARQUEE><EMBED src=http://xinfen&#46;w8&#46;171kj&#46;cn/wma/16&#46;wma width=500 height=45 type=audio/x-ms-wma volume=\"0\" autostart=\"true\" loop=\"true\"></EMBED> </P>
 楼主| 发表于 2007-1-6 11:56:32 | 显示全部楼层
虽然这样也能勉强同步,但是我看百度MP3在缓冲的时候,歌词是不前进的,也就像我们看得DVD一样,当曲子暂停以后,歌词也就暂停了,我觉得很神奇,有点像我们支持歌词显示的MP3 播放器............
 楼主| 发表于 2007-1-6 12:19:52 | 显示全部楼层
我想上面的一首歌用了天下不少编辑调试的时间吧。
在此先表示我衷心地感谢...
辛苦了..........

我自己对这个问题想了一下,觉得可能是这种情况:设计者在编辑歌词时,引用了一些MP3 文件的信息,比如播放器播放时间等,就像电影文件的字幕包一样,做成名称一样的IDX SUB文件,与MP3文件放在同一服务器目录上,来实现同步,在连接时,仅需要做一个供字幕显示的窗口就行了.
乱猜一气,欢迎指正....
 楼主| 发表于 2007-1-6 12:25:27 | 显示全部楼层
这一段俺还是头一次学习呐,好好好..........



3、首先编辑字幕。在HTML状态下编辑:

&lt;MARQUEE scrollAmount=1 direction=up width=500 height=200&gt;(需要编辑的歌词放在这里。&lt;/MARQUEE&gt;

参数说明:MARQUEE定义属性,表示这是一个走马灯字幕。scrollAmount=1定义字幕走动的速度,1最小,可以改为2、3等。direction=up定义字幕走动的方向,可以改为left,right和down。width=500 height=200定义宽和高。

3、其次编辑播放器。这个前面我们已经讲过了,在这里我们再重复一下。在HTML状态下编辑:

&lt;EMBED src=http://xinfen.w8.171kj.cn/wma/16.wma width=500 height=45 loop=true autostart=true volume=0&gt;&lt;/EMBED&gt;

参数说明:EMBED定义属性,表示这是一个播放器。width=500 height=45定义播放器界面的大小,您可以根据自己的需要修改数字的大小。loop=true表示歌曲不停循环播放(改为数字表示播放次数)。autostart=true表示歌曲自动开始播放(改为false则为手动播放)。volume=0表示播放器的音量最大。

发表于 2007-1-6 14:56:53 | 显示全部楼层
<P>夜游,I服了YOU。。。</P>
<P>原来您是看到了百度的歌词同步显示效果。。。</P>
<P>其实这个不是不可以做,就是太麻烦了,不过,既然您喜欢,我给您做一个和百度差不多一样的,下次千万不要了!哈哈哈。。。</P>
<P>但是,我只能把作好的代码贴在这里。为什么要这么做?因为本论坛不支持这种显示方式。。。</P>
<P>代码(里面已经加了一些注释),但不能拷贝回去,因为原来编辑的源代码在这里粘贴后一些命令已走形了:</P>
<P>&lt;style&gt;<BR>&lt;!--<BR>&#46;div<BR>{<BR> width:460px;<BR> height:200px;<BR> overflow-y:scroll;<BR> padding-top:80px;<BR> text-align:left;<BR> padding-left:100px;<BR> line-height:25px;<BR> font-size:13px;<BR> padding-bottom:50px;<BR>}<BR>--&gt;<BR>&lt;/style&gt;<BR>&lt;script language=\"java script\"&gt;<BR>var scrollt=0;<BR>var tflag=0;//存放时间和歌词的数组的下标<BR>var lytext=new Array();//放存汉字的歌词<BR>var lytime=new Array();//存放时间<BR>var delay=10;<BR>var line=0;<BR>var scrollh=0;</P>
<P>function getLy()//取得歌词<BR>{<BR> var ly=\"[00:00]蝶儿蝶儿满天飞&#46;[00:15]制作:天下&#46;[00:25]歌手:高胜美&#46;[00:32]蝴蝶恋花美,花却随春去春回&#46;[00:39]与君双双飞,你却只能留一夜&#46;[00:46]人情似流水,流到我心却是泪&#46;[00:52]爱一回,痛一回,离别能教肠寸结&#46;[00:59]蝴蝶为花醉,花却随风魂散飞&#46;[01:06]我心慢慢给,你却将爱当宿醉&#46;[01:12]良人唤不回,回到我梦都成灰&#46;[01:18]盼一些,恨一些,却始终不懂后悔&#46;[01:25]蝶儿蝶儿满天飞,OH,花儿不谢,情不会飘雪&#46;[01:40]蝴蝶恋花美,花却随春去春回&#46;[01:46]与君双双飞,你却只能留一夜&#46;[01:52]人情似流水,流到我心却是泪&#46;[01:58]爱一回,痛一回,离别能教肠寸结&#46;[02:06]蝶儿蝶儿满天飞,OH,盼和你再梦断一回&#46;[02:20]music……&#46;[02:46]蝴蝶为花醉,花却随风魂散飞&#46;[02:53]我心慢慢给,你却将爱当宿醉&#46;[02:59]良人唤不回,回到我梦都成灰&#46;[03:05]盼一些,恨一些,却始终不懂后悔&#46;[03:12]蝶儿蝶儿满天飞,OH,花儿不谢,情不会飘雪&#46;[03:26]蝶儿蝶儿满天飞,OH,盼和你再梦断一回……&#46;[03:40]over\"<BR> return ly;<BR>}<BR>function show(t)//显示歌词<BR>{<BR> var div1=document&#46;getElementById(\"lyr\");//取得层<BR> document&#46;getElementById(\"lyr\")&#46;innerHTML=\" \";//每次调用清空以前的一次<BR> if(t&lt;lytime[lytime&#46;length-1])//先舍弃数组的最后一个<BR> {<BR>  for(var k=0;k&lt;lytext&#46;length;k++)<BR>  {<BR>   if(lytime[k]&lt;=t&amp;&amp;t&lt;lytime[k+1])<BR>   {<BR>    scrollh=k*25;//让当前的滚动条的顶部改变一行的高度<BR>    div1&#46;innerHTML+=\"&lt;font color=red style=font-weight:bold&gt;\"+lytext[k]+\"&lt;/font&gt;&lt;br&gt;\";<BR>   }<BR>   else if(t&lt;lytime[lytime&#46;length-1])//数组的最后一个要舍弃<BR>    div1&#46;innerHTML+=lytext[k]+\"&lt;br&gt;\";<BR>  }<BR> }<BR> else//加上数组的最后一个<BR> {<BR>   for(var j=0;j&lt;lytext&#46;length-1;j++)<BR>    div1&#46;innerHTML+=lytext[j]+\"&lt;br&gt;\";<BR>   div1&#46;innerHTML+=\"&lt;font color=red style=font-weight:bold&gt;\"+lytext[lytext&#46;length-1]+\"&lt;/font&gt;&lt;br&gt;\";<BR> }<BR>}</P>
<P>function scrollBar()//设置滚动条的滚动<BR>{<BR> if(document&#46;getElementById(\"lyr\")&#46;scrollTop&lt;=scrollh)<BR>  document&#46;getElementById(\"lyr\")&#46;scrollTop+=1;<BR> if(document&#46;getElementById(\"lyr\")&#46;scrollTop&gt;=scrollh+50)<BR>  document&#46;getElementById(\"lyr\")&#46;scrollTop-=1;<BR> window&#46;setTimeout(\"scrollBar()\",delay);<BR>}</P>
<P>function getReady()//在显示歌词前做好准备工作<BR>{<BR> var ly=getLy();//得到歌词<BR> //alert(ly);<BR> var arrly=ly&#46;split(\"&#46;\");//转化成数组<BR> for(var i=0;i&lt;arrly&#46;length;i++)<BR>  sToArray(arrly);<BR> sortAr();<BR> /*for(var j=0;j&lt;lytext&#46;length;j++)<BR> {<BR>  document&#46;getElementById(\"lyr\")&#46;innerHTML+=lytime[j]+lytext[j]+\"&lt;br&gt;\";<BR> }*/<BR> scrollBar();<BR>}</P>
<P>function sToArray(str)//解析如“[00:00]蝶儿蝶儿满天飞”的字符串前放入数组<BR>{<BR> var left=0;//\"[\"的个数<BR> var leftAr=new Array();<BR> for(var k=0;k&lt;str&#46;length;k++)<BR> {<BR>  if(str&#46;charAt(k)==\"[\")<BR>  {<BR>   leftAr[left]=k;<BR>   left++;<BR>  }<BR> }<BR> if(left!=0)<BR> {<BR>  for(var i=0;i&lt;leftAr&#46;length;i++)<BR>  {<BR>   lytext[tflag]=str&#46;substring(str&#46;lastIndexOf(\"]\")+1);//放歌词<BR>   lytime[tflag]=conSeconds(str&#46;substring(leftAr+1,leftAr+6));//放时间<BR>   tflag++;<BR>  }<BR> }<BR> //alert(str&#46;substring(leftAr[0]+1,leftAr[0]+6));<BR>}</P>
<P>function sortAr()//按时间重新排序时间和歌词的数组<BR>{<BR> var temp=null;<BR> var temp1=null;<BR> for(var k=0;k&lt;lytime&#46;length;k++)<BR> {<BR>  for(var j=0;j&lt;lytime&#46;length-k;j++)<BR>  {<BR>   if(lytime[j]&gt;lytime[j+1])<BR>   {<BR>    temp=lytime[j];<BR>    temp1=lytext[j];<BR>    lytime[j]=lytime[j+1];<BR>    lytext[j]=lytext[j+1];<BR>    lytime[j+1]=temp;<BR>    lytext[j+1]=temp1;<BR>   }<BR>  }<BR> }<BR>}</P>
<P>function conSeconds(t)//把形如:01:25的时间转化成秒;<BR>{<BR> var m=t&#46;substring(0,t&#46;indexOf(\":\"));<BR> var s=t&#46;substring(t&#46;indexOf(\":\")+1);<BR> s=parseInt(s&#46;replace(/\\b(0+)/gi,\"\"));<BR> if(isNaN(s))<BR>  s=0;<BR> var totalt=parseInt(m)*60+s;<BR> //alert(parseInt(s&#46;replace(/\\b(0+)/gi,\"\")));<BR> if(isNaN(totalt))<BR>  return 0;<BR> return totalt;<BR>}<BR>function getSeconds()//得到当前播放器播放位置的时间<BR>{<BR> var t=getPosition();<BR> t=t&#46;toString();//数字转换成字符串<BR> var s=t&#46;substring(0,t&#46;lastIndexOf(\"&#46;\"));//得到当前的秒<BR> //alert(s);<BR> return s;<BR>}<BR>function getPosition()//返回当前播放的时间位置<BR>{<BR> var mm=document&#46;getElementById(\"MediaPlayer1\");<BR> //var mmt=;<BR> //alert(mmt);<BR> return mm&#46;CurrentPosition;<BR>}</P>
<P>function mPlay()//开始播放<BR>{<BR> var ms=parseInt(getSeconds());<BR> if(isNaN(ms))<BR>  show(0);<BR> else<BR>  show(ms);<BR> window&#46;setTimeout(\"mPlay()\",100)<BR>}<BR>window&#46;setTimeout(\"mPlay()\",100)<BR>function test()//测试使用,<BR>{<BR> alert(lytime[lytime&#46;length-1]);<BR>}<BR>&lt;/script&gt;<BR>&lt;/head&gt;<BR>&lt;body onLoad=\"getReady()\"&gt;<BR>&lt;object id=\"MediaPlayer1\" width=\"460\" height=\"68\" classid=\"CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95\" <BR>codebase=\"<A href=\"http://activex&#46;microsoft&#46;com/activex/controls/mplayer/en/nsmp2inf&#46;cab#Version=6,4,5,715\">http://activex&#46;microsoft ... p;#46;cab#Version=6,4,5,715</A>\" <BR>align=\"baseline\" border=\"0\" standby=\"Loading Microsoft Windows Media Player components&#46;&#46;&#46;\" <BR>type=\"application/x-oleobject\"&gt;<BR>    &lt;param name=\"FileName\" value=\"<A href=\"http://xinfen&#46;w8&#46;171kj&#46;cn/wma/16&#46;wma\">http://xinfen&#46;w8&#46 ... /wma/16&#46;wma</A>\"&gt;<BR>    &lt;param name=\"ShowControls\" value=\"1\"&gt;<BR>    &lt;param name=\"ShowPositionControls\" value=\"0\"&gt;<BR>    &lt;param name=\"ShowAudioControls\" value=\"1\"&gt;<BR>    &lt;param name=\"ShowTracker\" value=\"1\"&gt;<BR>    &lt;param name=\"ShowDisplay\" value=\"0\"&gt;<BR>    &lt;param name=\"ShowStatusBar\" value=\"1\"&gt;<BR>    &lt;param name=\"AutoSize\" value=\"0\"&gt;<BR>    &lt;param name=\"ShowGotoBar\" value=\"0\"&gt;<BR>    &lt;param name=\"ShowCaptioning\" value=\"0\"&gt;<BR>    &lt;param name=\"AutoStart\" value=\"1\"&gt;<BR>    &lt;param name=\"PlayCount\" value=\"0\"&gt;<BR>    &lt;param name=\"AnimationAtStart\" value=\"0\"&gt;<BR>    &lt;param name=\"TransparentAtStart\" value=\"0\"&gt;<BR>    &lt;param name=\"AllowScan\" value=\"0\"&gt;<BR>    &lt;param name=\"EnableContextMenu\" value=\"1\"&gt;<BR>    &lt;param name=\"ClickToPlay\" value=\"0\"&gt;<BR>    &lt;param name=\"InvokeURLs\" value=\"1\"&gt;<BR>    &lt;param name=\"DefaultFrame\" value=\"datawindow\"&gt;</P>
<P>    &lt;embed src=\"<A href=\"http://xinfen&#46;w8&#46;171kj&#46;cn/wma/16&#46;wma\">http://xinfen&#46;w8&#46 ... /wma/16&#46;wma</A>\" align=\"baseline\" border=\"0\" width=\"460\" height=\"68\"<BR>        type=\"application/x-mplayer2\"<BR>        pluginspage=\"<A href=\"http://www&#46;microsoft&#46;com/isapi/redir&#46;dll?prd=windows&amp;sbp=mediaplayer&amp;ar=media&amp;sba=plugin\">http://www&#46;microsoft& ... &amp;sba=plugin</A>&amp;\"<BR>        name=\"MediaPlayer\" showcontrols=\"1\" showpositioncontrols=\"0\"<BR>        showaudiocontrols=\"1\" showtracker=\"1\" showdisplay=\"0\"<BR>        showstatusbar=\"1\"<BR>        autosize=\"0\"<BR>        showgotobar=\"0\" showcaptioning=\"0\" autostart=\"1\" autorewind=\"0\"<BR>        animationatstart=\"0\" transparentatstart=\"0\" allowscan=\"1\"<BR>        enablecontextmenu=\"1\" clicktoplay=\"0\" invokeurls=\"1\"<BR>        defaultframe=\"datawindow\"&gt;<BR>    &lt;/embed&gt;<BR>&lt;/object&gt;<BR>&lt;div id=lyr class=div&gt;歌词加载中……&lt;/div&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;</P>
<P> </P>
<P> </P>
发表于 2007-1-6 16:07:57 | 显示全部楼层
<P>可以把这个记事本文件下载回去打开,然后重命名为“**&#46;html”文件在打开,允许弹出,就可以看到上面这个文件的演示效果了。</P>

歌词同步测试效果.txt

7 KB, 下载次数: 10

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|哈飞车友会 ( 鲁ICP备15020090号-4 ) | 点击这里给我发消息 |

GMT+8, 2024-4-17 07:28 , Processed in 0.053527 second(s), 8 queries , MemCache On.

Powered by Discuz! X

© ys166.com

快速回复 返回顶部 返回列表