问题分析
要实现声音与文字的同步,那我们就得即时检测当前播放声音的位置,同时显示相对应的文字。
重点思路
先用声音编辑软件(如cooledit、sound forge)在声音文件中加入线索点(cuepoint),然后使用cuepointtimes或者cuePointNames属性来检测声音播放的位置。
下面我们来看一个实例,英文朗读,同时同步出现中文翻译!
制作步骤
(1)首先将英文文本导入到director中,命名为“aaa”,同时对其进行格式化,给每句英文的前后加上“*”,如图22.1所示。
图片如下:
图22.1 格式化的英文文本
(2)将中文翻译文本导入到director中,命名为“bbb”,同时进行格式化,如图22.2所示,每一句翻译占一行。
图片如下:
图22.2 中文翻译文本
(3)用声音编辑软件Cool Edit 2000打开英文朗读文件ccc.wav,在对应步骤1中加标记的停顿处,按F8或者点击
图片如下:
按钮加上线索点(Cue Point),如图22.3所示。
图片如下:
图22.3 添加线索点
(4)然后将加好线索点的声音文件导入到Director中,并新建两个文本演员,分别命名为“mytext”和“text_fanyi”,并导入一张背景图片,如图22.4所示。
图片如下:
图22.4 演员表
(5)将文本演员“mytext”、“text_fanyi”以及背景图片拖放到舞台,如图22.5所示。并给“mytext”附上“txt&sound”行为,行为脚本内容如下:
图片如下:
图22.5 剪辑室
txt&sound行为脚本内容:
完成效果
运行程序,完成效果如图22.6所示:
图片如下:
图22.6 完成效果
要实现声音与文字的同步,那我们就得即时检测当前播放声音的位置,同时显示相对应的文字。
重点思路
先用声音编辑软件(如cooledit、sound forge)在声音文件中加入线索点(cuepoint),然后使用cuepointtimes或者cuePointNames属性来检测声音播放的位置。
下面我们来看一个实例,英文朗读,同时同步出现中文翻译!
制作步骤
图片如下:
图片如下:
图片如下:
按钮加上线索点(Cue Point),如图22.3所示。
图片如下:
图片如下:
图片如下:
txt&sound行为脚本内容:
global text_num property sentencelist,sentencenum property soundmember,readnum,colorchange on beginsprite me sentencelist = [] sentencenum = 0 colorchange = 0 member("mytext").text = "" soundmember = member("ccc") readnum = 0 member("mytext").font = "System" member("mytext").fixedlinespace = 22 member("mytext").firstindent = 0 member("mytext").fontstyle = [#plain] member("mytext").color = rgb(0,0,0) member("text_fanyi").text = "" m = member("aaa") s = m.text n = length(s) repeat with i = 1 to n if s.char[i] = "*" then delete s.char[i] add sentencelist,i end if end repeat member("mytext").text = s n = sentencelist.count repeat with i = 3 to n if i mod 2 = 1 then ch1 = sentencelist[i-1] ch2 = sentencelist[i] - 1 member("mytext").char[ch1..ch2].color = rgb(0,0,255) end if end repeat if sentencelist[1] > 1 then ch1 = 1 ch2 = sentencelist[1] - 1 member("mytext").char[ch1..ch2].color = rgb(0,0,255) end if m = member("ccc") puppetsound 1,m end on exitFrame me if soundbusy(1) then colorchange = 1 t1 = sound(1).currenttime if readnum = 0 then t2 = 0 else t2 = soundmember.cuepointtimes[readnum] end if if t1 > t2 then if soundmember.cuepointtimes.count > readnum then readnum = readnum + 1 ch1 = sentencelist[readnum*2-1] ch2 = sentencelist[readnum*2] - 1 if readnum > 1 then ch3 = sentencelist[readnum*2-3] ch4 = sentencelist[readnum*2-2] member("mytext").char[ch3..ch4].color = rgb(0,0,0) end if member("mytext").char[ch1..ch2].color = rgb(255,0,0) member("text_fanyi").text = member("bbb").line[readnum] end if end if else if soundmember.cuepointtimes.count > 0 then if colorchange = 1 then ch1 = sentencelist[readnum*2-1] ch2 = sentencelist[readnum*2] - 1 member("mytext").char[ch1..ch2].color = rgb(0,0,0) colorchange = 0 readnum = 0 end if end if end if end
完成效果
运行程序,完成效果如图22.6所示:
图片如下:
回复Comments
作者:
{commentrecontent}