您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于LabVIEW的便携式按键钢琴
虚拟仪器技术及应用--基于LabVIEW的便携式按键钢琴班级:姓名:学号:成绩:一、设计要求:基本功能要求:便携式按键钢琴思路:利用myDAQ的8个数字I/O通道作为琴键输入,通过LabVIEW编程合成出所需频率的声音,经过D/A变换后通过AudioOut端口放大输出。程序中通过设置不同的谐波组合可以最终混合出不同乐器的音色。说明:除了数字I/O的信号采集和模拟信号输出之外,这个题目的主要工作在软件方面的数字信号处理与合成(比如,如果同时按下两个按键,出来的效果应该是两个音的叠加;同时还要考虑针对不同乐器不同音色所对应增加的谐波比例)。软件上还可以增加其他功能,例如可以选择将PC音频输出的音乐通过myDAQ的AudioIn端采集后增加混音或重低音效果等然后再通过AudioOut端播放出来。在硬件方面,可以扩展的一些工作包括琴键输入开关的毛刺滤除电路设计、音频输出后再做一级放大电路等。由于myDAQ只有8个数字I/O端口,因此只能做一个八音阶。衍生功能要求:便携式曲目练习器思路:播放一首歌曲的同时,在PC界面上显示乐谱(或者当前的音阶和拍长),练习者需要按下对应的按键,这些按键连接到myDAQ的数字I/O端口,从而计算机可以判断是否正确,乐曲结束后根据按键的正确性和节奏的正确性给于相应评分。说明:本题目硬件与上一题目基本相同,在练习时可以播放原有旋律,同时记录练习者的按键顺序和时长,合成成乐声在练习结束后播放,并与原旋律比较。相比上一题目,需要在软件中记录数字键输入的顺序和时长。此外,可以设置不同的难度级别。本程序功能规划:根据已有的功能要求,我们需要制定一下我们电子琴程序的方向,究竟要做到什么地步,要做哪些功能,经过小组内的讨论,以及与指导老师的交流,再就是根据我们目前对MyDaq以及LabView的掌握情况,我们制定了如下的具体要求:1.图形界面模块:一个非常形似电子琴的图形界面,做到界面整洁美观,有区分度,交互通俗易懂2.发声模块:电子琴的基本发声功能,做到不同音调,音色,音量3.控制方式模块:做到能用鼠标,键盘和基于MYDAQ的机械按键控制4.扩展模块:①曲目练习器模块:考虑到现有设备的局限性以及知识的局限性,我们现在把曲目练习模块简化为:通过文件IO读取歌曲TXT曲谱,根据曲谱控制钢琴的按键的变色从而作为演奏提示,最后不考虑节奏只考虑曲谱声调的正确率做打分。②自动播放模块:该模块做到根据TXT曲谱来自动演奏钢琴乐。③除此之外,由于涉及曲目练习,我们还要做歌曲的曲谱以及声音文件。二、模块实现:在做本次程序之前,我们进行了充分的调研工作,包括:LabVIEW图形界面系列-色彩搭配;八度音阶频率关系对应表;乐器音色的原理;钢琴音色的制作;曲目曲谱的设计及制作;LabVIEW文件IO及属性节点的使用;MYDAQ设备的基本使用及设备可实现功能;下面将按搭建顺序一一介绍每一个模块的具体实现,最后介绍每个模块之间是如何联系起来的。发声模块播放正弦波要做电子琴,理所当然我们第一步想的就是如何发声,想到以前在《数字信号处理》课程中做过语音信号的处理相关编程,知道播放固定频率的正弦波可以发出声音,再查看LabVIEW所支持的函数,定下了初步的思路,即:首先产生一定频率的正弦波,设置好采样频率以及时长,送播放波形函数,如下图1.1:图1.1播放正弦波图1.2播放三角波于是,我们马上做了一个布尔按钮做测试,利用条件结构(布尔变量为真送一个数字,如266,到正弦波产生函数的输入参数-频率中)实现了发声,但有两个问题:①音质很差(主要因为音色)②有很强的尾音(声音突然停止产生的刺耳噪声)但无论如何我们成功实现了发声。播放三角波为了解决第一个问题,之后查阅了相关内容,知道:不同音色是由某一基频的正弦波叠加上一定比例的谐波成分实现;于是我们做了如下处理:如图1.2,先同样方法产生一定频率的三角波,再通过低通滤波器,我们知道周期的三角波一定可以分解为基波和谐波相加,经过低通滤波器滤除高频后,出来的声音与正弦波是不同的音色结果正如我们所想,出来的音色不同,音色更像电子音,但尾声仍存在。播放公式波形为了解决尾声的问题,我们想如果能让音的尾部音量变小就好了,于是找到了公式波形,将正弦波的幅度随时间改变,开始和末尾的幅度偏小,中间幅度最大,用了如下的公式:sin(w*t)*sin(m*t);幅度A(t)=sin(m*t),使π/m=采样数/采样频率我们设计的采样数为5000,采样率为11025,那么差不多m=2π;于是设计的第三种音色如图1.3:图1.3播放公式波形图1.4播放WAV文件效果比之前两个都好,音色像管弦乐器,尾音更小。播放文件公式波形仍然不能满足我们对完美音色的要求,于是我们决定用另外一种发声机制-播放文件,在网上找了很久没有发现好的八度音阶音色后,我们开始了自己制作相关的音色,还好本组同学中之前有对音乐软件的了解,用++=制作出了所需的WAV文件。我们并用如图1.4的结构实现了WAV播放,由于是外部音,所以效果很好,只是第一次载入有些慢。至此,我们实现了四种音色,接下来就要讨论如何控制发声控制模块由于调试的需要(调试时基本都用鼠标),以及DAQ设备的抢手,我们最初只做了两种控制模式,鼠标控制,以及机械按钮控制。鼠标控制原理上很简单,无论是鼠标控制的8个布尔按钮,还是MYDAQ采集到的面包板上8个按键,输出的都是一个1D的长度为8的布尔数组,通过对布尔数组的每一位做检索,为1则发声,为0则不发声。程序框图如图2.1图2.1鼠标控制发声的结构图中显示的是把鼠标控制的八个布尔按钮(实际鼠标可以控制13个按钮,但因为机械按键只有8个,这里只说八个)集中到一个簇中,在转换为布尔数字,检索布尔数组每一位,如果为1则发出对应频率的声,此处我们查询了音调和频率对应表,如图2.2,得出下面对印关系Duoremifasuonaxidou+261.63293.66329.63349.23392440493.88523.25(HZ)图2.2八度音阶与频率对应关系那么当我们按下DUO按钮时,布尔数组第一个值为真,控制发出261.63Hz的声音,同理按下NA按钮时,布尔数组第六个值为真,控制发出440Hz的声音,如此,实现了鼠标控制;测试鼠标控制发音正常。并行结构的好处:为什么我们要按这种并行检测每一位然后分别播放的结构?实际上是为了解决多个按钮同时按下的时候,能两个音同时发出的需求。机械按键控制机械按键控制与鼠标控制的后面发声部分完全一样,只是前面的簇改为了DAQ助手,DAQ助手选用的是端口采样PORT0,外围硬件接线很简单,用共阳极结构,将MYDAQ的PORT的8个端口分别接面包板上八个按钮的一端,8个按钮另一端接+5V电压高电平,此处没有图。因此,DAQ助手输出的是十进制数,将其转换为2进制数后,后续操作同上。程序如图2.3图2.3机械按键控制发声机械按键控制的问题机械按键的发声测试播放波形时,效果正常;但是播放文件时,由于DAQ助手采样很快,所以按下按钮时,WAV文件会播放很多次,导致声音混叠,我们的解决方法时采用延迟一小段时间的方法,播放文件条件分支里用的是层叠结构,在后面的帧里设置延迟0.1秒,如图2.4图2.4播放波形条件分支中的延迟至此不算扩展功能,我们的基本功能已经实现。图形界面模块前面提及了基本发音及控制,为了实现扩展功能,必须把程序的大体结构和前面板的界面作介绍,前面板如图3.1图3.1前面板前面板结构:左边是曲谱的提示部分;中上是选择控制部分;右上是提示面板(演奏时才有变化);右下是鼠标控制的布尔按钮(设置快捷键之后可以键盘控制)前面板以蓝色为背景,黑白为主色,其他颜色为辅色做提示,整个布局提示在左,操作在右,控制在上,钢琴按键的制作只需将布尔按钮拉长之后用工具选板做变色处理,简单但美观。后面板介绍演奏方式控制模块:对应前面板的演奏方式按钮,控制是否自动播放,以及鼠标/键盘控制,还是机械按钮控制。如图3.2图3.2演奏方式控制歌曲选择控制模块:对应前面板的歌曲选单,决定演奏/自动播放那首歌如图3.3图3.3歌曲选择控制曲目演奏主模块,包括打分主程序,颜色提示主程序,演奏时的变量控制如图3.4图3.4曲目演奏主模块自动播放模块,自动播放的实现程序,如图3.5图3.5自动播放模块以及之前提到的播放声音模块,如图3.6图3.6播放声音模块曲谱文件的读取模块,如图3.7图3.7文件读取模块这里只对每一个模块做一个说明,对应到具体的扩展应用时,再将具体的结构加以说明,下面将介绍扩展功能的实现曲谱练习(扩展)曲谱练习模块的基本原理就是选择完曲目后,程序会从TXT文件里面读取相应的曲谱,读取到的内容输出为字符串,每弹奏一次时,把弹奏的按键对应的数与曲谱中即将弹奏的音对应的数作比较,如果为真,加1分,如果为假,不加分,同时用一个变量记录剩余曲谱的长度,剩余曲谱长度为0时,把总的得分除以曲谱的长度,得到最终的得分。由于程序太过庞大,无法展示所有的条件分支下面以一个流程说明程序的工作①程序运行后选择以下控制方式选择鼠标控制,钢琴音,歌曲练习,歌曲选“我的歌声里”那么歌曲谱变量内容变为“我的歌声里”,如下图4.1:图4.1歌曲谱的改变此时先从TXT中读取字符串,歌曲列表为0时(对应下拉框选择第一个选项“我的歌声里”),把已经读取的字符串送入歌曲谱,那么界面左边的歌曲谱发生了改变,同时做了图4.2的初始化,包括即将演奏音阶的读取,前面板进度条总长度的自适应,歌曲谱送入剩余歌曲谱,即将演奏的第一个音为“3”,长度为“99”。图4.2选择歌曲后的初始化②按下乐谱的一个音“1”(举例为“1”也可为其他)那么程序先判断是否按下按下时,比较的结果为假,把“1”送入当前演奏音阶和演奏记录接下来把剩余曲谱中的第一个音“3”送入当前乐谱音阶剩余乐谱减一建议后的剩余乐谱第一个送入即将演奏音阶接着作比较“1”和“3”比较,不相等,于是正确数目不加1,否则加1图4.1加分的判断③提示按键的变色由于之前比较“1”和“3”,沿线演奏错误,于是把红色属性(代表错误)送到“1”对应的前面板中右上角键盘“1”对应按键的属性节点-颜色中实现变色,延迟0.5秒后,把白色属性重新送入该按键、之后,把黄色属性(代表下一个音)送到即将演奏音阶对应的按钮中,等到下一次按键判断完后,恢复白色如此循环,直到把谱子中所有音阶演奏完后,做判断,弹窗提示你的得分这就是一个大致的流程。谱子系统,变色系统刚才提到了许多关于“1”“3”变色等内容,他们属于我们定义的规则,那么接下来把谱子系统变色系统作介绍1~9:分别代表duo,re,mi,fa,suo,na,xi,duo+,re+;S:suo-;N:na-;X:xi-;M:mi+;回车:延迟0.4秒空格:延迟0.15秒“-”:延迟0.05秒变红色:演奏错误变黄色:此音阶时下一个要演奏的音阶变绿色:演奏正确变白色:默认颜色其实单单一个流程远没有把,程序框图中的每个部分都介绍到,由于要考虑到程序的完整性,细节处理很多,此处提一个比较重要的细节处理空格处理:在计算得分的时候,我们用演奏正确的数目除以总长度,此处的总长度并非为曲谱长度,而是去除了空格回车之后的曲谱长度因此要做如下图的处理,即将演奏为“默认”时空格个数加1,“默认”表示非音阶字符串。最后除以的是谱子长度与空格个数只差。下面将介绍自动演奏模块。自动演奏模块三、总结展望:从此次课设中我们学到了很多东西,对LavVIEW的理解又上升了一个档次,对条件结构的使用更加娴熟,对属性节点,层序结构使用更为熟练,电子琴本身项目的原因也让我们扩充了多方面的知识,不论是从编程,理论知识,设计,其他软件使用方面都对我们有所锻炼,但是即便如此,我们的程序仍有很大的提升空间,比如,我们可以扩展无线控制模块,MATLAB声音处理模块,等更多系统的扩展,但是这也需要我们积累更多的知识之后才能完成,最后感谢老师对我们的指导与帮助。
本文标题:基于LabVIEW的便携式按键钢琴
链接地址:https://www.777doc.com/doc-1764043 .html