本文由wWW. DyLw.NeT提供,第一 论 文 网专业写作教育教学论文和毕业论文以及发表论文服务,欢迎光临DyLW.neT 0 引 言
Matlab是美国MathWorks公司设计的数学软件,主要包括Matlab/Simulink和GUI设计两大部分[1?2]。Matlab可以进行矩阵运算、绘制函数和数据、创建用户界面、系统仿真设计等,主要应用于工程计算、信号处理与通信、图像处理、控制设计等领域。
笔者在近几年的教学中,结合应用型人才培养的目标,采用CDIO工程理念,能充分根据学生的兴趣和爱好进行Matlab教学,针对其系统仿真和人机界面设计两大功能进行模块主题式教学,充分调动了学生学习的积极性。本文采用M文件和GUI界面进行了音乐播放器的设计,并总结了两者之间的联系。
1 基于M文件的音乐设计
1.1 Matlab播放音乐的前提
Matlab具有强大的功能,主要归功于强大的内置函数功能[3?4]。在Matlab中,可以借助sound函数来播放声音,其格式为:
sound(Y,FS) :通过扬声器产生一个采样频率为FS的信号Y,其中Y的范围定义为-1.0≤y≤1.0,超过这个范围的值将被重新调整,以产生更符合人耳的声音。 同时当Y为N×2大小的矩阵时,可以通过该函数产生立体声。
sound(Y):产生默认的采样频率为8 192 Hz的声音。
sound(Y,FS,BITS):产生按位采样的声音,其中大部分的平台支持BITS=8 or 16。
同时可以通过wavwrite 产生*.wav视频/音频文件,其格式为:
wavwrite(Y,FS,NBITS,WAVEFILE):写入一个采样频率为FS Hz,位数为NBITS (其中NBITS 必须为8, 16, 24或32)的数据信息Y,并生成相应的WAVE文件。如果产生立体声的数据需
图1 《荷塘月色》的简谱
依据《荷塘月色》简谱中的谱音,节奏,音节,高低音在matlab *.m文件中建立对应代码,依据响应函数实现。
paragraph1= [1 1 6 5 6 1 1 2 3 2 2 1 2 2 5 5 3 3 2 3 1 1 6 5 5 3 2 3 2 1 2 2 1 2 2 3 2 1 6 2 1;
0 0 ?1 ?1 ?1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ?1 ?1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ?1 0 0;
0.5 1 0.5 1 1 1 0.5 0.5 2 0.5 1 0.5 1 0.5 0.5 0.5 0.5 0.5 0.5 2 0.5 1 0.5 1 1 0.5 0.5 0.5 0.5 2 0.5 1 0.5 0.5 1 0.5 0.5 0.5 0.5 0.5 2];
以上代码功能说明:第一部分为所演奏歌曲的谱;第2部分为各谱音对应的音调;第3部分为各谱音对应的音节。
1.3 歌曲播放
fs = 8000;
sound_pose = [0 2 4 5 7 9 11 0:12];
y = zeros(1, sum(music(3,:))*fs + 1); %初始化
cure_pose = 1;
for count = 1 : length(music)
cure_sound_name = music(1, count); %处理音乐
cure_sound_pose= sound_pose(cure_sound_name);
%产生音乐
cure_freq = 220 * 2 .^ ((cure_sound_pose + rhythm + 3) / 12 + music(2, count));
cure_sound = generate_tune(cure_freq, music(3, count), fs);
y(1,cure_pose:(cure_pose+ length(cure_sound) ? 1)) = cure_sound;
cure_pose=cure_pose+ length(cure_sound);
为了歌曲播放的连续性,需要对其频率进行修正,其代码为:
function y = amendment(p, l)
if p < 0.2
y = p*5;
elseif p < 0.3
y = 1.8 ? p * 4;
else
y = 0.6 * exp((0.3 ? p)/5);
end
2 基于GUI的音乐设计
在Matlab 提供的GUI 上利用Matlab 语言编写核心代码并构建框架是一种不错的选择。这不但减少了代码编写的工程量,而且制作出的软件同时具有界面友好和能够方便进行各种数据处理及图像分析等特点[7?8]。图形用户界面(Graphic User Interface,GUI)的程序是在图形界面[9]下创建与用户交互的控件元素,使用户可以通过操作这些交互控件实现特定的功能,并且可以返回显示在程序界面相应的结果显示区域中[10]。本文通过GUI的GUIDE进行音乐键盘的设计来说明GUI的功能和使用。
2.1 总体界面显示
根据键盘的显示,通过GUI各功能键设置了音乐键盘,其总体设计包括单频发音模块、多频模块、播放谱曲模块、播放视频模块和关闭模块。
图2中键盘的黑、白键通过Pushbutton控件相应属性改变进行设置。
图2 音乐键盘的总体设计
2.2 部分按键代码实现
(1) 关闭功能模块
通过设置一个push button键来实现,在该键callback下,编写该回调函数。程序如下:
selection=questdlg([′是否关闭′,get(gcf,′Name′),′窗口?′], ...
[′Close ′,get(gcf,′Name′),′...′],′是′,′否′,′是′);
%当选择退出按钮时,得出一个问是否确定关闭的框
if strcmp(selection,′否′)
return;
else
clc;
clear all;
delete(gcf);
end
(2) 多频功能模块
通过设置一个radio button 来实现双音多频的功能,当选中该按钮时,则增加它的频率分量。使其含有丰富频率分量。通过设置一个全局变量,当选中该控件时,全局变量的值改变,程序如下:
function duopin_Callback(hObject, eventdata, handles)
global r;
r=get(handles.duopin,′value′); %多频的按钮是否选中
2.3 歌曲的显示
通过查阅资料,发音频率对应的表达式为f=440*2^((f0-49)/12),当所发音为低音时f0的取值为31~37,发中音时f0的取值为40~46,发高音时f0的取值为49~55。播放音乐可以通过设置一个push button键来实现,通过编辑该键callback功能通过wavplay函数就可以播放该歌曲了。 A=440; %标准音A
ft=44100; %频率
f0=ft/2;
scale12=A4/2^(9/12)*2.^((0:11)/12);
ma1=[1 3 5 6 8 10 12]; %七音符
score=[1 1 5 5 6 6 5,...do do sol sol la la sol?
4 4 3 3 2 2 1,...fa fa mi mi re re do?
5 5 4 4 3 3 2,...sol sol fa fa mi mi re?
5 5 4 4 3 3 2,...sol sol fa fa mi mi re?
1 1 5 5 6 6 5,...do do sol sol la la sol?
4 4 3 3 2 2 1];%fa fa mi mi re re do? %乐谱
3 结 语
Matlab具有强大的图形显示功能,同时具有丰富的人机交互界面设计的功能,通过Matlab中的GUIDE创建GUI设计时,既能将已有的M文件进行仿真,又能将仿真的图形结果通过人机交互的方式显示,从而给使用者留下更形象、深刻的印象。而在GUI设计时,可以将设计的GUI界面保存为Fig文件的同时生成对应的M文件,方便用户随时进行编辑处理。利用Matlab/GUI进行界面设计可以为用户提供友好、方便、形象的图形显示和数据分析处理,将会在教学和工程应用上带来良好的效果。
参考文献
[1] 郑阿奇.Matlab实用教程[M].3版.北京:北京电子工业出版社,2012.
[2] 徐明远,邵玉斌.Matlab仿真在通信与电子工程中的应用[M].西安:西安电子科技大学出版社,2009.
[3] 邬晓红,唐红军,赵琳,等.基于Matlab GUI的说话人识别测试平台设计[J].现代电子技术,2013,36(8):59?62.
[4] 沈媛媛.基于Matlab的数字信号处理综合性实验设计[J].实验室研究与探索,2009,28(8):60?61.
[5] 黄飞,李灿平,任小庆,等.基于Matlab/GUI的图像处理软件开发[J].长沙通信职业技术学院学报,2010,9(3):22?25.
[6] 白晓梅,王茹,赵云兵.基于Delta3D的气象仿真框架设计与实现[J].现代电子技术,2012,35(4):29?32.
[7] 李京秀.基Matlab GUI的电路特性演示平台设计[J].现代电子技术,2012,35(22):160?162.
[8] 施晓红,周佳.精通GUI 图形界面编程[M].北京:北京大学出版社,2003.
.微型电脑应用,2011(8):53?56.
[10] 陈瑞峰,左曙光,郭伟.基于Matlab GUI的信号分析系统[J].佳木斯大学学报,2009,27(5):645?647.要建立二维矩阵。
wavwrite(Y,FS,WAVEFILE):产生WAV文件时 NBITS=16 b。
wavwrite(Y,WAVEFILE):产生WAV文件时NBITS=16 b并且FS=8 000 Hz。
1.2 频率转换
本文根据《荷塘月色》的歌谱(如图1所示),通过学习相应的乐理知识后,生成了对应的乐谱矩阵,以进行歌曲的播放[5?6]。其中产生的音符:1?do;2?re;3?mi;4?fa;5?so;6?la;7?ti。音阶:0?低音;1?中音;2?高音;3?超高音;音长:指的是节拍,最低支持1/16拍。