概述

乐器仿真是跨软件工程和音乐理论双领域的交叉学科研究方向,长期以来,受到专业知识的限制,音乐专业人士不能采用软件工程及数学方法对乐器声学原理进行深入的剖析,而软件工程人员对音乐知识了解相对较少,因此涉及音乐的软件工程研究一直相对薄弱。实际上,在现代信号处理、模式识别的技术支撑下,可以揭示音乐背后的数学秘密,提高人类对音乐的理解。软件工程技术在音乐领域的应用,将给人类带来全新的听觉感受,符合国家近期提出的文化强国理念,在人文、科技领域都具有研究意义。

先上个动图给大家看看效果:GUI显示电子琴琴键,黑白键代表不同的音符,点击对应琴键显示音符的时域波形图,并显示音符对应的频率信息,左下角可以调整节拍,即每个音符的持续时间,动图不能播放声音,真实运行其实是有声音的,真正实现了电子琴的效果。

这里贴出部分源代码:
将鼠标点击位置转为音符表:

#################
完整源码有偿私我vx:xdsqczkyqs713,50一套非诚勿扰
#################
% 作用: 把鼠标点击的位置转换为在音符表里的对应下标
% x, y: 鼠标点击坐标function [row, col] = getPositionInTable(x, y)col = floor((x - 1) ./ 17 + 1);row = 2;                                                % row = 2 为白键音符所在行。白键排布有规律, 17像素一个白键。if y < 67                                               % 67是白键和黑键的交界处,如果鼠标点击的范围可能是黑键for left = -5 : 17 : 352                            % 黑键的排布规律right = left + 10;if left > x                                     % 如果x在两个黑键之间,直接跳出。使用上面算好的白键位置即可。breakendif left <= x && x <= right                      % 如果落在某个黑键范围内preAmount = floor((left + 5) ./ 17 + 1);    % 算出是第几个黑键r = mod(preAmount, 7);                      % 第1 5 8 12 15个黑键其实是不存在的if r ~= 1 && r ~= 5                         % 如果黑键位置除以7的余数不是1也不是5,表示确实在黑键上row = 1;                                % raw = 1 为黑键所在行col = preAmount;                        % 列为算出的黑键位置endbreak                                       % 如果确实是不存在的黑键,直接跳出,还是使用上面算好的白键位置。endendend
end

将音符表转为音频信号


function music = noteText2Music(allNotes, noteTexts)% 用于把音符文本转换为音频信号。% -------------------------------% noteText样例:% { 'E41', 'C41', '01', 'AB41'}% -------------------------------global fs;global t;scaleTable = {'B', 'AB', 'A', 'GA', 'G', 'FG', ...'F', 'E', 'DE', 'D', 'CD', 'C'};            % 音阶表scaleNum = 0;music = [];[~, amount] = size(noteTexts);                  % 获取音符数量for i = 1 : amountnoteText = noteTexts{i};if strcmp(noteText(1),'0') == 1             % 音符文本的第一个字符是0表示为休止符noteLength = str2double(noteText(2)); switch noteLengthcase 1note = zeros(1, 22051);    % 01 = 休止 1/2 秒case 2note = zeros(1, 11026);    % 02 = 休止 1/4 秒case 3note = zeros(1, 5513);     % 03 = 休止 1/4 秒endelsescale = noteText(1:end-2);                  % 如果不是休止符则第一个字符到倒数第三个字符为音阶degree = str2double(noteText(end-1:end-1));   % 倒数第二个字符为音度noteLength = str2double(noteText(end:end)); % 最后一个字符为音符长度,含义与休止符最后一个字符相同equMartix = strcmpi(scaleTable, scale);     % 下面一个For循环用于查找音阶在音阶表中的位置for scaleNum = 1 : 12if equMartix(scaleNum) == 1breakendendnote = [];note(1,:) = allNotes{noteLength}(scaleNum, degree,:); % note 为查表获得的音频信号endif isempty(music)       % 将所有的音频信号连接起来。music = note;elsemusic = [music(:,:) note];endendmusic = music/max(music);   % 归一化
end

