田偉 李玲香 潘學文



摘要:針對新手剛接觸電子鋼琴無法看懂五線譜,上手較為困難而易失去學習興趣。該文在傳統電子鋼琴基礎上,琴譜的部分則應用Qt技術來搭建界面,并將鋼琴五線譜的每個發音轉換成開發板中每個按鍵的位置得到簡化琴譜。簡化后的琴譜在開發板上顯示出來的12個按鍵,正好對應簡易琴譜上的每一個音。這樣,無論什么基礎的人都可以對照顯示屏的琴譜,順利彈奏出完整美妙的鋼琴曲。此外,該文電子鋼琴是在S5p6818開發板上實現的,攜帶方便而不占用大量空間資源。
關鍵詞:電子鋼琴;S5p6818;TFTP;線程
中圖分類號:TP311? ? ? 文獻標識碼:A
文章編號:1009-3044(2021)15-0212-03
1 背景
據調查分析,人們多數人認為自身會一種甚至多種樂器,會讓自己在社會中有更好的發展,更好地表現自己,現在越來越多的家長熱衷于青少年對樂器的學習和培養。
2019年初,卡西歐推出新一代輕薄便攜帶的電鋼琴,PX,CDP,EP系列[1]。該系列電子琴雖然在體積有所改觀,但出門攜帶仍有困難,而且價格不菲。其后,在針對電子鋼琴體積大,價格貴的問題,一些鋼琴制造商們又推出了可折疊式的電鋼琴,相比于傳統的電子鋼琴來說,其體積大大減小,價格也相對實惠,但折疊式電子鋼琴折疊后,仍然存在不便于隨身攜帶和占用空間的問題。比如一些大學生對電子鋼琴比較感興趣的就不能在宿舍隨時拿出,隨時彈奏。如今,基于C++的電子鋼琴,相比于前幾代的鋼琴系列,輕巧便攜,價格實惠。
2 系統總體設計
本文系統主控模塊采用S5p 6818芯片作為核心,用USB線將電腦與S5p 6818上的COMO端口相連接,再將電腦上的RJ45接口用網線與s5p 6818上的ETHERNET端口相連接,通過Tftp[2]將文件傳輸到S5p 6818上,開發板接收文件完畢后,通過SecureCRT 去控制終端的開發板,在開發板上對文件進行壓縮,再運行,能夠正常運行后,LED屏上會將文件中的內容顯示出來,達到顯示鋼琴鍵盤的效果。其系統總體框圖如圖3所示。
3 系統實現
3.1 部分硬件設計
3.1.1 外圍電源電路設計
電源供電采用DC 5V/3A提供給s5p6818供電,提供穩定的電壓,充足的電流,且電源電壓建立時間短,功耗消耗也低,能滿足供電電源的所有基本要求。其外圍供電電路設計如圖4所示。
3.1.2 數據收發模塊設計
數據收發模塊使用PHY芯片RTL8211E對以太網進行連接進行收發數據,其連接電路如圖5所示。
3.2 軟件實現
3.2.1 鋼琴界面實現
首先打開VMware-Workstation虛擬機,在虛擬機中左邊的框中選中安裝好的QtCreator,就可以創建一個新的Qt工程,其創建流程[3]如圖6所示。
本文Qt界面搭建,采用mainwindow.ui[4]。因為其十分的簡單,只需要在控鍵箱中找到自己需要的控鍵,然后拖拽到位于中心的設計區域即可。等在設計區域中把想要的界面搭建好后,編寫代碼設置一些特定按鈕的信號以及槽函數實現想要達到的功能。
visible = false;(visble是申明在頭文件中的一個布爾類型,在這將它賦值false)
ui->widget_datetime->setVisible(visible);(表示開始的時候將界面中命名為datatime的對象先隱藏起來)
connect(ui->btn_datetime,SIGNAL(clicked(bool)),this,SLOT(onShowOrHideWidget()));(連接點擊按鈕與當前界面類的信號與槽)
this->visible = !visible;
ui->widget_datetime->setVisible(visible);(判斷visible的值,達到可以連續按動按鈕,實現按鈕功能的重復使用的效果)
當代碼編寫完成后,點擊運行,就會把搭建好的界面顯示出來,如圖7所示。點擊設置的顯示琴譜按鈕,就會把琴譜顯示出來,點擊切換琴譜,就會切換到下一張琴譜。如圖8所示。
在Qt搭建的簡易琴譜界面中,簡易琴譜轉化思想是將鋼琴五線譜的每個發音轉換成開發板中每個按鍵的位置。琴譜中的1就對應按鍵中的第1個按鍵,2就對應按鍵中的第2個按鍵,以此類推。剛好簡譜是用阿拉伯數字1,2,3,4,5,6,7去表示音階的7個基本級,分別讀作Do,Re,Mi,Fa,Sol,La,Si,Do.而鋼琴按鍵部分的第一個按鍵正好是發Do的音,以此類推,后面的按鍵就是發Re,Mi,Fa,Sol,La,Si,Do的音,正好又可以對應上音階的7個基本級,所以可以達到讓用戶輕松識譜,輕松彈奏的目的。而琴譜中的0則表示在該處需要稍做停頓,可以達到表示該曲是幾幾拍的效果,使彈奏出來的效果更接近原鋼琴曲。
3.2.2 電子鋼琴程序實現
電子鋼琴軟件實現原理是將鋼琴的一些基礎發音和按鍵保存,存放到創建的鏈表中。按動琴鍵,就會由相應的進程去播放相應的音頻,從而達到,按動每個按鍵,彈出對應音調。
程序代碼編寫思想:首先編寫兩個帶頭結點的雙向鏈表,一個用來保存讀取到的圖片信息,一個用來保存鋼琴按鍵對應音調的文件。再編寫一個識別.bmp圖片和.mp3的代碼。因為在linux操作系統中,一切皆文件,它是根據文件內容來判斷的,而不只是單單依靠后綴名來判斷文件的格式的,當識別到.bmp和.mp3的文件后,會將文件的路徑保存到之前創建的鏈表中,然后根據.bmp圖片在linux操作系統的格式來對文件進行判斷,看是否真的是符合要求的.bmp格式的圖片,判斷函數如下:
char buf[2];
read(fd,buf,2);
if(buf[0] != 0x42 || buf[1] != 0x4d)
{
printf("NO\n");
close(fd);
return -1;
}
printf("Yes\n");
然后將LED顯示屏文件給打開并映射,(顯示屏相關文件存放的路徑為/dev/fb0)。
fd = open("/dev/fb0",O_RDWR);(打開顯示屏相關文件,申請LCD設備資源)
映射:
plcd = mmap(NULL,800*480*4,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
if(plcd == MAP_FAILED)
{
perror("mmap error:");
return -1;
}
申請完顯示屏資源后,就可以在顯示屏上進行畫點,顯示出相應的圖片在顯示屏上。
void draw_point(int x,int y,int color)
{
*(plcd + 800*y + x) = color;
}
4 結束語
本文電子鋼琴在傳統電子鋼琴的基礎上,利用Qt技術搭建了一個琴譜界面顯示簡易琴譜,即使用戶看不懂鋼琴五線譜的情況下,也可根據簡化琴譜彈奏鋼琴曲,有良好的用戶體驗,并攜帶方便,還可支撐簡易譜和五線譜之間的切換,方便用戶后續學習和使用,但系統錄入的曲目數量有限。
參考文獻:
[1] 卡西歐推出新一代輕薄便攜電鋼琴,不忘初衷突破自我[J].樂器,2019(7):98-99.
[2] 孫曉曄,王程,成彬.基于TFTP協議實現STM32的IAP[J].微型機與應用,2016,35(7):76-78.
[3] 付嘉寧.基于Qt的顯控系統圖形顯示的研究[J].電子測試,2017(15):37-38.
[4] 趙北庚.Windows系統下Qt圖形界面集成開發環境搭建[J].科技經濟導刊,2016(9):20.
【通聯編輯:代影】