我转行程序员的那一年(二)
邏輯藝術一相逢,從此代碼伴余生
面試
在跟老板提離職時,我也開始了找下家。音樂制作這個行業太冷門,我當時打算如果沒找到合適的,就把淘寶繼續干起來。我在淘寶上做音視頻服務,經過去年的嘗試,只要全精力投入,收益還很可觀。我的收費不是很低,但會盡最大努力保證效果,很多消音伴奏的買家說,對比了多家店,只有我這里調的效果最好。其他降噪混音升降調變速,我也一直找最好的工具,記得曾找到一款做和聲自動分析的工具,其升降調變速處理后的音質完勝當時主流的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存在一些問題,后臺和安卓的解決效率太慢了。這幾天我給老板也提了一下:
考慮到我在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管理器、模擬器這些環節不穩定又無法正常更新,在國內學開發,搭環境就要耗掉不少精力,真是個杯具!幸好有弟弟全力以赴的幫助,幾天后成功運行了第一個例子:打電話。我其實對每行代碼都只知道個大概意思,但對每個單詞功能沒法都了解,我試圖把每行代碼背下來,然后嘴里念叨著實現的過程,手里默寫敲出來。弟弟說沒必要背,寫多了自然就明白了。這幾天弟弟開始研究頻譜提取的問題,發現需要一些數學和信號學知識,他也去現學。
總結
以上是生活随笔為你收集整理的我转行程序员的那一年(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2942):vue的本地注册
- 下一篇: [html] 请实现一个文章阅读的进度