基于MATLAB的电子琴设计相关推荐

  1. matlab设计长度为50的滤波器,实验5 基于Matlab的数字滤波器设计

    实验五 基于Matlab 的数字滤波器设计 实验目的:加深对数字滤波器的常用指标和设计过程的理解. 实验原理:低通滤波器的常用指标如下所述,其典型规格如下: ?? ????????≤≤≤≤+≤≤-πδ ...

  2. 实验matlab滤波器心得,实验报告基于MATLAB的数字滤波器设计

    <实验报告基于MATLAB的数字滤波器设计>由会员分享,可在线阅读,更多相关<实验报告基于MATLAB的数字滤波器设计(5页珍藏版)>请在人人文库网上搜索. 1.实验78 基于 ...

  3. 圆形上下挤压 matlab,基于Matlab的GUI设计双螺杆挤压机系统仿真软件

    基于Matlab的GUI设计双螺杆 挤压机系统仿真软件 王玉德,张文孝,韩翠玲 (1.大连水产学院,辽宁大连116023;2.山东省机电学校,山东兖州272105) 1 1 2 DesignofSim ...

  4. 基于matlab数字滤波器设计,毕业设计 基于MATLAB的数字滤波器设计

    毕业设计 基于MATLAB的数字滤波器设计,共55页,19284字 摘 要 本文分别研究了在MATLAB环境下IIR数字滤波器和FIR数字滤波器的设计方法及实现方法,并进行图形用户界面设计,以显示本文 ...

  5. 反激式开关电源仿真 基于Matlab simulin仿真软件设计

    5V2A反激式开关电源仿真 基于Matlab simulin仿真软件设计,采用电流电压双闭环反馈PID控制方式,输出电压恒定5V 输入85-265AC 结构:单向桥式?反激变换器 详细的反激Mathc ...

  6. 单片机多功能电子琴课设_基于单片机的电子琴设计(最终版)最新版

    <基于单片机的电子琴设计.doc>由会员分享,可免费在线阅读全文,更多与<基于单片机的电子琴设计(最终版)>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里 ...

  7. 机械设计matlab,基于MATLAB的机械设计方法分析

    随着计算机技术的不断发展,一系列计算软件得到了开发和应用,继而为机械设计带来了新的发展方向.而MATLAB作为强大的数学计算软件,拥有可靠性强.功能多和操作方便等多种优点,所以被广泛地应用在机械设计中 ...

  8. matlab火控雷达,基于MATLAB的GUI设计伺服系统仿真软件

    ·2003年 3月 火控雷达技术 第 32卷 j ' . 基于 MATLAB的GUI设计伺服 系统仿真软件 王 唪 李 忱 .. (南京 电子技术研 究所 南京 210013) 一 _ . , ● [ ...

  9. 基于 MATLAB 的信号发生器设计

    基于 MATLAB 的信号发生器设计 虚拟仪器能充分利用现有计算机资源,通过配以独特设计的软硬件,实现普通仪器的全部功能以及一些在普通仪器上无法实现的功能的软件或程序.本设计的主要内容就是基于 MAT ...

最新文章

  1. 2022-2028年中国氢化环氧树脂产业发展动态及投资趋势预测报告
  2. tomcat 性能设置
  3. python调试器的功能,python调试器是什么
  4. layer.js载入失效问题
  5. 【图解篇】斯达康XV6700刷机超完整教程!!!
  6. 字符设备驱动基础篇0——驱动开发初体验
  7. 如何把proe的工作目录怎么设置在服务器上的唯一方法
  8. linux mysql 修改root密码_MySQL忘了root密码,如何修改?
  9. 21. 投票(poll)
  10. java调试程序(eclipse)
  11. ffmpeg实现摄像头拉流_ffmpeg推流拉流的几种方式
  12. python 调用sqldr_SQLLDR用武之地
  13. 用matlab计算矩阵的权重,如何使用matlab计算加权平均分
  14. 正则 - 纳税人识别号
  15. 最新批量搜狗域名添加绑定工具
  16. 附录1. DXF组码说明
  17. 计算机毕业设计SSM高校第二课堂管理系统【附源码数据库】
  18. linux关机suspending,(转)Linux 休眠原理与实现
  19. 中国“钱”途最光明10所大学
  20. C++:实现一些简单的方法来 布莱克-斯科尔斯期权估值理论(附完整源码)

热门文章

  1. 从美军提出“战场物联网”概念看物联网安全
  2. Excel单元格内字符串反转
  3. incsgo 能直接取回皮肤的CSGO饰品皮肤开箱网站
  4. python中操作pptx中的表格填充背景没有透明度调节的解决方案
  5. 微型计算机剪贴画图片,儿童剪贴画图片大全
  6. jq分页 不刷新页面_ajax实现无刷新分页效果
  7. 光与夜之恋服务器维护,《光与夜之恋》什么时候上线 开服时间介绍
  8. 堡垒之夜显示连接不上服务器,打开堡垒之夜提示网络异常或者连接不上
  9. ERROR: No .egg-info directory found in C:\Users\ybliu\AppData\Local\Temp\pip-pip-egg-info-_zbac78z
  10. python模糊匹配忽略大小写_正则表达式忽略大小写匹配,但保留特定大小写的结果...