劉旺
摘要:近年來(lái),娛樂(lè)消費(fèi)在大眾消費(fèi)中的比重逐年增加??ɡ璒K作為大眾喜聞樂(lè)見的娛樂(lè)方式,被廣泛應(yīng)用在智能手機(jī)、智能家庭以及經(jīng)營(yíng)性?shī)蕵?lè)場(chǎng)所。但是,傳統(tǒng)的卡拉OK應(yīng)用系統(tǒng)只有單一的點(diǎn)唱功能,缺乏娛樂(lè)互動(dòng)的趣味性。因此,需要設(shè)計(jì)一款基于卡拉OK的評(píng)分系統(tǒng),實(shí)現(xiàn)從點(diǎn)唱到娛樂(lè)互動(dòng)的全新體驗(yàn)。
關(guān)鍵詞:音準(zhǔn)評(píng)分;卡拉OK;音高;演唱;特征文件
卡拉OK系統(tǒng)又叫做卡拉OK點(diǎn)歌系統(tǒng),是集點(diǎn)唱為一體的娛樂(lè)設(shè)備。在演唱過(guò)程中,屏幕上同時(shí)顯示歌曲MTV和歌詞,歌詞與伴奏保持同步,方便演唱者踏準(zhǔn)節(jié)奏?,F(xiàn)有的演唱評(píng)分技術(shù)一般是基于音準(zhǔn)來(lái)進(jìn)行評(píng)判的。因此,設(shè)計(jì)一個(gè)卡拉OK評(píng)分系統(tǒng)的重點(diǎn)就是如何將音準(zhǔn)評(píng)分技術(shù)和卡拉OK系統(tǒng)進(jìn)行有機(jī)的融合。
1技術(shù)分析
音準(zhǔn)的目的是使得歌唱和/或樂(lè)器演奏中所發(fā)的音高,能與一定律制的音高相符。音準(zhǔn)評(píng)分技術(shù)是一種以聲音作為輸入數(shù)據(jù),經(jīng)處理器進(jìn)行運(yùn)算得到量化參數(shù)后,最終由顯示單元圖形界面反饋給用戶,使其能夠?qū)ψ约貉莩曇暨M(jìn)行調(diào)整以符合標(biāo)準(zhǔn)要求的技術(shù)。圖1為音準(zhǔn)評(píng)分流程圖。
音準(zhǔn)特征文件是由歌譜制作而成,以句為單位,詳細(xì)地記錄了每一句中的每一個(gè)歌詞文字以及對(duì)應(yīng)的音高,以及每個(gè)音高的起止時(shí)間點(diǎn)以及音高值。
2方案設(shè)計(jì)
在業(yè)務(wù)流程中,用戶輸入聲音,系統(tǒng)反饋實(shí)時(shí)評(píng)分效果,以指導(dǎo)用戶在下個(gè)時(shí)間點(diǎn)輸入正確的聲音,以此循環(huán)往復(fù)。因此,描述評(píng)分操作業(yè)務(wù)流程可以以用戶輸入聲音為起點(diǎn),用戶聲音通過(guò)麥克風(fēng)采集后轉(zhuǎn)換為數(shù)字語(yǔ)音信號(hào)數(shù)據(jù),系統(tǒng)通過(guò)語(yǔ)音信號(hào)處理分析其短時(shí)語(yǔ)音基頻,并根據(jù)頻率、音高轉(zhuǎn)換關(guān)系得到對(duì)應(yīng)時(shí)間點(diǎn)音高參數(shù),這里的時(shí)間點(diǎn)來(lái)源于卡拉OK系統(tǒng)播放音頻文件得到的播放時(shí)間,整個(gè)系統(tǒng)都以該時(shí)間線為基準(zhǔn)處理事件的時(shí)間對(duì)應(yīng)關(guān)系。在播放音頻的同時(shí),系統(tǒng)將解析音準(zhǔn)特征文件,以獲得標(biāo)準(zhǔn)的音高、時(shí)間對(duì)應(yīng)關(guān)系,這是評(píng)分的基準(zhǔn),用戶輸入的語(yǔ)音經(jīng)過(guò)處理后得到的音高參數(shù)將與該基準(zhǔn)對(duì)應(yīng)時(shí)間點(diǎn)音高值進(jìn)行匹配,從而按照匹配度計(jì)算得分。系統(tǒng)的演唱界面部分則負(fù)責(zé)實(shí)時(shí)向用戶展示當(dāng)前時(shí)間點(diǎn)的演唱情況,包括歌詞、標(biāo)準(zhǔn)音高序列、用戶演唱音高,以及實(shí)時(shí)得分信息等。用戶將根據(jù)演唱界面當(dāng)前的演唱效果作為指導(dǎo),從而決定下個(gè)時(shí)間點(diǎn)的輸入聲音。該循環(huán)將重復(fù)直至歌曲文件播放完畢,此時(shí)系統(tǒng)將計(jì)算最終得分,并將結(jié)果通過(guò)演唱界面展示給用戶。
設(shè)計(jì)方案需要包含以下4個(gè)元素1)音高音長(zhǎng)信息:根據(jù)歌曲歌譜將對(duì)應(yīng)時(shí)刻音高,以及時(shí)長(zhǎng)表現(xiàn)在五線譜上供演唱者參考;2)歌詞信息:根據(jù)歌曲歌譜將對(duì)應(yīng)語(yǔ)句歌詞文字顯示在演唱界面供演唱者參考;3)演唱游標(biāo):指示演唱者當(dāng)前演唱進(jìn)度,并反映演唱者聲音的量化音高;4)評(píng)分狀態(tài):演唱者實(shí)時(shí)的得分評(píng)價(jià),可包括得分、點(diǎn)評(píng)、加成等各種狀態(tài)。
在整體形態(tài)上,一般有兩種方案,如上圖。設(shè)計(jì)方案1是將演唱游標(biāo)固定,音高、歌詞信息在界面上從右向左水平移動(dòng)。這個(gè)方案的優(yōu)勢(shì)是演唱者視線可以專注于固定的游標(biāo)區(qū)域,劣勢(shì)是當(dāng)一首卡拉OK歌曲節(jié)奏比較快時(shí),信息的運(yùn)動(dòng)速度也很快,演唱者瀏覽信息的速度跟不上信息自身運(yùn)動(dòng)速度。設(shè)計(jì)方案2是將當(dāng)前句的音高、歌詞,以及下一句的歌詞固定顯示在屏幕上,游標(biāo)隨著演唱進(jìn)度水平向右移動(dòng)。這樣做的好處是演唱者一次性就可以把當(dāng)前句和下一句歌詞都提前瀏覽,便于演唱;另一方面,由于不需要移動(dòng)大量的信息,減少了信息刷新面積,節(jié)省了大量CPU的計(jì)算消耗,可以使系統(tǒng)更靈活的運(yùn)用在嵌入式領(lǐng)域以及其他低功耗的應(yīng)用領(lǐng)域。因此本文將采納第二種方案作詳細(xì)介紹。具體的實(shí)現(xiàn)方式如下:
首先需要在屏幕上顯示當(dāng)前句歌詞的標(biāo)準(zhǔn)音高。標(biāo)準(zhǔn)音高信息一般是由歌曲歌譜制作而成的音準(zhǔn)特征文件中讀取。音準(zhǔn)特征文件包含了歌曲中每一個(gè)音的音高、音長(zhǎng)、時(shí)值以及對(duì)應(yīng)時(shí)間點(diǎn)的歌詞信息。用橫向的長(zhǎng)條空槽來(lái)表示音高和音長(zhǎng)。其中空槽的顯示位置高低表示音高、空槽的長(zhǎng)度表示音長(zhǎng)。在垂直顯示方向上,通過(guò)遍歷歌曲的所有標(biāo)準(zhǔn)音高值,得到其中最大值以及最小值,該最小值映射到屏幕上這首歌曲的音高顯示區(qū)域的底部,最大值對(duì)應(yīng)顯示區(qū)域的頂部,其他標(biāo)準(zhǔn)音高值的顯示位置,通過(guò)與該最小值的差值在該最大、最小值范圍內(nèi)的比例關(guān)系確定其垂直方向顯示位置。在水平顯示方向上,以當(dāng)前歌詞行的第一個(gè)音高的起始時(shí)間作為起始時(shí)間點(diǎn),以當(dāng)前行的最后一個(gè)音高的結(jié)束時(shí)間作為行結(jié)束時(shí)間,并將二者差值作為本行總持續(xù)時(shí)間,第一個(gè)音高(空槽)的左端點(diǎn)布置在顯示區(qū)域左端開始位置,最后一個(gè)音高的右端點(diǎn)布置在顯示區(qū)域右端結(jié)束位置,其他音高分別根據(jù)自身的開始、結(jié)束時(shí)間與本行起始時(shí)間點(diǎn)的差值在本行總持續(xù)時(shí)間內(nèi)的比例關(guān)系確定其左、右端點(diǎn)在水平方向的顯示位置。
其次是歌詞的顯示。歌詞分為當(dāng)前行歌詞信息和下一行歌詞信息。顯示兩句歌詞,可以解決用戶演唱連貫性的問(wèn)題,唱當(dāng)前行歌詞的時(shí)候就可以快速預(yù)覽下一行歌詞內(nèi)容。另外,歌詞與音高在音準(zhǔn)特征文件中就設(shè)計(jì)成具有對(duì)應(yīng)關(guān)系,在顯示的時(shí)候,當(dāng)前行歌詞與對(duì)應(yīng)的音高具有相同的時(shí)間軸,即先顯示音高空槽,再在空槽的左端點(diǎn)下方顯示對(duì)應(yīng)的歌詞文字。這樣用戶在演唱的時(shí)候就能把詞曲對(duì)應(yīng)起來(lái),不容易唱錯(cuò)。
最后是結(jié)果的展示。結(jié)果主要由游標(biāo)、空槽填充以及得分來(lái)表示。其中游標(biāo)用于表示演唱者的當(dāng)前音高,空槽的填充表示用戶在對(duì)應(yīng)音高上的演唱準(zhǔn)確度,得分表示整首歌的當(dāng)前得分。游標(biāo)隨著演唱時(shí)間水平向右運(yùn)動(dòng),根據(jù)實(shí)時(shí)采集的人聲信號(hào)計(jì)算得到實(shí)時(shí)音高值,判斷音高值的變化,改變游標(biāo)垂直方向位置,從而調(diào)整演唱游標(biāo)與基準(zhǔn)音高值的相對(duì)位置展示關(guān)系;當(dāng)實(shí)時(shí)音高值低于基準(zhǔn)音高值時(shí),演唱游標(biāo)在所展示的基準(zhǔn)音高值下面;當(dāng)高于基準(zhǔn)音高值時(shí),展示在上面。如果判定實(shí)時(shí)音高值與基準(zhǔn)音高值保持匹配,則實(shí)時(shí)填充空槽,空槽填充的越多,表示演唱越準(zhǔn)確。得分是對(duì)最終演唱結(jié)果的預(yù)估分?jǐn)?shù),在每句演唱完成后,分析當(dāng)前歌曲已完成的音準(zhǔn)情況,給出總分。一般來(lái)說(shuō)音準(zhǔn)完成度越高,分值越高。
3游標(biāo)抖動(dòng)處理
演唱者的真實(shí)音高并不穩(wěn)定,直接根據(jù)音高值轉(zhuǎn)換為豎直方向坐標(biāo)并繪制演唱游標(biāo),會(huì)導(dǎo)致演唱游標(biāo)出現(xiàn)抖動(dòng)、跳動(dòng)等運(yùn)動(dòng)軌跡,很大程度偏離上一軌跡點(diǎn)或標(biāo)準(zhǔn)音高在界面上的位置,出現(xiàn)在演唱者非預(yù)期的位置上,不利于演唱者觀察演唱游標(biāo)。另外,演唱音高的變化是一個(gè)漸變過(guò)程,而演唱游標(biāo)存在的抖動(dòng)、跳動(dòng)等綜合界面表現(xiàn)與該規(guī)律不吻合,導(dǎo)致演唱者只能獲得一種不完全符合自身發(fā)音規(guī)律的視覺感受。針對(duì)以上問(wèn)題,設(shè)計(jì)了一套音準(zhǔn)抖動(dòng)修正的方法。該方法的主要思想是根據(jù)前一時(shí)刻演唱游標(biāo)的坐標(biāo)、當(dāng)前時(shí)刻演唱音高值(“當(dāng)前時(shí)刻”即歌曲演唱進(jìn)度的任意一時(shí)刻)、前一時(shí)刻(“前一時(shí)刻”即“當(dāng)前時(shí)刻”的上一刻)基準(zhǔn)音高值以及當(dāng)前時(shí)刻基準(zhǔn)音高值四者的關(guān)系,應(yīng)用特定的算法,平滑修正當(dāng)前游標(biāo)坐標(biāo)值,使得演唱游標(biāo)的運(yùn)動(dòng)軌跡得到平滑展示。具體分為以下四種情況:
第一種情況:前一時(shí)刻演唱游標(biāo)的坐標(biāo)高于前一時(shí)刻的標(biāo)準(zhǔn)音高坐標(biāo),并且當(dāng)前時(shí)刻演唱音高值小于當(dāng)前時(shí)刻的標(biāo)準(zhǔn)音高值;則當(dāng)前時(shí)刻演唱游標(biāo)坐標(biāo)=當(dāng)前時(shí)刻標(biāo)準(zhǔn)音高坐標(biāo)+(當(dāng)前時(shí)刻演唱音高值對(duì)應(yīng)坐標(biāo)一當(dāng)前時(shí)刻標(biāo)準(zhǔn)音高坐標(biāo))*因子a1;所述因子a1為大于0,小于等于1的預(yù)設(shè)值;(例如:此處因子a1為1/8,該因子a1是0~1可調(diào),未調(diào)整情況下為1,即存在演唱游標(biāo)抖動(dòng)、跳動(dòng))。
第二種情況:前一時(shí)刻演唱游標(biāo)的坐標(biāo)低于前一時(shí)刻的標(biāo)準(zhǔn)音高坐標(biāo),并且當(dāng)前時(shí)刻演唱音高值大于當(dāng)前時(shí)刻的標(biāo)準(zhǔn)音高值;則當(dāng)前時(shí)刻演唱游標(biāo)坐標(biāo)=當(dāng)前時(shí)刻標(biāo)準(zhǔn)音高坐標(biāo)+(當(dāng)前時(shí)刻演唱音高值對(duì)應(yīng)坐標(biāo)一當(dāng)前時(shí)刻標(biāo)準(zhǔn)音高坐標(biāo))*因子a1。
第三種情況:前一時(shí)刻演唱游標(biāo)的坐標(biāo)高于或等于前一時(shí)刻的標(biāo)準(zhǔn)音高坐標(biāo),并且當(dāng)前時(shí)刻演唱音高大于當(dāng)前時(shí)刻的標(biāo)準(zhǔn)音高值;則當(dāng)前時(shí)刻演唱游標(biāo)坐標(biāo)=前一時(shí)刻演唱游標(biāo)的坐標(biāo)+(當(dāng)前時(shí)刻演唱音高值對(duì)應(yīng)坐標(biāo)一前一時(shí)刻演唱游標(biāo)的坐標(biāo))*因子a2;所述因子a2為大于0,小于等于1的預(yù)設(shè)值;(例如:此處因子a2為1/6,該因子a2是0~1可調(diào),未調(diào)整情況下為1,即存在演唱游標(biāo)抖動(dòng)、跳動(dòng))。
第四種情況:前一時(shí)刻演唱游標(biāo)的坐標(biāo)低于或等于前一時(shí)刻的標(biāo)準(zhǔn)音高坐標(biāo),并且當(dāng)前時(shí)刻演唱音高小于當(dāng)前時(shí)刻的標(biāo)準(zhǔn)音高值;則當(dāng)前時(shí)刻演唱游標(biāo)坐標(biāo)=前一時(shí)刻演唱游標(biāo)的坐標(biāo)+(當(dāng)前時(shí)刻演唱音高值對(duì)應(yīng)坐標(biāo)一前一時(shí)刻演唱游標(biāo)的坐標(biāo))*因子a2。
修正后的效果如圖:
4總結(jié)
本文設(shè)計(jì)了一套基于卡拉0K的評(píng)分應(yīng)用,滿足用戶演唱評(píng)分的需求,增強(qiáng)了卡拉0K的娛樂(lè)互動(dòng)性。演唱評(píng)分系統(tǒng)的實(shí)現(xiàn)非常復(fù)雜,涉及特征文件制作,聲音采集、演唱特征提取、分值算法以及應(yīng)用等等。限于篇幅,只能在應(yīng)用層面上進(jìn)行展開,提出了應(yīng)用整體方案設(shè)計(jì),以及其中關(guān)鍵難點(diǎn)音準(zhǔn)抖動(dòng)的顯示修正方法,僅供參考。