逻辑艺术一相逢,从此代码伴余生
面试
在跟老板提离职时,我也开始了找下家。音乐制作这个行业太冷门,我当时打算如果没找到合适的,就把淘宝继续干起来。我在淘宝上做音视频服务,经过去年的尝试,只要全精力投入,收益还很可观。我的收费不是很低,但会尽最大努力保证效果,很多消音伴奏的买家说,对比了多家店,只有我这里调的效果最好。其他降噪混音升降调变速,我也一直找最好的工具,记得曾找到一款做和声自动分析的工具,其升降调变速处理后的音质完胜当时主流的Au和Cubase插件等,我也一直在学习相关的原理方法,力争做到行业中软件处理的最高水平。现在又加上几个月作曲编曲的独立制作经验,我对淘宝还是很有信心的。
查找了一番,两大招聘网站上果然只有一家电脑音乐职位,简历投出去后石沉大海。又在58查到一家,再投,居然约到了面试。
在一个狭小又简陋的办公室(后来知道这叫孵化器),老板和旁边一人对我进行面试。老板瘦高,戴着眼镜,旁边放着双肩电脑包。他先介绍自己在某高校任教,旁边是他读博士时的同学,在南方某知名大学的研究中心。从交流中感觉他们语气随和,没有上家单位常见到的那些商人的气派。老板接着说:“现在我们想做一款音乐App,期望用户对着手机清唱一段歌曲后,App会给人声配上好听的伴奏,伴奏的乐器可以让用户自己选,最后人声和伴奏混合输出个mp3作品,可以分享出去。目前公司已经有安卓和java的开发人员,也有海归的音乐博士,现在的问题是,做音乐的人和程序员交流起来比较困难,各自思维不一样,你有什么办法能让他们有效的沟通吗?”
“我觉得App这个创意在理论上是可行的。我以前帮同学同事录过歌曲,一个非常有效的操作就是给唱出来的每个音进行节拍和音高的修正,这样即使找不到调和拍子的人唱完修出来一听也有模有样。但这样做的前提是我已经知道了这首歌曲的旋律、调性和拍子,才能有目标的去修正人声。如果咱们要实现这个APP的功能,首先要根据人声计算出一个最佳的调、调式和拍子,然后让计算机照着这个目标去处理,结果才能好听。”
“那怎么才能让电脑根据人唱的声音来确定哪个调合适呢?”
“人唱的声音难免比较随意。一段声音要听起来像个音乐,最起码需要满足两个因素:音高和节拍要符合规律。我们可以先通过音频工具自动获取人声的频率变化曲线,然后把这些曲线量化对齐到最邻近的音符上,这样先得到一组比较安全的音符。接下来可以通过我们设置好的调与调式的关系去匹配,当然这里我们自己需要定义一套具体的匹配规则。因为每个调都有固定的音高结构,所以我们可以提前把调性数据存起来。然后解析音符时要考虑位置、时长,再对应权重进行综合分析,对每个调进行匹配度计算,最终得到一个最佳匹配的调。这时就可以调用修人声的工具对逐个音进行修复。”
“假设按你的方法能把调定出来,也把人声音修的不跑调了,但有很多人唱歌跟不上节拍有什么办法处理吗?”
“音乐一般由若干小节构成,每个小节里往往有固定数量的拍子,每个拍子的时间长度是稳定的,我们听到的是这个结构里按顺序演奏的一个个音符。音符的时间长度呢,一般是拍子的倍数,比如4倍、2倍、1倍、0.5倍、0.25倍等等,或者是这几个时间长度组合,比如有1.5倍,而音符的起始时间也不是随意的,往往和小节的起始时间之差也是这些长度数值。如果想在一段随意唱的音符中找节拍,这个比较困难,比如用户唱的时候一阵快一阵慢,也有可能某个音唱的时间比较自由,也有可能一句歌的最后一个音没等唱完而抢拍。我觉得要解决这个问题,最好给放个节拍器进行录音提示,让用户听着拍子唱。”我拿着笔一边画着小节音符示意图一边讲着。
“那用户不愿意听节拍器,就是想随意唱一段呢?”
“像我刚才说的,就算是唱歌比较好的人唱现成歌曲,清唱出来也存在一定概率的音不准,不卡拍的情况。如果用户乐感不好完全随意哼唱,就算音乐老师去听,也很难定个标准的调和拍子。这样的声音要配好听的伴奏,唯一能做的就是根据他的音高给填充一些音符装饰一下。但少了节拍,做出来的东西很难叫做音乐,恐怕经常听音乐的人都不会觉得好听。”我觉得大家并不是很懂乐理,但对我描述的问题基本能听懂。
为了弄清楚这个疑惑,他们叫来了在外屋的两位小姑娘,经介绍,一位是海归音乐博士亦望姑娘,据说一直拿全校一等奖学金,今年刚回国发展;另一位比较年轻的水参姑娘,也是在美国长大,能唱能跳,乐感很好,这个App的创意就是她提出来的。我又表述了一下我的观点,她们说对于计算机如何处理她们完全不懂,但很赞同我说加节拍器这个功能。最后老板说:“明天我们要去见一位投资人,我会给他讲咱们的APP和发展前景,你们准备一下到时候可能需要讲技术上的实现”。又对我说:“你回去把你说的那些需要电脑处理音符的过程用文字描述一下,最好画个流程图出来,明天一块去给投资人汇报。”
我晚上回去干到半夜,写了文档并配上流程结构图,第二天提前到约定地点。投资人看起来土豪味十足,脖子上的粗金链子很耀眼。老板给讲了APP的实现目标和市场前景,但见投资人对功能兴趣不是很大,一再问市场的问题。老板又让我说计算机实现的过程,我还没说完,投资人又把话题转回市场的问题上,说:“你们又是老师又是博士,把App做出来的能力我不怀疑,但如何能保证产品上线后会有足够的用户来买单?”最终老板也没拿出有力的论据。
会议结束后,老板跟我说,投资人他还会找的,这个App他还要做下去,让我回去整理一下人声处理方面的逻辑,写成开发人员能看懂的文档,并说从下个月开始算我入职。几个月后的一天,在老板车上,他告诉我,我那天来面试后,他的博士同学说,如果想把这个App干出来,把我留下就有希望。
我和前老板喝完最后一次茶,把答应近期完成的曲全部搞定并完成交接。我以为运用我的计算机思维,将要开启一段高科技和音乐结合的职业生涯了,没想到,我只是踏上了一段更为漂泊的转行旅程!
上班
8月份,岛城终于进入桑拿天了,其他时节那种疯狂的海风被太阳烤的一点也找不到。我住老城区,公司在位于市区另一头的创新园,每天上下班,我都要在拥堵的市区穿越2次,路上来回超过4个小时。老板说不用每天都去,大家定期一聚,开会解决问题,平时在家干就行。
老板提供了一台Linux笔记本,告诉我目前服务器环境是Linux,所以我们只能使用在linux下能运行的工具,测试时要先搭建环境,然后以命令行方式运行。windows操作惯了,我对这个只能写命令的黑窗口没太多好感,但对于学习新东西也做好了充分准备——之前多次转行几乎都是自学过来的。老板发给我一个插件waon的资料让了解,说配合做安卓开发的泊露同学进行测试。我尝试了下,waon跑不起来,发现需要x64的系统,就在笔记本上装虚拟机,又卡的不行,于是从家里带来使用了4年的索尼本接着装,再装Linux,环境跑才起来。接下来熟悉运行环境,学习基础操作,运行各种工具,回头看看,我那时候已经不知不觉的步入了IT行业——从此搭建环境、找工具、读文档、测试api一直伴我前行。
呆了几天,我逐渐了解到公司的情况:公司完全为了这款APP而成立,刚注册不久,主要人员有:一边带课一边跑创业的老板,和他搞后台的同学寻明博士。老板带着一个学生叫万里鲲,负责公司大小业务以及对外宣传、对接关系,而寻明博士在南京,也带着个学生,就是开发安卓的泊露同学。平时大家有各自工作在干,有需要时,老板就召集起来开个会分配任务,但这些任务都是兼职,完成起来效率比较低。因为我是全职,我就最大程度的把能力范围内能做的事都做了,测试遇到问题时尽量描述得具体,甚至写成文档,能配图就配图,但不知我是太外行还是其他人太忙,泊露那边往往要等很久才回复,而且经常答复得很不明确,很多时候要等老板催一下才能有效的响应。寻明博士也是经常联系不上,他两不给力,APP的实现就很难!我有点担心这个APP会拖时间太久,但我仍然要尽最大努力推动这个APP的尽快实现,一方面是我对电脑和音乐结合点的兴趣,另一方面大概是中年危机吧!毕业7年了,转行多次,工作地点漂泊不定,家里父母为我担心,我自己也很累,真的想找个能用上以前工作经验的行业先稳定下来。
插件waon存在一些问题,后台和安卓的解决效率太慢了。这几天我给老板也提了一下:
- 必须增加节拍器,这个得到亦望姑娘和水参姑娘的支持,最后定下来,还是得泊露开发;
- 现在用waon转人声得出的midi完全是非常细小的碎音,而且伴有大量谐波,如果不过滤掉谐波并连成长音符,后面的防抖、量化都无法进行,如果觉得实现这个有困难就尽快找下一个工具;
- App要实现的整个流程是:手机端带着节拍器录人声 -> 声音上传到服务器进行音频提取分析生成midi -> 根据midi以及和弦算法生成伴奏 -> 人声和伴奏混音输出。每个环节都依赖前一个环节的结果,如果录音和人声提取不能实现,我现在做的配和声等算法根本就无法应用。
考虑到我在windows上用的很熟的那些工具也无法运行在linux下,即使waon问题解决了,将来要处理更复杂的midi还得有合适工具,得提前准备。在弟弟的帮助下,我们找了个免费的音乐编辑软件rosegarden,听听这个名字都很文艺很浪漫,做免费贡献的IT人就是不一样!但后来折腾一番,也没有让这个软件出来正确的声音!
危机
入职半月后,公司进行了一次大的聚会,这次南京两位都来了,搞音乐的两个小姑娘也来了,还有老板找的3个学生,其中两个java,一个学过钢琴。这天寻明博士终于认真研究了一下谐波产生的原理,提到了几个方法让泊露尝试实现,结果泊露试了几次没效果后就不想干了。我甚至主动给添茶倒水,希望他能帮忙多试几次,让这个项目往前多走一点,而他听到我说乐理总是不耐烦的打断:“你直接告诉我怎么写代码,我不想知道那些乐理!”直到下班,我们也没找出一个合适的方法去解决问题,寻明博士甚至对前景有点悲观!如果他和泊露不干了,这个项目就完了。其实,最悲观的是我,他们都有主业,这个项目完了就完了,但对我来说却是个职业方向问题,即使不能养家糊口,我也非常希望产品能做出来!另一方面,我感觉大家都不懂乐理也不想静下心来学一下,就想做出东西获得回报,确实很难。回想起看过的《浪潮之巅》中的所有案例,哪个成功的公司创始人不对自己的产品了如指掌?目前,只有我最清楚产品理论上能实现到什么程度,却过不了眼前这些基础关卡。唱吧APP的流行说明此类应用还是有一定的市场需求,而且我们这个App将要实现的,预计在智能方面将远超唱吧。
亦望姑娘要在9月份去某高校报到任教,她说她来了几次但App进展太慢,目前以我掌握的乐理知识完全够开发一阵子了,到时候配和声方面有什么问题再联系。其实当初我来的一个目的是能和亦望学习点专业的音乐知识,看来缘分不到啊!她开车捎我和水参回家,我注意到她每次在车将要动时,以非常快的速度打方向,动作极为干练。她个头不高却很有劲,而相比之下水参姑娘就有点弱不禁风。车上她两讨论在美国吃的一些零食,我完全没概念,也没多少兴趣。水参下车后,我又请教了一些关于交响乐的鉴赏问题,为什么像《红旗颂》这样的国产音乐一听就能感觉到在表达什么,而国际上的交响名曲我却会越听越瞌睡呢,是否跟我们的生活环境和平常听到的音乐风格有关?最后她给出的答案是:交响名曲要多听,听多了就有感觉了。
这次聚会让我感到了这个项目的危机,也不得不为我的职业前途担心!老板想法很多,但现在没人去尝试实现,没有产品就没有收入,公司未来的前途在哪里?我担心老板有可能放弃。为了让项目能坚持下去,我跟弟弟通电话,详细说了这时的情况,弟弟懂乐理,经过论证,他觉得这个App实现起来是可行的。我就让他看看相关资料,看能否一两个礼拜帮我写出和弦的那套算法来,并封装成安卓应用,到时候只要让老板觉得可行,那项目就能继续下去。晚上在弟的远程帮助下,我安装了当时最流行的java开发工具eclipse,准备简单学习一下,起码能看懂他写的代码。
这段日子我已经每天超过12个小时用在了工作上,而且拉着弟弟帮了不少忙,也终于了解到IT技术往往要学几个月再使用几年才能达到轻松做产品的程度,我深感自己能力太有限。目前看来,只有逐步提高自己的能力,才有助于逐步的实现想法。下班时我问老板借了他的Linux书,决定先系统学习下操作环境。
学java
上班时间我仍然不遗余力的找寻Linux下人声转midi的替代方案,老板也在寻找新的方向,一有想法我就帮忙去查市场上的相关产品看人家实现到什么程度。老板说和弦算法先不用弄了,等寻明博士和泊露搞定音频提取部分再说,让我重点看和音频有关的动画、变声、甚至想弄个机器人跟随声音实现伴舞。晚上回家我就配合弟弟调代码,我把配和弦这些流程进行了最大程度的简化,也假设用户是以相当标准的音高和节拍来演唱,这样让弟弟以最快速度把算法实现出来,最后还需要找midi播放插件输出声音。过了几天,我发现要和弟弟进行有效沟通,必须尽快学java了,linux先一放,于是他开始远程视频给我讲类和对象……我隐约觉得后半辈子和编程要结缘了,就改了微信头像为“Hello World”。
我已经完全没了业余和周末,老板布置任务要优先完成,一有空就接着学习弟弟划定的学习任务,一周后看完了java的重点三章:类与对象、变量、语句,这时可以在弟弟指导下慢慢的开始读他写的代码了。周日早上,我刚睡醒就发现弟弟发来Javasound编写的一个midi播放器,但格式中有一些不易读懂的标志。我找了大量关于midi格式封装的文章来看,了解到midi时间是由开关音符的事件和△t组成。以前做音乐时对midi的了解只在使用层面,现在不得不深入原理来研究了。
七夕到了,我全然无过节心情,老婆虽然不反对我拼命的学习,但也对不理家务表示出不满。我知道买点金银首饰能哄她开心,但现在一是手里真的没钱,结婚时欠的外债都没能力偿还,二是我感觉金银首饰太俗了。这天晚上我给做了个素臊子面表示一下,对我来说花了超过2个小时做个饭已经是很高的时间成本了。然后点上蜡烛喝个红酒,算是过节了。
发现竞品
高新区有个创业路演,老板带我们去看。现场都是一些结合高科技的创意项目,水参姑娘非常感兴趣,她的创意源源不断的输出来,但是变化也太快了,往往等我们才弄明白她要实现的样子时,她已经否定了自己,提出新的想法来。那天她最后一个想法是希望做一个可以通过体感互动来玩的音乐游戏,甚至是先有动作再输出情景伴奏,最后人跟着唱。我觉得这样倒降低难度了,回家路上一查,不但自动生成和声再唱歌的App不少,就连和我们App几乎一样功能的都已经出现了,只是听起来自动配的和声不准不太好听,但回家一试pc版效果却很好!
我也有点茫然了,赶紧告诉老板,并在群里通知大家各自寻找功能类似的应用,后来才知道这个过程叫竞品调研。我和万里鲲同学找了十来个类似应用,发现我们讨论过的一些想法人家已经实现了。后来我仔细对比了一下,觉得还有两点值得去试:一是我们可以在配和弦乐器的算法上多下功夫,让配出来的结果更好听;二是作品分享等生态功能,其他应用做的还不够完善。老板对竞品没表现出明显的惊讶,还是要坚持把自己的App做出来,我隐约觉得要实现这两点还得很久很久。
这天大家又齐聚一堂,我们和水参姑娘继续讨论产品新的形态,幸好我当时不是开发,不然对她瞬息万变而且不能落地的想法不知作何感想,最终她希望通过游戏手柄那样的操作来控制配不同乐器和伴奏类型。我觉得和目前实现能力之间差距有点大,就和老板看人声提取产物中的那些密密麻麻的点,我用红笔圈出个区域,说这就是我需要的部分,只要筛选出来并且把相同音高的点连成长音符我就能用。老板说继续让寻明博士那边研究,让我完善下一步的和弦算法。我提到看能不能让弟弟帮忙把人声提取产物加工一下,老板非常高兴,并说可以给弄个兼职,到时候发劳务费。这天晚上我让大家唱了一些熟悉的歌曲,老板一首《两只老虎》,会钢琴的豆蔻同学一首《欢乐颂》,回家还给老婆录了《菊花台》,我自己还用笛子吹了一段《天路》,亦望同学也发来了哼的《荷塘月色》。因为这些歌曲旋律是已知的,我就用写好的算法配出和弦来,然后手动添加乐器实现,混音后发到群里,老板一听觉得很好,大家也都反响不错。其实我很清楚,对同一段旋律,和弦配法有很多种,甚至怎么配都不能算错,而对于一般没深入研究音乐的人,听音乐时先听到旋律,再听歌词,然后还能注意到两三样主奏乐器,却很少注意到和弦起的作用。所以大家觉得好也许是感到我用的乐器或混音后的效果听起来好。气氛一好,大家也在群里讨论起提取人声基频的各种方法,其实只是天马行空的想象了一下,寻明博士也没具体回应。泊露发来了jfuge和jmusic的网站,准备以此作为java处理midi的主要工具。弟弟也发现我以前很多需要造轮子的想法,比如拼接转位和弦,在这里已有基础封装了。老板希望先做个带节拍器能录制人声的demo,但泊露的安卓应用迟迟不能出来。
学安卓
9月初,收到老板从另一个公司的账号转来的劳务费2000元,他说其他人都不到1K。老板又说,只要我们的东西做出来,他对拉到投资很有信心,到时候钱不是问题。想起面试时我要了6K他们都没还价,原来就没有那个价位!晚上我看了看电脑音乐方面的招聘,发现了两条信息都是前老板发的!岛城的旅游很有名,也一直想靠向一线城市,甚至想独立为直辖市,但IT和艺术发展比起内地的西安差距很大,从招聘职位数量和价位上就能看出来。我仔细斟酌了一下,觉得还是尽全力把东西先弄出来。
我着急无比,没有安卓应用什么都干不了。就跟弟通电话:
“我想学安卓,目标是能做App能用到的这些功能。以我现在的水平需要准备什么?”
“学安卓前需要把java用熟,你刚看了一点,还没写过代码,可能会有点困难。”
“那我学简单的,比如先做个节拍器放上去,能调速度能播放声音,然后写个录音按钮,把录的人声保存下来……”
“那你还是系统的学吧,从基础的学起会轻松一些。安卓学会了以后自己做点有意思的东西也方便”
弟之前搞过一阵子安卓开发,他推荐了视频教程,划出必看的内容。我决定除了周末家里必须要干的事情,其余时间全力以赴进行学习。但很快被IT开发的第一关就打败了——搭环境!sdk管理器、模拟器这些环节不稳定又无法正常更新,在国内学开发,搭环境就要耗掉不少精力,真是个杯具!幸好有弟弟全力以赴的帮助,几天后成功运行了第一个例子:打电话。我其实对每行代码都只知道个大概意思,但对每个单词功能没法都了解,我试图把每行代码背下来,然后嘴里念叨着实现的过程,手里默写敲出来。弟弟说没必要背,写多了自然就明白了。这几天弟弟开始研究频谱提取的问题,发现需要一些数学和信号学知识,他也去现学。