基于LabVIEW的便携式按键钢琴最新版.docx

上传人:b****8 文档编号:13114408 上传时间:2023-06-11 格式:DOCX 页数:19 大小:529.60KB
下载 相关 举报
基于LabVIEW的便携式按键钢琴最新版.docx_第1页
第1页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第2页
第2页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第3页
第3页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第4页
第4页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第5页
第5页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第6页
第6页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第7页
第7页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第8页
第8页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第9页
第9页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第10页
第10页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第11页
第11页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第12页
第12页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第13页
第13页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第14页
第14页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第15页
第15页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第16页
第16页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第17页
第17页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第18页
第18页 / 共19页
基于LabVIEW的便携式按键钢琴最新版.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于LabVIEW的便携式按键钢琴最新版.docx

《基于LabVIEW的便携式按键钢琴最新版.docx》由会员分享,可在线阅读,更多相关《基于LabVIEW的便携式按键钢琴最新版.docx(19页珍藏版)》请在冰点文库上搜索。

基于LabVIEW的便携式按键钢琴最新版.docx

基于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有很强的尾音(声音突然停止产生的刺耳噪声)

但无论如何我们成功实现了发声。

◆播放三角波

为了解决第一个问题,之后查阅了相关内容,知道:

不同音色是由某一基频的正弦波叠加上一定比例的谐波成分实现;

于是我们做了如下处理:

如图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时,把总的得分除以曲谱的长度,得到最终的得分。

由于程序太过庞大,无法展示所有的条件分支

下面以一个流程说明程序的工作

1程序运行后选择以下控制方式

选择鼠标控制,钢琴音,歌曲练习,歌曲选“我的歌声里”

那么歌曲谱变量内容变为“我的歌声里”,如下图4.1:

图4.1歌曲谱的改变

此时先从TXT中读取字符串,歌曲列表为0时(对应下拉框选择第一个选项“我的歌声里”),把已经读取的字符串送入歌曲谱,那么界面左边的歌曲谱发生了改变,同时做了图4.2的初始化,包括即将演奏音阶的读取,前面板进度条总长度的自适应,歌曲谱送入剩余歌曲谱,即将演奏的第一个音为“3”,长度为“99”。

图4.2选择歌曲后的初始化

2按下乐谱的一个音“1”(举例为“1”也可为其他)

那么程序先判断是否按下

按下时,比较的结果为假,把“1”送入当前演奏音阶和演奏记录

接下来把剩余曲谱中的第一个音“3”送入当前乐谱音阶

剩余乐谱减一

建议后的剩余乐谱第一个送入即将演奏音阶

接着作比较“1”和“3”比较,不相等,于是正确数目不加1,否则加1

图4.1加分的判断

3提示按键的变色

由于之前比较“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声音处理模块,等更多系统的扩展,但是这也需要我们积累更多的知识之后才能完成,最后感谢老师对我们的指导与帮助。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2