新年的專題

2019 年 1 月 1 日

2019 新年快樂!是國曆的新年。我已經好久沒有寫文章了,因為我這學期超忙的,要準備以下 4 件大事:

  1. 申請研究所
  2. 資訊工程專題
  3. 助教
  4. 程式競賽

我想現在時間也沒有很多了,要期末考了,那就來講專題吧…

這個學期大概是 10 月底的時候,我實作出 Praat 使用的音高偵測演算法,這使得程式偵測音高的精準度大為提升。 使用之後,程式終於能夠聽出學弟超低音的音高,大概是 D2。 不懂我的音高紀錄法的,麻煩請去看一下 Scientific pitch notation

Praat 的演算法的論文是 Accurate short-term analysis of the fundamental frequency… (PDF) 哀呀,名字太長了,跑到下一頁去啦。 看不懂論文的 (!) 或者是不想讀論文的,我解釋一下做法。 Praat 偵測音高的方法是利用自相關函數,從自相關函數裡找局部最大值,就是聲音的週期,再把週期取倒數,就會得到頻率。 Praat 還使用 維特比演算法 來取得最有可能的音高序列。 雖說這文章已有 20 年之久,但是我還是使用這個方法,因為其他的方法,我還是看不懂。 至於最新的技術,好像是使用類神經網路,可是我就是想要迴避類神經網路。

雖然我有趕在專題競賽之前做出音高偵測,但是卻沒有做出合成人聲,結果我在競賽時,連個可以用的程式都展示不出來😢。 在初賽結束後的晚上,我趕緊製作出簡易版的合成人聲程式,其實應該說是改變聲音的效果器。 我做出來的功能有:

然後最近好像有個選舉,某個台北市長參選人就在政見發表會上唱歌,所以我就錄我唱「人生短短幾個秋」,然後用「把男生的聲音轉成女聲」,轉到原調,那是唯一聽起來正常的「把男生的聲音轉成女聲」。 等我的程式可以支援內建音檔功能後,就可以聽見。

我昨天和今天在做的是「分割音節」程式,這個程式可以切割錄音檔裡面的每一個中文字,之後在打譜的時候就可以選取程式要唱哪個字。 其實這是要使用者操作的,因為它也許可以支援不只中文,例如英文、日文、……。 我怎麼知道你希望那些音節要連起來呢?

想試試看嗎?我的專題程式就是 https://stdio2016.github.io/speech2sing/index.html。 快來這裡試試看變聲效果。

喔不!我還沒寫使用說明。 不管了,身為資工系的人就是要有實驗精神! 新年快樂。我又要忙期末了