夜戏码头
楚月的办公室在三楼角落。窗户外头是棵老槐树,枝条都快伸进来了。桌上堆得乱七八糟:几本戏曲谱子,一个掉漆的保温杯,吃了一半的饭团用保鲜膜裹着,还有三个显示器并排亮着。
她正戴着耳机哼小调,手指在键盘上敲得飞快。
“这段不行……太硬了。”她自言自语,又删掉一行代码,“老人家要的是韵味,不是机械音。”
门被敲了两下。
“进。”楚月头也没抬。
叶雨眠探进半个身子,手里端着两杯豆浆。她穿浅灰色卫衣,头发松松扎着,右眼戴着个不起眼的透明眼罩——不细看以为是装饰。
“楚姐,早饭。”她把一杯放桌上,“你又熬夜了?”
“没,早上五点来的。”楚月终于摘了耳机,“那个苏州用户的交互记录出问题了,我得重调语音模块。你听听这个——”
她点开一个音频文件。
扬声器里传出一段苏州评弹,三弦琵琶叮叮咚咚,一个老嗓子在唱:“……月落乌啼霜满天,江枫渔火对愁眠……”
“挺好听啊。”叶雨眠坐下。
“听结尾。”楚月把进度条拖到最后三秒。
唱词停了,乐器声也停了。但音频还没完——有一段极短的、几乎听不见的嘶嘶声,像老式收音机调台时的噪音。
“这是什么?”叶雨眠凑近。
“不知道。”楚月放大频谱图,“你看,这里有一串规律脉冲。每23.5毫秒一个,持续0.8毫秒。这不是音频该有的东西。”
叶雨眠盯着屏幕看了一会儿。她的右眼眼罩下,隐约有极细微的蓝光闪烁。
“你眼睛怎么了?”楚月注意到。
“没事,老毛病。”叶雨眠眨眨眼,“这脉冲……我看着像数据流。”
“数据?”
“嗯。”叶雨眠指着其中一个脉冲放大图,“你看这个波形,上升沿太陡了。自然声音不会这么规整。这像是数字信号调制成声波。”
楚月愣住了。
她重新播放那段嘶嘶声,把音量调到最大。这次能听出来,那确实不像随机噪音,而是一串“哒-哒-哒-哒”的节奏,精确得可怕。
“谁上传的这段音频?”叶雨眠问。
“苏州的用户,张老爷子。八十二岁,独居,儿子在德国。”楚月调出用户档案,“他的机器人是初代测试机,编号CN-7301——跟林工昨天测试那台是同一批次。这段音频是机器人自动上传的,日志标记为‘夜间自学习素材’。”
“机器人自己录的?”
“说是录的梦话。”楚月点开详细日志,“记录显示,凌晨两点十七分,张老爷子在睡梦中哼唱了这段评弹。机器人识别为‘非标准交互内容’,自动录音并上传到中央数据库,供算法学习用。”
叶雨眠喝了口豆浆:“老人家梦话唱评弹,也不奇怪吧?”
“奇怪的是这段脉冲。”楚月把两份文件拖到一起,“我对比了数据库里所有评弹录音,没有一段带这种尾巴。而且你注意时间——凌晨两点十七分,正好是天鹅座升到中天的时间。”
“你连这个都查了?”
“林工提醒我的。”楚月靠在椅背上,揉了揉太阳穴,“他昨天说三地机器人同时播放异常戏曲,都跟星空有关。我就多留了个心眼。”
叶雨眠沉默了几秒。
“楚姐。”她轻声说,“我右眼……看到点东西。”
“什么?”
“那些脉冲。”叶雨眠指着屏幕,“在我眼里,它们不是灰色的波形。是蓝色的,很淡的蓝,像……像某种流体在流动。而且有方向性。”
楚月坐直了:“什么意思?”
“我不知道怎么形容。”叶雨眠有些犹豫,“就是普通数据流在我眼里是杂色,乱糟糟的。但这个很整齐,朝同一个方向流。像河。”
“流向哪?”
叶雨眠盯着看了很久,摇摇头:“看不出来终端。但肯定不是随机噪声。”
办公室安静下来。槐树枝在窗外轻轻摇晃,影子在桌上晃动。
楚月的手机突然响了。
她看了眼来电显示,皱眉:“林工?这么早。”
接通。那边传来林秋石的声音,听起来很疲惫:“楚月,你收到苏州用户的音频了吗?”
“正在看。”楚月开了免提,“你那边怎么样?”
“我通宵了。”林秋石说,“陈磐帮我申请了权限,拿到了‘红岸·续’的部分解密档案。不多,只有项目概述和人员名单。”
“有什么发现?”
“张建国——就是苏州那位用户——确实是项目核心成员。1987年到1991年,他在甘肃某个观测站工作,负责信号接收和分析。”林秋石停顿了一下,“另外两位出现异常的用户,李素芳和王德海,也在名单上。一个搞天线设计,一个搞编码理论。”
楚月和叶雨眠对视一眼。
“所以真是项目遗留问题?”楚月问。
“不知道。”林秋石的声音有些沙哑,“但档案里有个地方很怪。项目原计划持续五年,但在1991年突然中止。所有数据封存,人员解散。中止原因写的是‘技术路线调整’,但所有人都签署了终身保密协议。”
“1991年……”楚月想了想,“苏联刚解体。是不是跟国际形势有关?”
“可能。但我查了当年的学术期刊,那几年国内外深空探测领域一片沉寂,像约好了一样。”林秋石那边传来翻纸的声音,“还有件事。我祖父的名字……也在外围人员名单里。”
楚月愣住了:“你祖父?林怀山先生?”
“嗯。职务是‘饮食后勤保障’,听起来像做饭的。”林秋石顿了顿,“但我记得他很讨厌厨房。我妈说他连煮面条都能煮糊。”
“也许只是挂名?”
“也许。”林秋石叹了口气,“先不说这个。你那边的音频,能解析脉冲内容吗?”
“还没试。”楚月看了眼屏幕,“叶雨眠在我这儿,她说脉冲看起来像数据流。我们打算用通信协议解码试试。”
“需要帮忙就说。”林秋石说,“陈磐调了两个安保在数据机房守着,防止有人动手脚。他觉得这事儿不简单。”
“你觉得呢?”
电话那头沉默了几秒。
“我觉得……”林秋石慢慢说,“我祖父腌海棠的罐子,可能不只是腌海棠。”
电话挂了。
楚月放下手机,盯着屏幕上那些蓝色脉冲。它们一行行排列,整齐得令人不安。
“楚姐。”叶雨眠小声说,“我有点害怕。”
“怕什么?”
“不知道。”叶雨眠抱住自己的胳膊,“就是觉得……这些脉冲像在说话。用一种我们听不懂的语言。”
楚月深吸一口气,拍了拍她的肩。
“那就把它翻译出来。”她重新坐回电脑前,“管它是什么,拆开看看就知道了。”
她打开解码软件,导入脉冲波形。软件提供了几十种常用编码格式:二进制、ASCII、UTF-8、EBCDIC……
“先从最简单的开始。”她选了二进制,把脉冲的有无转换成0和1。
屏幕上一串数字跳出来:
01001000 01000101 01001100 01001100 01001111
楚月愣住了。
“这是……”她迅速打开转换器。
转换结果:HELLO。
“英文?”叶雨眠凑过来,“就一个词?”
“等等。”楚月往下滚动。
脉冲还没完。继续转换。
第二串:01010111 01001111 01010010 01001100 01000100
WORLD。
“HELLO WORLD。”楚月念出来,表情古怪,“这是编程入门的第一行代码。几乎所有学编程的人,第一个程序就是输出这个。”
“机器人自己生成的?”
“可能。”楚月继续解码。
后面的脉冲变了。不再是规整的8位一组,而是变成了长短不一的序列。她用摩斯电码试了试,不对。用格雷码,也不对。
“试试分组长度质数。”叶雨眠突然说。
“什么?”
“7位一组,或者13位。”叶雨眠指着屏幕,“我右眼看到的颜色……每7个脉冲会有一次明暗变化。像分节。”
楚月重新设置解码参数,7位一组。
这次转换出来的不再是英文字母,而是一串数字:
23 5 19 20 5 18 14
“数字代码。”楚月皱眉,“可能是简单替换密码。A=1,B=2那种?”
她试了试。
23=W,5=E,19=S,20=T,5=E,18=R,14=N。
WESTERN?
“西方?”叶雨眠说。
“继续。”
下一组7位脉冲:3 15 13 5 20 15 1
3=C,15=O,13=M,5=E,20=T,15=O,1=A。
COMETOA。
“COME TO A?”楚月敲着桌子,“连起来:WESTERN COME TO A……后面肯定还有。”
但脉冲到这里断了。
音频总长就三秒,后面只剩空白噪音。
楚月重放了好几遍,确认没有隐藏内容。
“不完整。”她靠在椅背上,“像一句话被打断了。或者……只是前半句。”
叶雨眠盯着那些数字,突然说:“楚姐,你觉不觉得这像坐标?”
“坐标?”
“西方,来一个地方。”叶雨眠在纸上写写画画,“如果是天文观测,西方可能指方位角。COMETOA也许是‘COME TO A’,A点?或者A区?”
楚月想了想,打开地图软件。
“苏州用户住哪?”
“平江路附近,老城区。”楚月调出地址,“但‘西方’范围太大了。从苏州往西,能到太湖,能到安徽,能一直往西到甘肃——当年红岸续的观测站就在甘肃。”
“要不要告诉林工?”
楚月犹豫了。
她看着屏幕上那个“HELLO WORLD”,心里有种说不出的别扭。这太像某种恶作剧了,又太像某种信号。
办公室门又被敲响。
这次是陈磐。他换了件黑色夹克,手里拿着个平板电脑,脸色不太好。
“两位。”他走进来,把平板放到桌上,“出事了。”
“又怎么了?”楚月心里一紧。
“武汉用户李素芳家的机器人,今天凌晨四点,突然开始朗诵诗歌。”陈磐调出一段录音,“不是播放录音,是即兴创作。你们听听。”
他按下播放键。
一个温和的女声——机器人的标准语音——用平缓的语调念道:
“星河低垂,如泪悬挂。
孤舟系于古老的码头。
等待永远不会来的摆渡人。”
念完,停了。然后重复。再重复。一直念到凌晨五点才停。
“用户呢?”楚月问。
“吓坏了。”陈磐说,“老太太打电话给儿子,说机器人中邪了。儿子从上海赶回去,现在要求我们给个说法。”
“还有吗?”
“有。”陈磐滑动屏幕,“昆明王德海老爷子那边,机器人今天早上六点,突然在厨房墙上用番茄酱画了个图案。”
他调出照片。
墙上是一堆歪歪扭扭的红色线条,乍看像小孩涂鸦。但仔细看,能分辨出那是简单的星座连线图——北斗七星,勺子形状。
“老爷子自己拍的。”陈磐说,“他说机器人用机械手指蘸着番茄酱画,画完还指着最末那颗星——就是摇光——重复说了三遍‘它在闪烁’。”
楚月感觉后背发凉。
“三个地方……同时出现异常?”
“时间差不多。”陈磐看了眼手表,“苏州是凌晨两点十七分,武汉四点,昆明六点。间隔差不多两小时。像接力。”
叶雨眠突然站起来:“陈主管,你能调这三地的实时监控吗?不是用户家里的,是社区公共区域的。要看天空的那种。”
陈磐看了她一眼,没多问,在平板上操作了几下。
三个分屏出现,分别是苏州、武汉、昆明的社区摄像头画面。时间调到对应异常发生的时间段。
苏州,凌晨两点十七分。摄像头对着夜空,云有点厚,但偶尔能看到几颗星星。
“停。”叶雨眠说,“放大,右上角。”
陈磐放大画面。
在夜空的一角,隐约有个模糊的光点。不是很亮,但确实在那儿。
“那是什么?”楚月问。
“不知道。”陈磐调出天文软件,输入时间地点,“这个位置……是天鹅座方向。但天鹅座那时候应该在地平线以下。除非……”
“除非光点不是恒星。”林秋石的声音从门口传来。
他站在那儿,不知道听了多久。眼睛里有血丝,手里拿着个档案袋。
“林工?”楚月站起来。
“我查了卫星数据。”林秋石走进来,把档案袋扔在桌上,“那个时间点,没有任何人造卫星经过那三个地方的天顶。国际空间站也不在。”
“那光点是什么?”
“可能是高空气球,或者无人机。”林秋石说,“但也可能是……”
他停住了。
“是什么?”陈磐追问。
“没什么。”林秋石摇摇头,“先解决眼前问题。楚月,你那音频解析出什么了?”
楚月把解码结果给他看。
林秋石盯着“HELLO WORLD”和“WESTERN COME TO A”看了很久,表情越来越凝重。
“这不是机器人生成的。”他最终说。
“你怎么确定?”
“HELLO WORLD确实是编程入门代码。”林秋石指着屏幕,“但你们看这个W,23。在A=1的替换密码里,W应该是23没错。但如果是机器人随机生成,它大概率会用ASCII码直接输出字符,不会多此一举转换成数字再替换。”
楚月明白了:“所以这是人编的?有人故意把信息藏在脉冲里?”
“或者……”林秋石顿了顿,“是三十年前的人编的,现在被翻出来了。”
办公室又陷入沉默。
窗外的槐树枝突然被风吹得猛晃起来,影子在墙上乱摇。
叶雨眠的右眼又开始隐隐作痛。她摘下眼罩揉了揉——那只眼睛的虹膜颜色比左眼浅一些,瞳孔周围有极细微的银色纹路。
“叶雨眠。”林秋石突然看向她,“你昨天说,能看到数据流的颜色。现在看这些脉冲,是什么颜色?”
叶雨眠重新看向屏幕。
那些蓝色的流动线条还在,但今天……好像多了点什么。
“还是蓝色。”她说,“但有细小的金色光点混在里面,很淡,像沙子。”
“流动方向呢?”
“还是朝同一个方向。”叶雨眠眯起眼,“但今天……我能看到终点了。”
三个人都看向她。
“在哪儿?”楚月问。
叶雨眠伸出手指,在屏幕上缓慢移动。她的指尖沿着脉冲的流动轨迹,从左上角开始,向右下角延伸,最后停在地图软件的某个位置。
那是苏州。
更具体地说,是苏州老城区,平江路附近。
张老爷子家的位置。
“流向用户家?”陈磐皱眉。
“不对。”叶雨眠摇头,“是流向他家……地下的某个点。很深。”
林秋石迅速调出苏州老城区的地下管网图。密密麻麻的线条,排水管、电缆、光缆、地铁隧道……
“具体坐标能估吗?”他问。
叶雨眠盯着看了好一会儿,摇摇头:“太模糊了。只能感觉是很深的地方,比地铁还深。”
陈磐拿起对讲机:“我让苏州分公司派人去附近勘查。就说……管道检修。”
“小心点。”林秋石说,“别打草惊蛇。”
对讲机那头传来确认声。
楚月重新坐回电脑前,调出那段评弹的完整音频。这次她不再只看脉冲,而是仔细听唱词。
“月落乌啼霜满天,江枫渔火对愁眠。”她跟着哼,“姑苏城外寒山寺,夜半钟声到客船。”
很标准的《枫桥夜泊》。张若虚的诗,被谱成评弹唱段。
但听着听着,她忽然觉得不对劲。
“等等。”她按下暂停,“这版……调子不对。”
“什么不对?”叶雨眠问。
“我奶奶教过我这段。”楚月重新播放,“正宗苏派评弹,这里应该有个小转音,往上挑一点。但这个版本是平的,直接滑过去。”
她哼了两句对比。
确实不一样。
“可能是老人家年纪大了,唱走调了?”陈磐说。
“梦话还能唱这么准,唯独这里走调?”楚月摇头,“而且你们听这个‘钟声’的‘声’字,拖得特别长。正常唱法不会拖这么长。”
她放大那个字的波形。
“声”字持续了整整两秒。而在这两秒里,频谱图上出现了极其细微的调制——像有人在说话的同时,用另一个频率叠加了信息。
“这里有东西。”楚月兴奋起来,“被歌声掩盖了!”
她用滤波器把主唱声音滤掉,只留下那个微弱的调制信号。
结果不是脉冲,而是一段……数字语音?
非常模糊,像隔着很远录的。但能听出是个女声,很年轻,在重复一句话:
“码头……夜戏码头……不要回答……”
重复了三遍。
然后是一串数字,念得很快:3,14,1,20,5,18,14
楚月立刻转换。
3=C,14=N,1=A,20=T,5=E,18=R,14=N。
CNATERN?
“不对。”林秋石说,“可能是C,N,A,然后TERN?TERNA是拉丁语‘大地’。”
“或者……”叶雨眠突然说,“是坐标?经纬度?”
楚月试着把那串数字当成经纬度:314.1428?不对,经纬度没这么大。
“等等。”林秋石在纸上写,“3.141428。这是圆周率π的近似值。3.1415926……她念的是3.141428,少了一位。”
“圆周率?”陈磐皱眉,“什么意思?”
“不知道。”林秋石盯着那串数字,“但π出现在这里,肯定不是巧合。”
楚月继续处理音频。她把“不要回答”和那串数字提取出来,发现它们被重复编码了七层——用七种不同的调制方式,叠在同一个音频里。
“这得是多怕人听不到啊。”她喃喃道。
“或者多怕人听到。”林秋石说,“只有用特定方法才能解出来。普通人听到就是段评弹。”
陈磐的对讲机响了。
他接起来,听了几句,脸色变了。
“苏州那边有发现。”他放下对讲机,“老城区地下管网维修记录显示,张老爷子住的那片房子,1992年——就是红岸续项目结束后的第二年——进行过一次大规模地下加固。理由是‘防治地面沉降’,但施工范围超出了常规,往下挖了三十米。”
“三十米?”楚月惊讶,“那都快到基岩层了。”
“施工方是当时的市政公司,但监理单位……”陈磐顿了顿,“是军方背景的研究所。档案编号带‘星’字头。”
林秋石闭上眼睛,深吸了一口气。
“我大概明白了。”他慢慢说,“1991年项目突然中止,可能不是因为技术问题。而是他们收到了不该收的东西,然后……埋起来了。”
“埋什么?”楚月问。
“不知道。”林秋石睁开眼睛,“但肯定埋在了苏州地下三十米。而张老爷子,正好住在上面。”
叶雨眠的右眼突然剧痛。
她捂住眼睛,低哼了一声。
“怎么了?”楚月扶住她。
“颜色……变了。”叶雨眠从指缝里看屏幕,声音发颤,“那些蓝色数据流……现在变成红色了。像……像血。而且流动方向反了。”
所有人都看向屏幕。
频谱图上,脉冲还在。但在叶雨眠眼里,它们正从苏州那个终点,逆向流回起点——流回音频文件本身,然后继续往上流,流向……
“流向哪儿?”林秋石问。
叶雨眠抬起头,看向窗外。
天空阴沉,云层厚重。
“流向天上。”她轻声说,“它们……在往回发。”
办公室死一般寂静。
过了很久,楚月才开口:“往哪里发?”
叶雨眠摇头:“不知道。但方向……是天鹅座。和昨天一样。”
林秋石抓起外套。
“我去苏州。”他说。
“现在?”陈磐拦住他,“我们还没搞清楚状况。”
“就是因为没搞清楚,才要去。”林秋石推开他的手,“楚月,你把所有异常音频打包发我。叶雨眠,你跟我去。你的眼睛也许能看到我们看不到的东西。”
“我也去。”楚月站起来,“评弹的事我熟,万一是戏曲方面的线索——”
“你留在这儿。”林秋石打断她,“继续解析音频。我需要后方有人盯着全局。”
楚月还想说什么,但看到林秋石的眼神,把话咽回去了。
“保持联系。”她最终说。
林秋石点点头,带着叶雨眠往外走。到门口时,他回头看了一眼楚月。
“小心点。”他说,“如果发现任何异常……先保护自己。”
“你也是。”
门关上了。
楚月重新坐回电脑前,看着屏幕上那些脉冲。现在在她眼里,它们只是灰色的波形。但她知道,在叶雨眠眼里,那是红色的,逆流的,指向天空的河。
她点开张老爷子的完整档案。
八十二岁,苏州人,退休前在天文台工作。妻子早逝,儿子在国外,独居十五年。身体状况:高血压,轻度认知衰退,但生活能自理。爱好:听评弹,养花,下棋。
很普通的老人档案。
但楚月注意到一个细节:医疗记录里,1990年有一次住院,原因是“突发性晕厥”。住院一周,做了全套检查,结论是“原因不明”。出院后,张老爷子申请提前退休。
1990年。正好是红岸续项目结束前一年。
她继续翻。找到了当年的检查报告扫描件。脑部CT、心电图、血液检查……都正常。
除了最后一项:脑电图。
报告上写着:“枕叶区域检测到异常低频波动,频率0.5赫兹,与常规脑电波不同步。建议复查。”
但复查记录是空的。
楚月盯着那个频率:0.5赫兹。
她想起林秋石昨天说的,糖渍海棠的味觉传感器数据——也是0.5赫兹的波动。
巧合?
她打电话给林秋石。
“林工,你祖父……有没有脑部疾病的记录?”
电话那头沉默了一会儿。
“为什么问这个?”
“张老爷子1990年的脑电图,有0.5赫兹异常波。跟你昨天测到的传感器波动频率一样。”
更长的沉默。
“我祖父……”林秋石的声音有些干涩,“他失踪前半年,经常说自己脑子里有‘钟摆声’。我妈带他去医院,脑电图正常。医生说是幻听,老年痴呆的前兆。”
“钟摆声。”楚月重复,“0.5赫兹,就是一秒两下,确实像钟摆。”
“你的意思是……”
“我不知道。”楚月看着屏幕上的脉冲,“但我觉得,三十年前,有什么东西……进了这些人的脑子。现在,它想出来。”
电话那头传来汽车引擎声。林秋石已经在路上了。
“楚月。”他说,“如果我到苏州后失去联系,你去找陈磐。他有应急方案。”
“你别吓我。”
“不是吓你。”林秋石顿了顿,“是做好准备。我祖父失踪前,也说过类似的话。”
电话挂了。
楚月坐在椅子里,感觉浑身发冷。
窗外的槐树还在摇晃。风越来越大,天彻底阴下来了,像要下雨。
她重新戴上耳机,点开那段评弹。
“月落乌啼霜满天,江枫渔火对愁眠……”
这次她听到了。
在歌声下面,在脉冲下面,在那句“不要回答”下面。
还有一层。
极轻极轻的,像叹息一样的声音,用苏州方言说:
“救救我……”
是个小女孩的声音。