劉雨欣 陳佳欣 董瑞雪 劉卓爾 朱吟秋
DOI:10.19850/j.cnki.2096-4706.2021.08.003
摘? 要:音樂可以陶冶情操,舒緩壓力,放松心情,因此,音樂成為人們?nèi)粘I钪胁豢苫蛉钡囊徊糠?。該樂譜生成APP從滿足人們對音樂生活的需求出發(fā),利用歐幾里得算法、樂譜識別技術(shù)實現(xiàn)對樂譜的自動生成系統(tǒng)的設(shè)計與實現(xiàn),通過登錄注冊模塊,搜索模塊,曲目識別模塊,討論區(qū)模塊,個人主頁等一系列模塊,提供一個音樂平臺,為用戶提供優(yōu)質(zhì)的服務(wù),給用戶一個自由的音樂空間。
關(guān)鍵詞:歐幾里得算法;樂譜識別;分析與設(shè)計
中圖分類號:TN911.22? ? ? 文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2021)08-0009-05
Analysis and Design of Music Score Generation APP Based on
the Improved Euclidean Algorithm
LIU Yuxin,CHEN Jiaxin,DONG Ruixue,LIU Zhuoer,ZHU Yinqiu
(School of Medical Information Engineering,Anhui University of Chinese Medicine,Hefei? 230012,China)
Abstract:Music can cultivate sentiment,relieve pressure,relax the mood. Therefore,music has become an indispensable part of peoples daily life. The music score generation APP starts from meeting the needs of people for music life,using Euclidean algorithm and music score recognition technology to realize the design and implementation of automatic music score generation system. Through a series of modules including login registration module,search module,track recognition module,discussion area module,personal homepage,it provides a music platform to provide users with quality service and gives users a free music space.
Keywords:Euclidean algorithm;music score recognition;analysis and design
0? 引? 言
近年來,我國科學(xué)不斷進(jìn)步和發(fā)展,人們的生活水平也在隨之不斷提高,人們對自身精神生活修養(yǎng)的要求也逐漸提高。同時,人們對自身以及周邊人的文化水平及文化素養(yǎng)的要求也越來越高。音樂可以陶冶情操,舒緩壓力,放松心情,因此,音樂成為人們?nèi)粘I钪胁豢苫蛉钡囊徊糠?。還有一部分人沒有系統(tǒng)學(xué)習(xí)過音樂相關(guān)知識,但是他們對音樂有著渴求,在自學(xué)同時也希望可以根據(jù)自己的喜好選擇一些流行歌曲、小眾歌曲來演奏,但大部分樂譜書都只有傳統(tǒng)古典樂,所以尋找合適的樂譜非常困難。
隨著信息技術(shù)的應(yīng)用及互聯(lián)網(wǎng)的迅速發(fā)展,人們可以網(wǎng)上聽音樂,學(xué)習(xí)音樂相關(guān)知識,學(xué)習(xí)如何識曲、譜曲或者演奏,由此眾多音樂類APP應(yīng)運而生。目前國內(nèi)聽音樂的APP比較多,但是樂譜APP相對較少,且未形成一定范圍內(nèi)的影響力,有部分發(fā)展較好的軟件雖比較貼合大眾,可以供一些業(yè)余愛好音樂的人作譜演奏,但因其樂曲范圍小,設(shè)計不能跟隨時代改進(jìn),且曲內(nèi)還容易出現(xiàn)一些錯誤、紕漏,無法給予用戶更好的演奏體驗。因此,音樂APP市場有著很大一片的空白,流通于網(wǎng)絡(luò)的樂譜常常供不應(yīng)求。
本研究旨在運用歐幾里得算法等技術(shù)識別曲譜,進(jìn)而轉(zhuǎn)化為樂譜,滿足人們對音樂、樂譜的需求,提供平臺及討論區(qū)以供愛好者探討音樂,結(jié)交好友,為大眾提供簡單易行的音樂軟件。
1? 技術(shù)介紹
1.1? 歐幾里得算法
1.1.1? 歐幾里得算法概述
歐幾里得算法是求正整數(shù)的最大公約數(shù)的算法,廣泛應(yīng)用于數(shù)學(xué)和計算機研究領(lǐng)域。數(shù)學(xué)家歐幾里得早在古希臘時就已經(jīng)描述過這一算法,它可以用swift、C語言、C++等多種編程語言實現(xiàn)[1]。歐幾里得算法具體的原理如圖1所示。
該算法由C語言實現(xiàn),具體代碼為:
Int gcd(int a,int b)
{
If(b==0)
{
Return a;
Return gcd(b,a%b);
}
}
1.1.2? 應(yīng)用
歐幾里得算法的應(yīng)用主要是在推薦系統(tǒng)中形成距離評價進(jìn)而評估用戶關(guān)系。基于歐幾里得嵌入的推薦算法是將用戶和物品嵌入到統(tǒng)一的歐幾里得空間中,并用歐式距離表示用戶與物品間的相關(guān)程度。通過公式計算,我們可以得到不同用戶間的歐幾里得系數(shù),系數(shù)越小表示兩個用戶間的距離越小,即用戶偏好相近[2]。
歐幾里得距離評價的應(yīng)用,讓我們可以通過用戶以前的喜好和與他興趣相近的人的愛好來篩選過濾出樂譜,從而達(dá)到給用戶推薦樂譜的目的。我們不難發(fā)現(xiàn),目前市面上用戶群較大的聽歌軟件如QQ音樂、網(wǎng)易云音樂以及大部分人經(jīng)常使用的網(wǎng)購軟件淘寶都具備類似的用戶推薦算法。當(dāng)然,世界上不會有興趣愛好一模一樣的人,當(dāng)某一個用戶喜歡上某一首不那么受大眾歡迎的樂譜時,以上算法的推薦可能就沒有那么準(zhǔn)確了。因此,我們可以加權(quán)這個評價,用戶的相似度越高,最終評分就越高,總結(jié)成公式為:
部分代碼為:
# 構(gòu)建共同的評分向量
def build_xy(user_id1, user_id2):
bool_array = df.loc[user_id1].notnull() & df.loc[user_id2].notnull()
return df.loc[user_id1, bool_array], df.loc[user_id2, bool_array]
# 歐幾里德距離
def euclidean(user_id1, user_id2):
x, y = build_xy(user_id1, user_id2)
try:
value = sum((x - y)**2)**0.5
except ZeroDivisionError:
value = 0
return value
# 余弦相似度
def cosine(user_id1, user_id2):
x, y = build_xy(user_id1, user_id2)
# 分母
denominator = (sum(x*x)*sum(y*y))**0.5
try:
value = sum(x*y)/denominator
except ZeroDivisionError:
value = 0
return value
1.2? 基于樂器演奏水平調(diào)整樂譜難度
在同一張樂譜中,不同的樂器需要使用不同的調(diào)來演奏,這是因為有些樂器需要通過移調(diào),才可以達(dá)到和別的樂器一樣的音高。比如,B調(diào)單簧管比普通樂器低二度,也就是說,單簧管樂譜上的do,就是si的音高。因此,為了更好地滿足用戶的需求,我們添加了一個樂器選擇的欄目,以一種樂器的樂譜為基準(zhǔn),根據(jù)用戶選擇的樂器,將原有的樂譜整體移高或降低相應(yīng)的度數(shù)從而生成相應(yīng)的樂譜。
1.3? 樂譜識別方法
樂曲的構(gòu)成成分十分復(fù)雜,若使用的樂器種類較為單一,那么識別出該樂曲的難度會相對較低,識別出的樂譜也會更加精準(zhǔn)。此外,當(dāng)泛音的強度超過了一定水平時,可能會出現(xiàn)頻譜混疊的現(xiàn)象。實際應(yīng)用時,我們識別處理的樂曲通常使用多種樂器,構(gòu)成的成分也比較復(fù)雜,為了準(zhǔn)確識別這些樂譜,多聲部的樂譜音符基頻識別功能是必須的[3]。首先需要去除噪音,這些噪音存在于樂譜之中,比如工頻噪音和高斯白噪音,對這些噪音的每一幀都進(jìn)行處理,就可以輕易地去除噪音,獲得平滑音符。此外,我們還需要得到基頻特征序列,通過計算每一幀音符的能量,就可以獲知各個音符的基頻特征參數(shù),根據(jù)每一幀音符的參數(shù)創(chuàng)建基頻特征序列。在樂曲音符識別過程中,需要將人聲和伴奏分為兩個頻道,進(jìn)行分離操作,并且通過主旋律提取等技術(shù)識別樂譜,Adobe Audition cs6,Logic Pro X等軟件可以輔助我們實現(xiàn)這些操作。最后,根據(jù)改進(jìn)后的歐幾里得算法,我們可以收集不同風(fēng)格,不同類型的曲譜比如慢歌,快歌,搖滾,古風(fēng),中文歌,西語歌,日語歌,韓語歌,等等,以它們?yōu)榛A(chǔ),收集足夠的數(shù)據(jù),然后構(gòu)建多種不同類型的數(shù)據(jù)模型,將千千萬萬的樂曲進(jìn)行分析和分類,樂曲中相似的部分可以套用同一個數(shù)據(jù)模型,有效地提高了樂譜識別的效率。
1.4? 主旋律提取
主旋律提取技術(shù)是基于歐幾里得算法進(jìn)一步擴(kuò)展到浮點數(shù)據(jù),它根據(jù)每個頂點的頻率估計候選音高,把選中的音高集合到足夠接近時間和頻率的地方,以形成音高輪廓,根據(jù)音高輪廓的顯著函數(shù)形成音高序列。為了打破音樂的不穩(wěn)定性和有限的音高選擇的限制,我們可以首先改進(jìn)歐幾里得算法來選擇候選音高,再利用動態(tài)規(guī)劃算法跟蹤主旋律輪廓,讓主旋律提取的過程更加準(zhǔn)確、優(yōu)化[4]。
部分代碼為:
#計算區(qū)段相似矩陣
def compute_similarity_slow(self,chroma):
num_samples=chroma.shape[1]
time_time_similarity=np.zeros(num_samples)
for i in range (num_samples):
for j in range (num_samples):
time_time_similarity[i,j]=(np.linalg.norm(chroma[:,-1]-chroma[:,-1])/sqrt(12))
return time_time_similarity
1.5? 獲取音頻數(shù)據(jù)
為了獲得范圍廣闊,數(shù)量龐大的樂庫,我們需要廣泛的收集歌曲并且合法購買它們的版權(quán)。這個樂庫就是最基礎(chǔ)的音頻,音頻需要轉(zhuǎn)化成數(shù)據(jù)才能為機器所使用。獲取音頻數(shù)據(jù)首先要將樂曲導(dǎo)入,或者通過麥克風(fēng)錄入聲音。其次,通過脈沖代碼(PCM編碼)或者模數(shù)轉(zhuǎn)換器對導(dǎo)入的音頻或者獲取的聲音進(jìn)行采樣編碼,形成數(shù)字編碼,最終音頻會被轉(zhuǎn)化為數(shù)據(jù)資料為機器所利用。在這個過程中,有三個基本參數(shù):采樣頻率,采樣位數(shù),聲道數(shù),通過這三個參數(shù)來解析音頻文件[5]。
部分代碼實現(xiàn)為:
#將左右聲道的數(shù)據(jù)分離成兩個文件
int pcm16le_split(char *pcmfile) {
FILE *sfp = fopen(pcmfile, "r");
FILE *dfp1 = fopen("output_l.pcm", "w+");
FILE *dfp2 = fopen("output_r.pcm", "w+");
char *sample = malloc(sizeof(char) * 4);
while (!feof(sfp))
{
fread(sample, sizeof(char), 4, sfp);
fwrite(sample, sizeof(char), 2, dfp1);
fwrite(sample + 2, sizeof(char), 2, dfp2);
}
free(sample);
fclose(sfp);
fclose(dfp1);
fclose(dfp2);
return 0;
}
int main(int argc, char const* argv[])
{
pcm16le_split("samples/test.pcm");
return 0;
}
2? 樂譜生成系統(tǒng)設(shè)計
2.1? UI設(shè)計
界面設(shè)計可以根據(jù)制作者和設(shè)計者的需求,既可選擇自主設(shè)計,制作出一套“定制”版APP,也可以選擇套用現(xiàn)在已經(jīng)成熟的設(shè)計風(fēng)格和設(shè)計規(guī)范。在實際運用中,一個APP的頁面不能太過繁雜,這會使人眼花繚亂而感到不適,簡潔美觀而又方便操作才是UI設(shè)計最重要的。同時,規(guī)范的字體和格式等等可以使頁面顯得一目了然,更加簡潔直觀,降低使用者使用的門檻。本次的APP圖標(biāo)設(shè)計,我們選擇制作使用簡潔美觀,有記憶性及可選擇性的圖標(biāo)。
2.2? 頁面設(shè)計
樂譜生成系統(tǒng)的總體部分,可分為iOS系統(tǒng)與Android系統(tǒng)兩個版本。APP界面的設(shè)計采用簡單美觀大方實用的形式,分為前端和后端,前端模塊分三個部分,分別是個人、功能和軟件反饋,功能模塊圖如圖2所示。
下文具體介紹介紹前端功能:
第一個部分是用戶的個人主頁,這一部分可分為兩個部分,一是用戶的個人詳細(xì)信息,比如昵稱,年齡,性別等等,二是用戶查詢管理功能,用戶可以查看自己的軟件使用情況并進(jìn)行管理,包括對賬戶的信息更改,添加刪除收藏記錄,對消息是否自動推送的設(shè)置,對個人計劃文本檔的管理。
對于我的界面,包含用戶個人賬號信息、用戶個人賬號管理、用戶搜索記錄、曲目收藏、用戶以往計劃,推送信息,以及用戶可根據(jù)需求制定自己的練習(xí)計劃。具體實現(xiàn)如圖3所示。
部分代碼為:
第二個部分是軟件的主要功能模塊,最基本的功能是搜索功能,通過檢索關(guān)鍵詞給出相應(yīng)的信息,若未檢測出結(jié)果也要給出相應(yīng)的反應(yīng)。與之相關(guān)聯(lián)的功能是能夠與其他軟件實現(xiàn)跳轉(zhuǎn)操作,實現(xiàn)分享樂曲的功能[6]。此外,還需要信息推送功能,實時更新動態(tài)等一系列必要的功能。具體實現(xiàn)如圖4所示。
部分代碼表示為:
APP功能界面能夠幫助用戶進(jìn)行賬號注冊:首先APP內(nèi)部要有存儲功能,能夠準(zhǔn)確且迅速地查找到用戶所檢索的內(nèi)容,與此同時請用戶進(jìn)行一些個人屬性的設(shè)置。因此用戶如果想要更加方便快捷的使用APP功能,就必須進(jìn)行賬號注冊,擁有自己的賬號來存放相關(guān)信息。用戶可以選擇采用手機號注冊,郵箱注冊或者第三方賬號登錄注冊的方式進(jìn)行賬號注冊。另外需要注意的是,可能有些人因為擔(dān)心個人信息會遭到泄露,而選擇不注冊賬號,甚至直接放棄使用APP。由此可知,確保用戶信息安全,這一點至關(guān)重要。
此款A(yù)PP中,在首頁界面,用戶可進(jìn)行曲目識別與分類檢索,對于每首曲子都可發(fā)彈幕、發(fā)表評論,且在首頁會根據(jù)用戶標(biāo)簽或者檢索內(nèi)容提供相關(guān)用戶可能感興趣的曲目及合作方所需要的音樂宣傳。另外,還可以分類選擇樂譜,如鋼琴,吉他等,也可制作特輯或合集,供用戶選擇。
社區(qū)界面,大體分為三部分,關(guān)注、動態(tài)、圈子,關(guān)注界面為關(guān)注喜歡的歌手、朋友等發(fā)的動態(tài),動態(tài)界面中包含熱議話題、百科知識、同城動態(tài),可在此界面發(fā)表自己的動態(tài)(根據(jù)使用情況,可緊跟時事提供直播等功能),圈子界面里為不同群組發(fā)表的動態(tài),對于有相同興趣的人可建分組群聊。
商城界面,用戶可在其中購買樂器等所需品,此界面也會按商品進(jìn)行分類,為用戶提供快捷、便利的購物環(huán)境,用戶可在此界面看到訂單的所有情況,包括全部訂單、待支付訂單、代簽收訂單及售后。
第三部分是用戶軟件反饋,即對軟件進(jìn)行系統(tǒng)設(shè)置以及用戶給予軟件開發(fā)者的使用反饋。軟件反饋區(qū)塊包括軟件的基本設(shè)置(用戶的注冊與注銷,版本的更新,系統(tǒng)后臺繼續(xù)運作等),用戶意見反饋(使用文字,語音等方式向軟件開發(fā)者提交用戶的使用意見),商業(yè)合作聯(lián)系方式(需要宣傳的樂曲可通過此渠道與專人展開聯(lián)系)。軟件后端即軟件后臺管理系統(tǒng),統(tǒng)籌管理用戶所上傳的各類信息及各種消息的推送。與此同時,軟件也通過應(yīng)用大數(shù)據(jù)技術(shù)同時記錄用戶的搜索記錄等,便于軟件的升級與更新?lián)Q代[7]。
3? 結(jié)? 論
本文介紹了基于歐幾里得算法的樂譜生成APP的設(shè)計與應(yīng)用。歐幾里得算法的應(yīng)用主要是在推薦系統(tǒng)中形成距離評價進(jìn)而評估用戶關(guān)系,基于歐幾里得嵌入的推薦算法,軟件可以更加精確、迅速地捕捉用戶的興趣所在,從而達(dá)到給用戶推薦樂譜的目的。該APP主要包括搜索歌曲,識別樂譜,查看并管理個人信息,社區(qū)交流等功能。通過這些功能,我們可以更加方便快捷地提供音樂需求服務(wù),為音樂愛好者提供一個平臺。
參考文獻(xiàn):
[1] 紀(jì)旭波.用歐幾里得算法求最大公因數(shù) [J].少年電腦世界,2019(Z1):14-16.
[2] 余永紅,殷凱宇,王強,等.基于深度學(xué)習(xí)的歐幾里得嵌入的推薦算法 [J].南京航空航天大學(xué)學(xué)報,2020,52(5):729-735.
[3] 楊靜.基于HMM模型的多聲部樂譜音符基頻識別方法研究 [J].科技通報,2019,35(11):109-112.
[4] 張維維,陳喆,殷福亮.結(jié)合改進(jìn)歐幾里得算法和動態(tài)規(guī)劃的音樂主旋律提取 [J].信號處理,2018,34(8):1008-1015.
[5] 鄭麗鑫,林澤宏,鄭少涌,等.互聯(lián)網(wǎng)+“同文館”校園APP創(chuàng)新模式研究 [J].電腦知識與技術(shù),2019,15(33):43-44.
[6] 王博霖,任昌榮.打卡互助APP的分析與設(shè)計 [J].赤峰學(xué)院學(xué)報(哲學(xué)社會科學(xué)版),2019,40(2):103-106.
[7] 倪海艷,宋南,項媛媛,等.一種車載App及功能應(yīng)用活躍度監(jiān)測方法設(shè)計與實現(xiàn) [J].汽車實用技術(shù),2021,46(14):24-26.
作者簡介:劉雨欣(2000.09—),女,漢族,江蘇泰州人,本科在讀,研究方向:信息管理與信息系統(tǒng)。
收稿日期:2021-03-11
基金項目:2020年安徽省大學(xué)生創(chuàng)新創(chuàng)業(yè)項目(202106070558)