基于ARM+Linux的模拟电子琴设计

2020-07-04 02:15胡淼元何文德杨凤年
电脑知识与技术 2020年15期
关键词:电子琴

胡淼元 何文德 杨凤年

摘要:采用以ARMCortex-A8架构的s5pv210处理器为核心的硬件平台,以嵌入式Linux为软件平台,开发了一款模拟电子琴软件。打开模拟电子琴程序后,演奏者可在液晶屏上显示的琴键通过触摸屏弹奏乐曲。此外,模拟电子琴系统中内置了数十首中外流行的乐曲,演奏者选中某首乐曲后,可在液晶屏上显示其简谱或五线谱,电子琴还可自动演奏所选中的乐曲。

关键词:嵌入式Linux;电子琴;图片显示;音符发声

中图分类号:TP319 文献标识码:A

文章编号:1009-3044(2020)15-0253-02

嵌人式系统的广泛应用令家电以及玩具产业日新月异,同时也极大提高了电子产品的设计效率和产品品质。电子琴属于嵌入式系统产品范畴,其种类很多,通常适合5岁以上儿童以及成人的学习和演奏,价格一般在几千元乃至数万元。然而,对于培养和启发儿童和青少年的音乐兴趣来说,不必拘泥于价格昂贵且不太便于携带的电子琴,一款价格亲民的具备模拟电子琴功能的平板电脑,或许就能满足普通家庭的需求。因此,融合计算机技术和嵌入式系统技术的模拟电子琴的研究及设计开发受已受到了业界的关注。这类模拟电子琴基于便携式的硬件平台,能通过寓教于乐的方式培养青少年的音乐兴趣、普及乐理知识,深受人们的青睐。

1系统方案设计

电子琴通常采用振荡器和分频器获得音频信号,再经过运放电路放大,最后驱动扬声器发声,键盘用于控制进入扬声器信号的频率,最终实现电子琴的功能。本文在实现模拟电子琴基本功能的基础上,还增添了自动演奏和乐谱提示等功能,使其更具有趣味性和益智性。该设计由硬件和软件两部分组成,硬件以ARM Cortex-A8架构的s5pv210处理器为核心,结合内存和Flash存储器组成核心板,再加上液晶屏(LCD)、触摸屏、扬声器等模块构成。

模拟电子琴包含两种工作模式:(1)弹奏模式,为电子琴的基本工作模式,依次按下键盘区的1-8号按键时,扬声器就会依次发出Do、Re、Mi、Fa、So、La、Si、高音段的Do等8个音符。(2)播放模式,播放系统内置的音乐,用户可以通过触摸屏按键选择乐曲进行播放,播放音乐时液晶显示屏会显示对应的乐曲编号和名称。

2硬件和软件平台

硬件由基于ARM Cortex-A8架构的s5pv210为处理器的硬件平台(处理器主频为1GHz,核心板的内存为1GB DDR2、存储器为4GB iNAND),结合带电容触摸功能的8.0寸800*1280、全视角IPS液晶显示模块,以及音频功放模块(含放大器和扬声器)等主要模块组成,用户通过触摸屏模块输入信息,核心处理器接收信息后作相应处理,然后控制液晶显示模块和音频模块对输人信息做出响应。其硬件结构如图1所示。

软件平台采用开源的Linux操作系统,经驱动程序设计和内核裁剪后移植到上述硬件平台,模拟电子琴是基于以上软硬件平台的应用程序,采用c语言开发,交叉编译环境使用arm-linux-gec。

3模拟电子琴软件开发

3.1关键技术

3.1.1 LCD上显示bmp格式图片

Linux系统中一切操作皆作为文件处理,故Linux操作LCD模塊就是一个对LCD模块文件的读写,使用mmap(1来简化操作,这是一种内存映射文件的方法,即将一个文件或者其他对象映射到进程的地址空间,这样进程就可以让用户程序直接访问设备内存,而不必再调用readO、writeO等系统调用函数。使用完后也必须使用munmap()解除映射。

电子琴琴键等图形界面是通过bmp格式图片在LCD上显示的实现的。首先用lseekO函数分别定位到图片的长宽以及像素数组并读取,然后对像素数组进行解码,由24位变成32位,再对屏幕上每个点进行颜色赋值。源代码的关键是先实现在LCD屏幕坐标为(i,j)的点上显示指定的颜色color的函数void led_display_pointont i,int j,int color),最后实现void lcd_dis-play_bmp(char*bmpname,intx,int y)函数,其中,x、y为在LCD屏幕上图片显示位置的坐标,bmpname为带路径的bmp图片的文件名。

3.1.2触摸屏输入事件处理

Linux触摸屏驱动一般采用input子系统驱动框架实现,因此应用层接口要遵循input框架的接口。触摸事件在文件中用结构体struct input_event来描述,其结构成员包括time(按键时间)、type(事件类型)、code(事件键值)、value(值),以此来对事件进行判断。如果事件类型为EV_KEY,则相应的code值为按键状态,1为按下,0为弹起;如果是事件类型为EV_ABS,相应code的值为对应的坐标轴x、y。按键事件的判断可以设立标志位flag,先置为0,当按键状态为1H.flag=0时,即为按下。然后将flag置为1;当按键状态为0且flag=l时,即为弹起。然后将flag置为0,就可以实现对触摸屏按键事件的判断。

3.1.3音符发声

madplay是一个开源mp3解码库,对mp3解码算法做了很多优化,本文基于madplay库实现音符发声。当用户按下一个琴键后,主进程创建一个子进程来使用madplay播放相应的音频文件,设置“分离属性”,让子进程在madplay播完后,实现资源自我回收。若madplay尚未播放完,又有按键事件发生,就又会产生一个新进程,而此时播放器正在被上一个madplay进程占用,使得新进程进入阻塞态等待状态。因此,当按键事件结束后,仍在发声。为此,可以在进程函数中,加入killall系统命令来终止上一个madplay,然后再播放本音符。

3.2软件总体设计

模拟电子琴程序是Linux的应用程序,它启动后先进行LCD液晶显示屏和触摸屏初始化,随后进入程序主界面,提醒用户选择工作模式,用户可以选择弹奏模式或自动演奏模式。在这两种模式下,用户都可将从乐曲库中选择的乐曲的简谱或五线谱显示在LCD上,并在主界面设有退出按钮,系统根据用户的选择进入工作模式切换或退出程序,程序除主界面外的其他界面都设有返回按钮,以方便用户操作。其活动图如图2所示。

4总结

为了培养青少年的音乐兴趣,本文采用以ARM Cortex-A8架构的s5pv210为处理器的硬件平台,嵌入式Linux作为软件平台,用C语言开发了一款模拟电子琴,对其硬件架构和软件设计进行了阐述,重点阐述了其软件设计方法,对嵌入式系统初学者有一定的参考价值。该模拟电子琴具有弹奏和自动演奏两种工作模式,可以提高青少年的音乐兴趣,加深他们对乐理知识的理解和认知。在后续的工作中团队将着重在软件方面做出改进,使模拟电子琴发声的音色种类更加丰富、声音更加悦耳,令其用户体验更出色。

猜你喜欢
电子琴
基于AT89C51单片机的电子琴设计
电子琴在群众文艺演出中的独特作用
小学生电子琴教学的课堂管理探究
电子琴
双排键电子琴教学方法之我见
电子琴在小学音乐课堂中的应用探讨