上午九点,别墅一楼客厅。十二个人,十二台计算机,沿着墙壁摆了一圈。窗帘是厚重的墨绿色绒布,隔绝了所有自然光,只有屏幕的冷光和头顶日光灯惨白的光。空气里有新计算机散发的塑料味,有速溶咖啡的焦苦,有熬夜后的汗酸,还有一种紧绷的、近乎实验室的无菌感。
张小龙站在客厅中央的白板前,白板上没写代码,没画架构,只有一行用红笔加粗的字:“老太太也能上来就语音聊天”。。只有三步。
“从今天起,我们在这里封闭开发一百天。”张小龙开口,声音不高,但很清淅,“目标只有一个:做出一款让老太太都能零门坎使用的语音聊天工具。不是‘好用’,是‘不用学就会用’。不是‘流畅’,是‘像呼吸一样自然’。做不到,我们不出这个门。”
十二个人,有从浩宇调来的老员工,有张小龙从广州带来的前Foxil工程师,有刚招的应届生。所有人看着那行字,表情各异。有人皱眉,有人困惑,有人跃跃欲试。
“老大,”一个戴眼镜的年轻工程师举手,叫周明,是浩宇的老员工,之前做游戏客户端的,“语音聊天技术很复杂,要调编译码,要搞网络适配,要处理回声消除。老太太怎么可能懂这些?我们应该先做内测,让内核用户反馈,慢慢优化……”
“没有慢慢。”张小龙打断他,“林浩只给三个月。三个月后,产品公测。我们要面对的,是几亿普通用户,不是极客。他们不会给我们第二次机会。体验不好,一秒就删。”
他走到白板前,在那行字下面又写了一行:“所有技术问题,必须在产品层解决,不能让用户感知。”
“什么意思?”另一个工程师问,李涛,张小龙从广州带来的,做底层协议出身。
“意思是,网络不好,我们要自动降码率,不能卡。有回声,我们要算法消除,不能有杂音。对方说话声音小,我们要动态增益,不用用户调音量。”张小龙顿了顿,“所有技术实现,必须藏起来。用户看到的,只是一个按钮,点下去,就能说话。就这么简单。”
“这……这做不到吧?”周明嘟囔,“网络波动是物理限制,算法再强也……”
“那就做到物理极限。”张小龙看向他,“林浩给了我们一个算法,‘小艺’压缩。。用这个当基础,我们再优化。网络波动,前向纠错。回声消除,用深度学习模型。这些技术,我们都有。现在要做的,是把它们打磨到极致,然后包装成一个最简单的界面。”
他走到第一台计算机前,打开一个简陋的De。屏幕上只有一个界面:深灰色背景,中间一个大大的圆形按钮,按钮上是麦克风图标。按钮下方一行小字:“按住说话”。
“这是第一版界面。”张小龙说,“只有这一个按钮。点一下,开始录音。松开,发送。收到语音消息,自动播放。没有好友列表,没有群组,没有设置——什么都没有。就这一个按钮。”
客厅里一片寂静。所有人都盯着那个简陋到可笑的界面。这……这也叫产品?
“我们要做的,就是让这个按钮,在任何网络环境下,任何硬件配置上,都能稳定工作。”张小龙说,“分组。周明,你带三个人,攻网络自适应。目标:在56K拨号、1M ADSL、局域网三种环境下。李涛,你带三个人,攻音频处理。目标:在菜市场、地铁、。小王,你带两个人,做UI和交互。目标:从点击按钮到开始录音,反应时间低于50毫秒。小刘,你带两个人,做后台服务。。我负责整体架构和算法调优。”
分工明确,时间紧迫。没人再质疑。键盘声瞬间响起,密集得象暴雨。
第一天,周明组就卡住了。他们在仿。“前向纠错要发冗馀包,但冗馀包占带宽,反而增加延迟。这是个死循环。”
张小龙走过去,看着屏幕上的数据流。“冗馀包不用每次发。根据网络实时状况动态调整。网络好,少发。网络差,多发。用机器学习预测丢包率,提前发冗馀。”
“可机器学习模型需要训练……”
“林浩给了训练数据,浩宇游戏平台几千万条语音消息,带网络环境标签。今晚就训。”
第二天,李涛组遇到回声。他们在别墅里测试,两个房间互相语音,回声大得象在山谷里喊话。“现有的回声消除算法,对付不了这种复杂环境。”
张小龙调出“小艺”算法里的深度学习模型。“用这个。输入原始音频和回声参考信号,输出消除后的音频。模型我预训练过了,你们微调。”
“可深度学习计算量大,实时性……”
“优化。模型压缩,定点量化,汇编级加速。我要明天看到