陳 兵 許國(guó)泰 單一帆
1(上海市信息網(wǎng)絡(luò)有限公司 上海 200081) 2(東華大學(xué) 上海 201620)
在數(shù)字音樂領(lǐng)域,MIDI(Musical Instrument Digital Interface)是音樂設(shè)備數(shù)字接口。它是一種電子樂器之間以及電子樂器與計(jì)算機(jī)之間的通信協(xié)議。從20世紀(jì)80年代初問世至今,經(jīng)歷了長(zhǎng)時(shí)間的發(fā)展,現(xiàn)已成為電腦音樂的代名詞。
“MIDI控制器”有兩個(gè)含義:(1) MIDI協(xié)議中的一部分;(2) 用于產(chǎn)生這類數(shù)據(jù)的設(shè)備,在本文中所提出的裝置是用于產(chǎn)生這類數(shù)據(jù)的設(shè)備。
MIDI控制器被用于修飾合成聲音的產(chǎn)生,增加音樂的表現(xiàn)力。傳統(tǒng)上,MIDI控制器裝置是一個(gè)臺(tái)式的裝置,擁有若干個(gè)旋鈕和推子。如圖1所示。
圖1 MIDI控制器裝置
這類設(shè)備使用單手或雙手操作,但是在實(shí)際制作[2]或者演奏的過程中,音樂人的雙手往往是很忙碌的,需要在MIDI鍵盤、控制器、鼠標(biāo)等設(shè)備上來(lái)回操作。如果能夠用身體的其他部分來(lái)產(chǎn)生MIDI控制數(shù)據(jù),就可以大大解放音樂人的雙手,讓他們可以集中精力演奏,而不必把手離開鍵盤去撥旋鈕、推推子。
因此,本文設(shè)計(jì)了一種基于航姿參考系統(tǒng)[3]的無(wú)線[4]MIDI控制器,可將慣性傳感器佩戴于音樂人的身上(可以是頭上、手臂上等位置)。相比于傳統(tǒng)控制器來(lái)說(shuō),它的優(yōu)點(diǎn)是可穿戴,操作無(wú)摩擦阻力,可以非常快速高效地進(jìn)行控制,體積小重量輕,成本低廉。
系統(tǒng)在硬件上由兩部分構(gòu)成:傳感器、接收機(jī)。傳感器上放置九軸傳感器芯片、單片機(jī)以及2.4 G無(wú)線電,采集三軸加速度[5]、三軸陀螺儀、三軸電子羅盤的數(shù)據(jù)進(jìn)行九軸融合[6],生成姿態(tài)四元數(shù),通過2.4 G無(wú)線電發(fā)送給接收機(jī)。接收機(jī)是一個(gè)外形上接近U盤的設(shè)備,具備USB接口,將收到的姿態(tài)四元數(shù)[7]轉(zhuǎn)換成歐拉角,取出橫滾分量后用貝塞爾函數(shù)[8]轉(zhuǎn)換成用于控制音樂設(shè)備數(shù)字接口的某個(gè)通道上的控制數(shù)據(jù),通過音樂設(shè)備數(shù)字接口設(shè)備發(fā)送給后端的合成器作為合成器控制參數(shù),用于音樂制作以及音樂演奏。
系統(tǒng)還包括一個(gè)上位機(jī)軟件,用于配置轉(zhuǎn)換函數(shù)的參數(shù)。需要配置的參數(shù)包括貝塞爾函數(shù)控制點(diǎn)、橫滾角度偏移量、音樂設(shè)備數(shù)字接口通道號(hào)、音樂設(shè)備數(shù)字接口控制器編號(hào)。
本文創(chuàng)新點(diǎn)在于使用帶參數(shù)的貝塞爾函數(shù)來(lái)將空間姿態(tài)數(shù)據(jù)轉(zhuǎn)換成音樂設(shè)備數(shù)字接口控制器數(shù)據(jù),其運(yùn)算量小、占用的內(nèi)存空間小、數(shù)據(jù)平滑,并且在作為穿戴式設(shè)備的時(shí)候可以靈活地進(jìn)行姿態(tài)MIDI數(shù)據(jù)變換來(lái)適應(yīng)人的非線性動(dòng)作。例如:將傳感器佩戴于額頭,使用頭部的上下動(dòng)作來(lái)對(duì)音樂設(shè)備數(shù)字接口控制器的7號(hào)控制器數(shù)據(jù)(主音量(粗調(diào))控制器數(shù)據(jù))進(jìn)行控制。假設(shè)合成器將此控制器數(shù)據(jù)解釋為音量參數(shù),那么演奏者可能會(huì)希望在運(yùn)動(dòng)過程的兩端進(jìn)行更粗的控制,在運(yùn)動(dòng)過程的中間段進(jìn)行更細(xì)的控制。這時(shí)可以使用貝塞爾函數(shù)描述這樣的映射曲線,如圖2所示。
圖2 映射曲線1
如果演奏者希望更為激進(jìn)地在兩端進(jìn)行控制以適應(yīng)自己激進(jìn)的情感變化(例如甩頭),那么可以使用另一套參數(shù)來(lái)映射(見圖3)。
圖3 映射曲線2
為實(shí)現(xiàn)圖3的效果,只需簡(jiǎn)單修改貝塞爾函數(shù)控制點(diǎn)參數(shù)。
同樣,我們還可以方便地描述出其他的控制需求,例如半段線性變化、半段激進(jìn)/平緩變化、中途突變等,如圖4-圖6所示。
圖4 映射曲線3
圖5 映射曲線4
圖6 映射曲線5
系統(tǒng)結(jié)構(gòu)如圖7所示。
圖7 系統(tǒng)結(jié)構(gòu)圖
系統(tǒng)采用的主要算法是九軸融合算法和姿態(tài)數(shù)據(jù)/MIDI數(shù)據(jù)轉(zhuǎn)換算法。
首先引入兩個(gè)坐標(biāo)系,傳感器坐標(biāo)系S和地理坐標(biāo)系E。我們可以通過一個(gè)四元數(shù)[wxyz]來(lái)將一個(gè)坐標(biāo)系的數(shù)據(jù)變換到另一個(gè)上。
將一個(gè)S坐標(biāo)系的向量v通過四元數(shù)q轉(zhuǎn)換到E坐標(biāo)系的方程如下:
vE=q×vS×q*
(1)
式中:參數(shù)q是一個(gè)四維復(fù)數(shù),即q=w+xi+yj+zk。w、x、y、x的取值要求為w2+x2+y2+z2=1。q*是q的共軛,即q=w-xi-yj-zk。
三軸陀螺儀是測(cè)量角速度的傳感器,可以非常高速地檢測(cè)出細(xì)微的角速度。通過角速度積分可以測(cè)量出傳感器的旋轉(zhuǎn)量,從而得到一個(gè)空間向量sw,其四元數(shù)形式為[0swxswyswz]。qSE(從S坐標(biāo)系變換到E坐標(biāo)系的q)的方程如下:
qSE(t)=0.5×qSE(t-1)×sw(t)
(2)
三軸加速度計(jì)是測(cè)量加速度的傳感器,用來(lái)測(cè)量地球引力的方向。這個(gè)加速度的值非常穩(wěn)定,大小為g,可以用來(lái)提供一個(gè)固定的姿態(tài)方向(陀螺儀只能提供相對(duì)于初態(tài)的姿態(tài))。
測(cè)得的傳感器數(shù)據(jù)的四元數(shù)為aS=[0axayaz],使用其z軸方向的數(shù)據(jù)gE=[0 0 0 1],則有
f(qSE,aS)=qSE*×gE×qSE-aS=
(3)
要令f(qSE,aS)的值最小,可以采用梯度下降法:
qSE(k+1)=qSE(k)-k(▽f/‖▽f‖)
(4)
三軸電子羅盤是測(cè)量磁場(chǎng)的傳感器,用來(lái)測(cè)量地球磁場(chǎng)的方向。上一步的加速度計(jì)雖然可以得到重力的方向,但是對(duì)于垂直于重力方向的那個(gè)平面卻是無(wú)能為力的,這需要使用磁場(chǎng)方向來(lái)彌補(bǔ)。電子羅盤測(cè)量數(shù)據(jù)的四元數(shù)為mS=[0mxmymz],取水平方向數(shù)據(jù)為bE=[0bx0bz]。
f(qSE,bE,mS)=
(5)
hE=[0hxhyhz]=qSE(t-1) ×mS×qSE(t-1)
(6)
(7)
(8)
最后依然采用梯度下降法使得f最小,得到姿態(tài)四元數(shù)qSE。
首先將四元數(shù)轉(zhuǎn)換成歐拉角:
Pitch=arcsin(-2q2q4 + 2q1q3)
(9)
Yaw= arctan2(2(q2q3+q1q4),q1q1+q2q2-
q3q3-q4q4)
(10)
Roll=arctan2(2q3q4+2q1q2,-2q2q2-2q3q3+1)
(11)
然后取出Roll數(shù)據(jù),它的范圍是-π到π。如果將傳感器穿戴于額頭上,則Roll的角度同頭部的上下動(dòng)作是同步的。因此可以使用一個(gè)轉(zhuǎn)換函數(shù)f(Roll)=CCVal來(lái)將Roll的角度數(shù)據(jù)轉(zhuǎn)換成MIDI CC數(shù)據(jù)。這個(gè)轉(zhuǎn)換函數(shù)可以通過一個(gè)三階貝塞爾函數(shù)來(lái)實(shí)現(xiàn)。
B(t)=P0(1-t)3+3P1t(1-t)2+
3P2t2(1-t)+P3t3
(12)
只要指定四個(gè)控制點(diǎn)P0、P1、P2、P3,就可以根據(jù)當(dāng)前點(diǎn)的坐標(biāo)t來(lái)計(jì)算出對(duì)應(yīng)的點(diǎn)B。運(yùn)算量較小,適合在單片機(jī)上使用。
對(duì)于MIDI CC數(shù)據(jù),其范圍是0~127,由MIDI協(xié)議所規(guī)定,所以B(t)的范圍是0~127。
上位機(jī)可以配置轉(zhuǎn)換函數(shù)的各種參數(shù)、CC號(hào)、MIDI通道號(hào)、貝塞爾控制點(diǎn)的位置等,并且可以監(jiān)控傳感器的電池狀態(tài)等。
將傳感器佩戴于額頭,使用頭部的上下動(dòng)作來(lái)對(duì)MIDI控制器的7號(hào)控制器數(shù)據(jù)進(jìn)行控制。假設(shè)合成器將該控制器數(shù)據(jù)解釋為音量參數(shù),那么演奏者可能會(huì)希望在運(yùn)動(dòng)過程的兩端進(jìn)行更粗的控制,在運(yùn)動(dòng)過程的中間段進(jìn)行更細(xì)的控制。這時(shí)就可以使用貝塞爾函數(shù)描述這樣的映射曲線,見第1節(jié)的圖2。圖2為兩端平緩,中間陡峭的貝塞爾曲線,適合于希望兩端平緩、中間激進(jìn)的用戶使用。
如果演奏者希望更為激進(jìn)地在兩端進(jìn)行控制以適應(yīng)自己激進(jìn)的情感變化(例如甩頭),那么可以使用另一套參數(shù)來(lái)映射。見第1節(jié)的圖3,為兩端陡峭,中間平緩的貝塞爾曲線,適用于希望中間平緩、兩端激進(jìn)的用戶使用。
通過修改貝塞爾函數(shù)控制點(diǎn)參數(shù),可以方便地描述出其他的控制需求。例如半段線性變化、半段激進(jìn)/平緩變化、中途突變等。圖4為低端接近于線性、高端陡峭的曲線,適用于希望低端中庸、高端激進(jìn)的用戶使用;圖5為低端接近于線性、高端平緩的曲線,適用于希望低端中庸、高端平緩的用戶使用;圖6為低端平緩、高端陡峭,中端有一個(gè)急速變化點(diǎn)的曲線,適用于希望中間有一個(gè)計(jì)算變化的激進(jìn)用戶使用。
系統(tǒng)硬件包括傳感器模塊和接收器模塊。傳感器模塊佩戴于使用者身上,接收器模塊插在計(jì)算機(jī)的USB口上,如圖8所示。
圖8 硬件結(jié)構(gòu)圖
系統(tǒng)使用STM32L151單片機(jī)[10]來(lái)作為傳感器模塊的主處理器,使用MPU9150來(lái)作為三軸加速度計(jì)、三軸陀螺儀、三軸地磁傳感器,使用nrf24L01來(lái)作為2.4 G無(wú)線模塊。另外配上LDO、充電管理芯片、LED、USB接口(用于充電和固件升級(jí))、按鈕等。
STM32L151是低功耗單片機(jī),可以有效地降低系統(tǒng)功耗,并且無(wú)需晶振。固件框圖如圖9所示。
圖9 傳感器固件框圖
接收機(jī)模塊使用STM32F103單片機(jī)作為主處理器,nrf24L01來(lái)作為2.4 G無(wú)線模塊,并配上LDO以及USB接口。
選擇F103的原因是成本較低。由于接收機(jī)不使用電池,因此無(wú)需考慮功耗問題。固件框圖如圖10所示。
圖10 接收機(jī)固件框圖
MIDI控制器實(shí)物如圖11所示。
圖11 MIDI控制器實(shí)物圖
圖12為演奏者在工作室中將MIDI控制器佩戴在頭上演奏合成器。使用本文所提出的MIDI控制器之后,演奏者就不再需要將手離開鍵盤去操縱臺(tái)式MIDI控制器了。
圖12 應(yīng)用演奏圖1
如果將傳感器佩戴于手上,則可以非常靈活高速地對(duì)音樂進(jìn)行控制(手比頭更適合高速運(yùn)動(dòng)),對(duì)于物理建模類合成器尤為有用,例如Sample Modeling的一系列產(chǎn)品(單簧管、薩克斯、小號(hào)、長(zhǎng)號(hào)等)。實(shí)際應(yīng)用如圖13所示。
圖13 應(yīng)用演奏圖2
目前,經(jīng)過一段時(shí)間的試用,MIDI控制器已在中國(guó)和美國(guó)的一些私人音樂工作室投入實(shí)際使用,并得到了使用者的認(rèn)可,形成了小批量的銷售,產(chǎn)生了一定的經(jīng)濟(jì)效益。
本文提出的系統(tǒng)除了應(yīng)用于音樂制作領(lǐng)域,還可以應(yīng)用于其他行業(yè)領(lǐng)域,例如:駕駛汽車、飛機(jī)等設(shè)備時(shí)運(yùn)用肢體進(jìn)行體感輔助控制;在VR環(huán)境下作為體感輸入;在舞臺(tái)上用于燈光控制等。
隨著MIDI控制器在國(guó)內(nèi)外范圍使用的逐步增加,下一步將根據(jù)使用意見對(duì)產(chǎn)品改進(jìn),以及向其他行業(yè)應(yīng)用領(lǐng)域拓寬。