本發(fā)明涉及智能聲樂領(lǐng)域,特別涉及一種音符序列生成方法及裝置。
背景技術(shù):
:隨著音樂的發(fā)展,用戶對原創(chuàng)音樂的需求越來越大,即用戶不僅想要獲取專業(yè)音樂創(chuàng)作人創(chuàng)作的音樂,還希望自己能夠創(chuàng)作音樂。然而,音樂創(chuàng)作對用戶的要求很高,要想完成音樂創(chuàng)作不僅需要擁有樂理知識、具備一定的音樂素養(yǎng),還需要一定的創(chuàng)作靈感,而一般的用戶往往缺乏樂理知識,且創(chuàng)作靈感也比較匱乏,其進行音樂創(chuàng)作十分困難。技術(shù)實現(xiàn)要素:為了解決現(xiàn)有技術(shù)的問題,本發(fā)明實施例提供了一種音符序列生成方法及裝置。所述技術(shù)方案如下:一方面,提供了一種音符序列生成方法,所述方法包括:獲取第一音符序列,所述第一音符序列包括至少一個音符向量,所述音符向量用于指示音符的音調(diào)值和音符時值;基于所述第一音符序列和音符序列模型確定至少一個音符向量中每一個音符向量的概率值,所述至少一個音符向量中第i個音符向量的概率值用于指示所述第i個音符向量為所述第一音符序列之后的下一個音符向量的概率,所述i大于等于1,所述音符序列模型包括至少一個函數(shù),所述至少一個函數(shù)中的參數(shù)根據(jù)音符序列樣本訓練得到;將所述概率值大于預設閾值的任一音符向量確定為所述目標音符向量;將所述目標音符向量添加在所述第一音符序列之后生成第二音符序列。另一方面,提供了一種音符序列生成裝置,所述裝置包括:獲取模塊,用于獲取第一音符序列,所述第一音符序列包括至少一個音符向量,所述音符向量用于指示音符的音調(diào)值和音符時值;概率確定模塊,用于基于所述獲取模塊獲取的所述第一音符序列和音符序列模型確定至少一個音符向量中每一個音符向量的概率值,所述至少一個音符向量中第i個音符向量的概率值用于指示所述第i個音符向量為所述第一音符序列之后的下一個音符向量的概率,所述i大于等于1,所述音符序列模型包括至少一個函數(shù),所述至少一個函數(shù)中的參數(shù)根據(jù)音符序列樣本訓練得到;向量確定模塊,用于將所述概率值大于預設閾值的任一音符向量確定為所述目標音符向量;序列生成模塊,用于將所述向量確定模塊確定的所述目標音符向量添加在所述第一音符序列之后生成第二音符序列。本發(fā)明實施例提供的技術(shù)方案帶來的有益效果是:通過該第一音符序列和音符序列模型確定目標音符向量,并將該目標音符向量添加至該第一音符序列之后,形成第二音符序列,使得本發(fā)明可以僅根據(jù)預先獲取的第一音符序列即可得到第二音符序列,而不需要用戶本人的創(chuàng)作,使得不具有樂理知識以及靈感匱乏的用戶也能獲得原創(chuàng)樂曲。附圖說明為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本發(fā)明實施例提供的一種音符序列生成方法的流程圖。圖2是本發(fā)明實施例提供的另一種音符序列生成方法的流程圖。圖3是本發(fā)明實施例提供的一種音符序列生成裝置300的框圖。圖4是本發(fā)明實施例提供的一種音符序列生成裝置400的框圖。具體實施方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進一步地詳細描述。圖1是根據(jù)一示例性實施例示出的一種音符序列生成方法的流程圖,如圖1所示,該音符序列生成方法可以應用于服務器或終端中,該音符序列生成方法包括以下步驟:步驟110、獲取第一音符序列,該第一音符序列包括至少一個音符向量,該音符向量用于指示音符的音調(diào)值和音符時值。步驟120、基于該第一音符序列和音符序列模型確定至少一個音符向量中每一個音符向量的概率值,該至少一個音符向量中第i個音符向量的概率值用于指示該第i個音符向量為該第一音符序列之后的下一個音符向量的概率,該i大于等于1,該音符序列模型包括至少一個函數(shù),該至少一個函數(shù)中的參數(shù)根據(jù)音符序列樣本訓練得到。步驟130、將該概率值大于預設閾值的任一音符向量確定為該目標音符向量。步驟140、將該目標音符向量添加在該第一音符序列之后生成第二音符序列。綜上所述,本實施例提供的音符序列生成方法,通過該第一音符序列和音符序列模型確定目標音符向量,并將該目標音符向量添加至該第一音符序列之后,形成第二音符序列,使得本發(fā)明可以僅根據(jù)預先獲取的第一音符序列即可得到第二音符序列,而不需要用戶本人的創(chuàng)作,使得不具有樂理知識以及靈感匱乏的用戶也能獲得原創(chuàng)樂曲。可選的,該基于該第一音符序列和音符序列模型確定至少一個音符向量中每一個音符向量的概率值之前,該方法還包括:判斷該第一音符序列中包含的音符向量的個數(shù)是否小于第一閾值;該基于該第一音符序列和音符序列模型確定至少一個音符向量中每一個音符向量的概率值包括:當該第一音符序列中包含的音符向量的個數(shù)小于該第一閾值時,基于該第一音符序列和該音符序列模型確定至少一個音符向量中每一個音符向量的概率值??蛇x的,該基于該第一音符序列和音符序列模型確定至少一個音符向量中每一個音符向量的概率值之前,該方法還包括:獲取至少一個指定音符序列,該指定音符序列包括至少一個音符向量;將該至少一個指定音符序列中的每一個指定音符序列分割成至少一個子音符序列,每個該子音符序列中包含的音符向量個數(shù)小于第二閾值;基于至少一個該子音符序列訓練得到該音符序列模型。上述所有可選技術(shù)方案,可以采用任意結(jié)合形成本發(fā)明的可選實施例,在此不再一一贅述。圖2是根據(jù)一示例性實施例示出的一種音符序列生成方法的流程圖,如圖2所示,該音符序列生成方法可以應用于服務器或終端中,本實施例僅以該方法應用于服務器中為例進行說明,該音符序列生成方法包括以下步驟:步驟210、服務器獲取第一音符序列,該第一音符序列包括至少一個音符向量,該音符向量用于指示音符的音調(diào)值和音符時值。需要說明的是,上述音符向量用于指示音符,其中,一個音符包括音調(diào)值和音符時值,而且,一個音符向量一般用于指示一個音符。上述音調(diào)值用于反映音符的音調(diào)高低,在本發(fā)明的一個實施例中,該音調(diào)值可以分為倍低音、低音、中音、高音和倍高音五個音區(qū),其中,每個音區(qū)可以分為七個音階。當然,在實際應用中,該音調(diào)值還可以包括倍倍低音、倍倍高音等其他音區(qū),或者,該音調(diào)值可以包括倍低音、低音、中音、高音和倍高音中的任一個或任多個的組合,本發(fā)明對此不做具體限定。此外,每個音區(qū)還可以分為五個音階,如宮商角徵羽,或十二個音階等,本發(fā)明對此也不做具體限定。上述音符時值用于反映音符的相對持續(xù)時間,該音符時值可以包括全音符、二分音符、四分音符、八分音符、十六分音符和三十二分音符,其中,全音符表示音符的持續(xù)時間為四拍,二分音符表示音符的持續(xù)時間為二拍,四分音符表示音符的持續(xù)時間為一拍,八分音符表示音符的持續(xù)時間為半拍,十六分音符表示音符的持續(xù)時間為四分之一拍,三十分音符表示音符的持續(xù)時間為八分之一拍。需要說明的是,在實際應用中,上述音符還可以包括休止符,對于休止符而言,其音調(diào)值可以視為0,而其音符時值可以包括上述全音符、二分音符、四分音符、八分音符、十六分音符和三十二分音符等,本發(fā)明對此不做具體限定。例如,“0000”即為全休止符,其音調(diào)值為0,其音符時值為全音符。例如,某一音符可以為其表示的音調(diào)值為高音區(qū)第5音階,其表示的音符時值為全音符,即音符的持續(xù)時間為四拍。如上所述,音符向量用于指示音符,實際應用中,音符向量可以包括多個按照順序排列的數(shù)字,例如,某一音符向量可以為[0,1,0,0,……,0],其中,該音符向量中包括210個數(shù)字。本發(fā)明提供了兩種生成音符對應的音符向量的方法,下面本發(fā)明將對這兩種方法進行簡要說明。第一種方法,由技術(shù)人員為每一個音符設定對應的音符向量。本發(fā)明以音調(diào)值分為五個音區(qū),每個音區(qū)分為7個音階,以及音符時值包括全音符、二分音符、四分音符、八分音符、十六分音符和三十二分音符為例,對技術(shù)人員為每一個音符設定對應的音符向量的技術(shù)過程進行說明。具體地,在音調(diào)值分為五個音區(qū),每個音區(qū)分為7個音階,以及音符時值包括全音符、二分音符、四分音符、八分音符、十六分音符和三十二分音符的情況下,音符的數(shù)量總共有210個。則技術(shù)人員可以設定每個音符向量包括210個數(shù)字,即音符向量包含的數(shù)字的個數(shù)等于音符的總個數(shù),且每一個音符向量包含的210個數(shù)字中只有一個數(shù)字為“1”,其他數(shù)字均為“0”,不同的音符向量“1”在210個數(shù)字中的位置不同。例如,對應的音符向量可以為[1,0,0,0,……,0],對應的音符向量可以為[0,1,0,0,……,0]。技術(shù)人員為每一個音符設定對應的音符向量的方法,一方面可以使音符的表示數(shù)學化,方便進行后續(xù)處理,另一方面,獲取音符對應的音符向量不需要服務器進行計算處理,可以減少服務器的運算量。第二種方法,通過音符序列模型訓練計算出每一個音符對應的音符向量。同樣地,利用這種方法得到的音符向量也包括多個按照順序排列的數(shù)字,且,每個音符向量中包含的數(shù)字的個數(shù)可以由技術(shù)人員進行設定。具體地,本發(fā)明可以獲取多個音符序列作為音符序列模型訓練樣本對音符序列模型進行訓練,在本發(fā)明的一個實施例中,音符序列模型訓練可以使用skip-gram模型,即對于任一個音符序列x1,......,xT,使目標函數(shù)最大化,其中,c為一個音符序列模型訓練樣本中包含的音符個數(shù)。其中,p(xt+j|xj)可以使用softmax函數(shù)表示,即其中,v為音符向量,X是音符的總數(shù)量(例如,在音調(diào)值分為五個音區(qū),每個音區(qū)分為7個音階,以及音符時值包括全音符、二分音符、四分音符、八分音符、十六分音符和三十二分音符的情況下,X為210)。通過音符序列模型訓練計算出每一個音符對應的音符向量的方法,一方面也可以使音符的表示數(shù)學化,方便進行后續(xù)處理,另一方面,使用這種方法生成的音符向量中包含的數(shù)字的個數(shù)可以小于音符的總個數(shù),從而可以減小后續(xù)步驟220至250的技術(shù)過程中的計算量,例如,在本發(fā)明的一個實施例中,使用音符序列模型訓練計算出的音符向量可以只包含100個數(shù)字。如上所述,在第二種生成音符對應的音符向量的方法中,需要獲取多個音符序列作為音符序列模型訓練樣本。具體地,本發(fā)明可以先獲取多個樂譜,每個樂譜中包含多個音符,而后對每個樂譜進行分詞操作,忽略掉樂譜中包含的除音符以外的其他符號,如小節(jié)線、連音線等,以形成音符序列,服務器可以使用該多個樂譜經(jīng)分詞操作后形成的多個音符序列作為音符序列模型訓練樣本。此外,還需要說明的是,上述第一音符序列中包含的音符向量的個數(shù)可以為一個也可以為多個。當該第一音符序列中音符向量的個數(shù)為一個時,該第一音符序列中的一個音符向量可以是服務器隨機確定的音符向量,也可以為服務器根據(jù)用戶的選擇操作確定的音符向量,本發(fā)明對此不做具體限定。當該第一音符序列中音符向量的個數(shù)為一個以上時,該第一音符序列可以為服務器隨機確定的音符序列,也可以為服務器根據(jù)用戶的選擇操作確定的音符序列,還可以為服務器根據(jù)后續(xù)步驟220至250生成的音符序列,本發(fā)明對此也不做具體限定。步驟220、服務器判斷該第一音符序列中包含的音符向量的個數(shù)是否小于第一閾值,若小于,則執(zhí)行步驟230,若不小于,則結(jié)束流程。本發(fā)明提供的音符序列生成方法可以生成音符序列,該音符序列中至少一個音符向量所指示的至少一個音符可以形成一種藝術(shù)的、令人愉快的聲音,即形成樂曲。在實際應用中,樂曲一般都有一定的長度,因此,在本發(fā)明中,服務器生成的音符序列中包含的音符向量的個數(shù)也應當大于某一閾值,即第一閾值,否則,該音符序列中至少一個音符向量所指示的至少一個音符的個數(shù)將不足以生成樂曲。因此,若該第一音符序列中包含的音符向量的個數(shù)是不小于第一閾值,則說明該第一音符序列中至少一個音符向量所指示的至少一個音符的個數(shù)已經(jīng)足以形成樂曲,此時本發(fā)明可以結(jié)束流程,若該第一音符序列中包含的音符向量的個數(shù)小于第一閾值,則說明該第一音符序列中至少一個音符向量所指示的至少一個音符的個數(shù)不足以形成樂曲,則本發(fā)明可以執(zhí)行步驟230的技術(shù)過程。步驟230、服務器基于該第一音符序列和音符序列模型確定至少一個音符向量中每一個音符向量的概率值,該至少一個音符向量中第i個音符向量的概率值用于指示該第i個音符向量為該第一音符序列之后的下一個音符向量的概率,該i大于等于1,該音符序列模型包括至少一個函數(shù),該至少一個函數(shù)中的參數(shù)根據(jù)音符序列樣本訓練得到。在本發(fā)明中,服務器可以將該第一音符序列作為音符序列模型的輸入值,以利用該音符序列模型計算至少一個音符向量中每一個音符向量的概率值。上述至少一個音符向量可以是所有的音符向量,例如,在音調(diào)值分為五個音區(qū),每個音區(qū)分為7個音階,以及音符時值包括全音符、二分音符、四分音符、八分音符、十六分音符和三十二分音符的情況下,所有的音符向量為210個不同的音符中每一個音符對應的音符向量,當然,上述至少一個音符向量可以是所有的音符向量中的一部分音符向量,本發(fā)明對此不做具體限定。需要說明的是,上述音符向量的概率值用于指示音符向量為該第一音符序列之后的下一個音符向量的概率,概率值較大的音符向量為該第一音符序列之后的下一個音符向量的概率也較大,即將概率值較大的音符向量放在該第一音符序列之后而生成的第二音符序列為樂曲的概率越大。示例的,上述音符序列模型可以為遞歸神經(jīng)網(wǎng)絡模型,該模型包括輸入層、隱含層和輸出層,其中,輸入層為最下一層,輸出層為最上一層,隱含層位于輸入層和輸出層之間,“輸入層”用于接收針對該音符序列模型的輸入值,即上文所述的“第一音符序列”,“隱含層”的輸出值可以通過“輸入層”輸入的輸入值直接或間接地得到,音符序列模型的最終輸出值通過上述“輸出層”得到,即上文所述的至少一個音符向量中每一個音符向量的概率值。其中,輸入層、隱含層和輸出層均包含至少一個節(jié)點,每層中的節(jié)點均通過有向弧指向上一層節(jié)點,隱含層和輸出層中的每個節(jié)點對應于一個函數(shù),該函數(shù)的參數(shù)為指向該節(jié)點的有向弧對應的權(quán)重值,該函數(shù)的輸入值為指向該節(jié)點的下層節(jié)點的輸出值,該函數(shù)可以基于該參數(shù)和該輸入值得到輸出值。其中,有向弧對應的權(quán)重值,即該函數(shù)的參數(shù)可以根據(jù)音符序列樣本訓練得到。由于本發(fā)明最終的目的是生成樂曲,即生成音符序列,因此本發(fā)明可以獲取大量的音符序列樣本,本發(fā)明在對該音符序列模型訓練之前,雖然無法確定該音符序列模型中包含的參數(shù),但是,本發(fā)明基于該音符序列樣本獲知該音符序列模型的輸入值和輸出值,基于大量的輸入值和輸出值,本發(fā)明最終可以訓練得到該音符序列模型中包含的參數(shù)。示例的,在本發(fā)明的一個實施例中,本發(fā)明提供的音符序列模型中包含的函數(shù)可以為:st=tanh(Uxt+Wst-1)ot=softmax(Vst)其中,xt為第一音符序列中的第t個音符向量,st為第t層隱含層的輸出值,ot為輸出層的輸出值,即模型的輸出即至少一個音符向量中每一個音符向量的概率值,U,W,V為函數(shù)的參數(shù)。如上所述,該音符序列模型可以根據(jù)音符序列樣本訓練得到,上述音符序列樣本的獲取方式與上文所述的獲取多個音符序列作為音符序列模型訓練樣本的方式類似,所不同之處在于對每個樂譜進行分詞操作,忽略掉樂譜中包含的除音符以外的其他符號,如小節(jié)線、連音線等,形成音符序列后,還需將音符序列中的各個音符轉(zhuǎn)換為音符向量,以最終得到音符序列樣本。下面,本發(fā)明將對根據(jù)音符序列樣本訓練得到音符序列模型的技術(shù)過程進行簡要說明。具體地,服務器獲取至少一個指定音符序列,并將該至少一個指定音符序列中的每一個指定音符序列分割成至少一個子音符序列,每個該子音符序列中包含的音符向量個數(shù)小于第二閾值,而后服務器基于至少一個該子音符序列訓練得到該音符序列模型。需要說明的是,上述“至少一個指定音符序列”即為上文所述的“音符序列樣本”。下面本發(fā)明將對服務器基于至少一個該子音符序列訓練得到該音符序列模型的技術(shù)過程進行簡要說明。具體地,本發(fā)明可以使用遞歸神經(jīng)網(wǎng)絡模型對音符序列模型進行訓練,即對于任一個子音符序列x1,……,xT,使目標函數(shù)最大化,其中,p(xt|x1,..…,xt)=g(ht),g為sigmoid函數(shù)或tanh函數(shù),而ht可以用以下公式表示:ht=0,t=1φ(Wxt+Uht-1),otherwise]]>其中,φ也可以為sigmoid函數(shù),使用梯度下降法不斷調(diào)整參數(shù)從而完成對該音符序列模型的訓練。步驟240、服務器將該概率值大于預設閾值的任一音符向量確定為目標音符向量。在本發(fā)明的一個實施例中,目標音符向量可以為上述至少一個音符向量中概率值最大的音符向量。實際應用中,服務器還可以使用多項分布抽樣的方法抽取出最大的概率值,并將該最大的概率值對應的音符向量確定為目標音符向量。具體地,設p1=p(x=X1),……,pk=p(x=Xk),其中,Xi為上述至少一個音符向量中第i個音符向量,p是x的離散多項分布,隨機抽取一個0-1的隨機數(shù)u~U(0,1)服從均勻分布,將p1,p2,……pk累加不超過u的k對應的Xk作為抽樣出的下一個音符。例如,該至少一個音符向量中每一個音符向量的概率值如表1所示:表1音符向量X1X2X3X4X5……X210概率值0.00010.00020.00030.00010.0001……0.98在表1中,本發(fā)明可以使用多項分布抽樣的方法,將X210確定為目標音符向量。步驟250、服務器將該目標音符向量添加在該第一音符序列之后生成第二音符序列。在本發(fā)明中,生成第二音符序列之后,可以重復執(zhí)行步驟220至步驟250的技術(shù)過程。綜上所述,本實施例提供的音符序列生成方法,通過該第一音符序列和音符序列模型確定目標音符向量,并將該目標音符向量添加至該第一音符序列之后,形成第二音符序列,使得本發(fā)明可以僅根據(jù)預先獲取的第一音符序列即可得到第二音符序列,而不需要用戶本人的創(chuàng)作,使得不具有樂理知識以及靈感匱乏的用戶也能獲得原創(chuàng)樂曲。圖3是根據(jù)一示例性實施例示出的一種音符序列生成裝置300的框圖。參照圖3,該裝置包括獲取模塊310、概率確定模塊320、向量確定模塊330和序列生成模塊340。該獲取模塊310,用于獲取第一音符序列,該第一音符序列包括至少一個音符向量,該音符向量用于指示音符的音調(diào)值和音符時值。該概率確定模塊320,用于基于該獲取模塊310獲取的該第一音符序列和音符序列模型確定至少一個音符向量中每一個音符向量的概率值,該至少一個音符向量中第i個音符向量的概率值用于指示該第i個音符向量為該第一音符序列之后的下一個音符向量的概率,該i大于等于1,該音符序列模型包括至少一個函數(shù),該至少一個函數(shù)中的參數(shù)根據(jù)音符序列樣本訓練得到。該向量確定模塊330,用于將該概率值大于預設閾值的任一音符向量確定為該目標音符向量。該序列生成模塊340,用于將該向量確定模塊330確定的該目標音符向量添加在該第一音符序列之后生成第二音符序列。在本發(fā)明的一個實施例中,該序列生成模塊340,還用于判斷該獲取模塊310獲取的該第一音符序列中包含的音符向量的個數(shù)是否小于第一閾值。該概率確定模塊320,還用于當該第一音符序列中包含的音符向量的個數(shù)小于該第一閾值時,基于該第一音符序列和該音符序列模型確定至少一個音符向量中每一個音符向量的概率值。該獲取模塊310,還用于獲取至少一個指定音符序列,該指定音符序列包括至少一個音符向量。參見圖4,在本發(fā)明的另一個實施例中,還提供了另一種音符序列生成裝置400,該裝置基于上述圖3的實施例結(jié)構(gòu),還包括訓練模塊350。該訓練模塊350,用于將該至少一個指定音符序列中的每一個指定音符序列分割成至少一個子音符序列,每個該子音符序列中包含的音符向量個數(shù)小于第二閾值。該訓練模塊350,還用于基于至少一個該子音符序列訓練得到該音符序列模型。綜上所述,本實施例提供的音符序列生成裝置,通過該第一音符序列和音符序列模型確定目標音符向量,并將該目標音符向量添加至該第一音符序列之后,形成第二音符序列,使得本發(fā)明可以僅根據(jù)預先獲取的第一音符序列即可得到第二音符序列,而不需要用戶本人的創(chuàng)作,使得不具有樂理知識以及靈感匱乏的用戶也能獲得原創(chuàng)樂曲。需要說明的是:上述實施例提供的音符序列生成裝置在生成序列時,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實施例提供的音符序列生成裝置與音符序列生成方法實施例屬于同一構(gòu)思,其具體實現(xiàn)過程詳見方法實施例,這里不再贅述。本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。當前第1頁1 2 3