有專門的基音提取算法,分時域和頻域兩種。不管哪一種都是先把語音切成很短的幀(基音提取的話可以取10ms-40ms一幀),然后時域算法計算這一小段信號的自相關,頻域算法直接取FFT然后找出最合適的一條譜線。相關的論文和研究很多,不同算法的性能差別是很大的。
對于音樂來說,唱準的調都在440 * 2^(k/12)的頻率上,根據調性不同實際上用到的更少,也可以不用區分高八度和低八度。沒有樂譜的話可以先依據這個判斷是否基本唱準,當然最好還是要有純人聲的部分。卡拉OK都是有原唱和伴奏切換的,當然也會有純人聲的數據(一減就行了嘛),所以不是什么問題。