matlab音乐合成报告汇总_第1页
matlab音乐合成报告汇总_第2页
matlab音乐合成报告汇总_第3页
matlab音乐合成报告汇总_第4页
matlab音乐合成报告汇总_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MATLAB音乐合成综合实验学院:班级:指导老师: 吴宪祥同做者:二 0 一六年十二月摘要本实验共有三部分: 1. 简单的音乐合成; 2. 用傅里叶变换分析音乐;3. 基于傅里叶级数的音乐合成。一步一步分析了用 MATLAB进行音乐合成的过程。通过本实验达到加深对傅里叶级数和傅里叶分析的理解,熟悉对 MATLAB基本使用的目标。 该实验采用 MATLAB软件仿真来实现。首先 , 通过编程对一段真实的音乐进行分析、处理 , 求得这段音乐的基频、谐波分量、等数据; 然后 , 通过对乐理的研究 , 根据分析中求得的数据编写程序 , 进行基于傅里叶分析的音乐合成设计,并设计了图形用户界面。11目录1.

2、 绪论1.1引言31.2实验要求31.3实验原理32. 简单的合成音乐2.1乐理知识介绍 .42.2利用 MATLAB实现音乐合成器, 生成 WAV文件 .52.3除噪音,加包络 .52.4音乐升高和降八度 .92.5加入谐波 .93. 用傅里叶变换分析音乐3.1载入 fmt.wav 并播放113.2处理 realware113.3分析 wave2proc的基波和谐波133.4自动分析 fmt.wav 的音调和节拍164. 基于傅里叶级数的音乐合成4.1重新加谐波 .174.2通过音调信息弹奏送别 .195.制作 GUI界面 .206.实验难点及问题 .217.实验收获 .22221. 绪论1

3、.1 引言信号与系统的概念及分析方法广泛应用于通信、 自动控制、 航空航天、电子信息、地震学、生物工程等领域 , 因此“信号与系统”是一门电子信息学科相关专业的主干技术课程。 MATLAB是国际上公认的优秀的科技应用软件 , 随着版本的不断升级 , 内容也在不断扩充。 基于 MATLAB的音乐分析与合成实验是针对 “信号与系统”课程的重点和难点之一的傅里叶变换和傅里叶级数等内容而设计的。 由于该实验是真实音乐的实际应用 , 可以增进对傅里叶级数和傅里叶变换的理解 , 加深对信号分析工程应用的理解 , 提高在信号分析领域的应用能力。1.2 实验要求1、3-5 人一组,选择不同乐曲,利用MATLA

4、B实现音乐合成器,生成WAV文件;2、给乐音加包络消噪;3、实现音乐的升八度和降八度;4、在音乐中添加谐波;5、用傅里叶级数分析音乐的基频、音调和节拍;6、模仿一些常用乐器(如钢琴、吉他等)实现音乐合成;7、设计 GUI 界面;8、提交设计报告。1.3 实验原理傅里叶变换建立了信号频谱的概念。所谓傅里叶分析即分析信号的频谱 ( 频率构成 ) 、频带宽度等。 要想合成出一段音乐 , 就要了解该段音乐的基波频率、 谐波构成等。因此 , 必须采用傅里叶变换这一工具。对于连续时间信号 f(t), 其傅里叶变换为:F(w)jwtf (t)edt由于其变换两边的函数 f (t) 和 F(w)都是连续函数

5、, 不适合于计算机处理。MATLAB语言提供了符号函数 FOURIER来实现傅里叶变换 , 但该函数需要信号的解析表达式。而工程应用中经常需要对抽样数据进行傅里叶分析 , 这种情况下往往无法得到信号的解析表达式 , 必须采用傅里叶变换的数值计算方法。33如果 f(t) 的主要取值区间为 t1,t2, 定义 T=t2-t1 为区间长度。在该区间内抽样 N 个点 , 抽样间隔为 :TtN则有:F(w)N 1f (t1 n t)ejw(t1 n t)t0可以计算出任意频点的傅里叶变换值 , 假设 F( ) 的主要取值区间位于 1, 2, 要计算其间均匀抽样的 k 个值 , 则有:F(w1N 1j (

6、w1 kw)(t1 n t)k w) t0f (t1 n t)etww2 w1式中 ,k为频域抽样间隔。2. 简单的合成音乐2.1乐理知识介绍乐音的基本特征可以用基波频率、谐波频谱和包络波形3 个方面来描述。基波频率:每个指定音调的唱名都对应固定的基波信号频率。 所谓唱名是指平日读乐谱唱出的 1(do) 、2(re) 、3(mi) , 每个唱名并未固定基波频率。当指定乐曲的音调时才知道此时唱名对应的频率值。如C 调“ 1 ”的基波频率为261.63HZ,F 调“1”的基波频率为 349.23HZ,F 调“ 5 ”的基波频率为 523.25HZ。谐波频谱 : 在音乐领域中称谐波为 “泛音” ,

7、由谐波产生的作用称为音色变化。 当指定音调之后 , 仅指定了乐音信号的基波频率 , 谐波情况并未说明。各种乐器 , 如钢琴或单簧管 , 都可以发出某一音调下的唱名 , 而人的听觉会明显感觉两者不同 ,这是由于谐波成分有所区别 , 频谱结构各异。包络波形 : 不同类型的乐器 , 包络形状也不相同。在音乐合成实验中 , 为简化编程描述 , 通常把复杂的包络函数用少量直线近似。于是 , 乐音波形的包络呈拆线。有时为了保证在乐音的邻接处信号幅度为零 , 也可以用指数衰减的包络来表示 , 这也是最简单的办法。442.2利用 MATLAB实现音乐合成器,生成WAV文件而在 MATLAB中表示乐音所用的抽样

8、频率为 fs=10000Hz,也就是所 1s钟内有1000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。 用一个行向量来存储这段音乐对应的抽样点,在用 sound函数播放即可。根据以上分析在MATLAB中编写如下程序:Clear clc;fs=10000;f=784 659 784 1047 880 1047 784 784 523 587 659 587 523 587 784 659 784 1047 988 880 1047 784 784 587 659 698 494 523 880 1047 1047 988 880 988 1047 880 988 1047 880 8

9、80 784 659 523 587 ;time=fs*1 0.5 0.5 2 1 1 2 1 0.5 0.5 1 0.5 0.5 4 1 0.5 0.5 1 0.5 1 1 21 0.5 0.5 1 0.5 4 1 1 2 1 0.5 0.5 2 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 4 ; N=length(time); %这段音乐的总抽样点数y=zeros(1,N);%用 y 向量来储存抽样点n=1;for num=1:N%利用循环产生抽样数据,num表示乐音编号t=1/fs:1/fs:time(num)/fs;%产生第 num个乐音的抽样点y(n:n+time

10、(num)-1)=sin(2*pi*f(num)*t);%抽样点对应的幅值n=n+time(num);endsound(y,fs);Wavwrite(y, test4 );在MATLAB中运行,但是可以听出效果不是很好。2.3除噪音,加包络下面通过加包络来消噪音。最简单的包络为指数衰减。最简单的指数衰减是对每个音乘以 et 因子,在实验中首先加的是 e 1.5t 的衰减,这种衰减方法使用的是相同速度的衰减,但是发现噪音并没有完全消除, 播放的音乐效果不是很好,感觉音乐起伏性不强。 于是采用不同速度的衰减, 根据乐音持续时间的长短来确定衰减的快慢,乐音持续时间越长,衰减的越慢,持续时间越短,衰减

11、的越快。在 1.1 程序的基础上加上包络,编写如下程序:55加包络前:clear;clc;fs=10000;f=784 659 784 1047 880 1047 784 784 523 587 659 587 523 587 784 659 784 1047 988 880 1047 784 784 587 659 698 494 523 880 1047 1047 988 880 988 1047 880 988 1047 880 880 784 659 523 587 ;time=fs*1 0.5 0.5 2 1 1 2 1 0.5 0.5 1 0.5 0.5 4 1 0.5 0.5 1

12、 0.5 1 1 2 1 0.5 0.5 1 0.5 4 1 1 2 1 0.5 0.5 2 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 4 ; N=length(time); %这段音乐的总抽样点数y=zeros(1,N);%用 y 向量来储存抽样点n=1;for num=1:N%利用循环产生抽样数据,num表示乐音编号t=1/fs:1/fs:time(num)/fs;%产生第 num个乐音的抽样点y(n:n+time(num)-1)=sin(2*pi*f(num)*t);%抽样点对应的幅值n=n+time(num);endsound(y,fs);播放后可以听出噪音已经消

13、除,同时因为不同时长的乐音衰减的快慢不一样,音乐听起来更有起伏感,下图是加包络后的 east 图像 ( 未放大 ):更科学的包络如下图所示,每个乐音都经过冲激、衰减、持续、消失四个阶段。66由上图可以看出这个包络是四段直线段构成的, 因此只要确定了每段线段的端点,即可用端点数据写出直线方程, 因为直线方程可以用通式写出 (我用的是斜截式),因此这段包络可以用简单的循环来完成。 例如认为包络线上的数据如下图所示:据此在 MATLAB中编写如下程序:clear;clc;fs=10000;f=784 659 784 1047 880 1047 784 784 523 587 659 587 523

14、587 784 659 784 1047 988 880 1047 784 784 587 659 698 494 523 880 1047 1047 988 880 988 1047 880 988 1047 880 880 784 659 523 587 ;time=fs*1 0.5 0.5 2 1 1 2 1 0.5 0.5 1 0.5 0.5 4 1 0.5 0.5 1 0.5 1 1 21 0.5 0.5 1 0.5 4 1 1 2 1 0.5 0.5 2 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 4 ;N=length(time);%这段音乐的总抽样点数y=z

15、eros(1,N);%用 y 向量来储存抽样点n=1;for num=1:N%利用循环产生抽样数据,num表示乐音编号77t=1/fs:1/fs:(time(num)/fs;%产生第 num个乐音的抽样点P=zeros(1,time(num); %P为存储包络数据的向量 L=(time(num)*0 1/5 333/1000 333/500 1;%包络线端点对应的横坐标T=0 1 0.5 0.5 0;%包络线端点对应的纵坐标s=1;b=1:1:time(num);%产生包络线抽样点for k=1:4P(s:L(k+1)-1)=(T(k+1)-T(k)/(L(k+1)-L(k)*(b(s:L(k

16、+1)-1)-L(k+1)*ones(1,L(k+1)-s)+T(k+1)*ones(1,L(k+1)-s);%包络线直线方程通式s=L(k+1);endy(n:n+time(num)-1)=sin(2*pi*f(num)*t).*P(1:time(num);%给第 num个乐音加上包络n=n+time(num);endsound(y,fs);plot(y);运行得到的图像为:下图是两个乐音交接处的局部放大图,可以看到前一个乐音一直衰减到 0,后一个乐音从 0开始增加,因此消除了噪音。882.4音乐升高和降八度升高一个八度即每个乐音的频率都提高一倍,变为原来的 2被;降低一个八度即每个乐音的频

17、率都减小一倍,变为原来的 1/2 。因此最简单的办法是将存储乐音频率的向量每个元素改变为 2或 1/2 倍。即将程序中的 f=784 659 784 1047 880 1047 784 784 523 587 659 587 523 587784 659 784 1047 988 880 1047 784 784 587 659 698 494523 880 1047 1047988 880 988 1047 880 988 1047 880 880 784 659 523 587改为f=784 659 784 1047 880 1047 784 784 523 587 659 587 523

18、 587 784 659 7841047 988 880 1047 784 784 587 659 698 494523 880 1047 1047 988 880 9881047 880 988 1047 880 880 784 659 523 587*2或f=784 659 784 1047 880 1047 784 784 523 587 659 587 523 587 784 659 7841047 988 880 1047 784 784 587 659 698 494523 880 1047 1047 988 880 9881047 880 988 1047 880 880 784

19、 659 523 587/2.将上述音乐上高半个音阶,即将频率变为原来的21/12 (1.06 )倍,可以利用resamlpe 函数对原来的数据点进行重采样来实现 , 因为 resample 进行重新采样后会使每个乐音的持续时间改变, 但是因为升高半个音阶, 频率改变不大, 所以每个音的持续时间是基本不变的。2.5加入谐波在1.2 的音乐中加上二、三、四次谐波,基波幅度为1,高次谐波幅度分别为0.2 、 0.3 、0.1 。只需将 1.2 程序改为:clear;clc;99fs=10000;%抽样频率f=784 659 784 1047 880 1047 784 784 523587659 5

20、87523 587 784 659 7841047 988 880 1047 784 784 587 659698 494523 880 1047 1047 988 880 9881047 880 988 1047 880 880 784 659523 587;time=fs*1 0.5 0.5 2 1 1 2 1 0.5 0.5 1 0.5 0.5410.5 0.5 10.5 1 1 21 0.5 0.5 1 0.5 4 1 1 2 1 0.5 0.5 2 0.50.5 0.5 0.50.5 0.5 0.5 0.5 4 ;N=length(time);%这段音乐的总抽样点数east=zero

21、s(1,N);%用 east 向量来储存抽样点n=1;for num=1:N%利用循环产生抽样数据,num表示乐音编号t=1/fs:1/fs:(time(num)/fs;%产生第 num个乐音的抽样点P=zeros(1,time(num); %P为存储包络数据的向量 L=(time(num)*0 1/5 333/1000 333/500 1;%包络线端点对应的横坐标T=0 1.5 1 1 0;%包络线端点对应的纵坐标s=1;b=1:1:time(num);%产生包络线抽样点for k=1:4P(s:L(k+1)-1)=(T(k+1)-T(k)/(L(k+1)-L(k)*(b(s:L(k+1)-

22、1)-L(k+1)*ones(1,L(k+1)-s)+T(k+1)*ones(1,L(k+1)-s);%包络线直线方程通式s=L(k+1);endm=1 0.3 0.2;%波形幅值矩阵ss=zeros(1,length(t);for i=1:length(m)ss=ss+m(i)*sin(2*i*pi*f(num)*t);%加谐波endeast(n:n+time(num)-1)=ss.*P(1:time(num);%给第 num个乐音加上包络n=n+time(num);endsound(2*east,8000);plot(east);1010即可,加颜色部分为修改的部分,加上谐波后音乐效果变得

23、更好了。运行得到的图像为:3. 用傅里叶变换分析音乐3.1 载入 fmt.wav 并播放步骤:载入 fmt.wav 并播放,利用 wavread函数载入,用 sound函数播放,程序如下 :wave=wavread(fmt.wav);sound(wave)这段音乐听起来比之前合成的音乐更加真实,因为里边含有丰富的谐波。3.2 载入文件 Guitar.mat ,处理原始数据realwave步骤:载入文件 Guitar.mat ,分析 wave2proc是怎么由 realwave 得到的。利用 load Guitar.mat; 载入并用 plot 函数将 realwave 、wave2proc分别

24、画出,得到以下两幅图1111wave2proc可以看到, wave2proc比realwave 的周期性好得多,去掉了非线性谐波和噪声。在时域做,从图上可以看到, realwave 的数据大约是 10个周期的共 243个数据,因此可以用 resample 函数对 realwave 进行重新采样, 将采样点提高到 250个,那么重采样后每个周期有 25个点,将这 25个点对应相加求平均值后得到一个周期的值,因为进行了平均, 减小了非线性谐波和噪音, 然后将这 25个数据延托成十个周期即 250个点,在利用 resample 函数对得到的函数重新采样将采样点数恢复到 243个。根据以上分析,编写实

25、现这个思路的程序如下:clear;clc;loadGuitar.mat ;1212wave=resample(realwave,250,243);%重采样,将点数变为 250w=zeros(1,25);for i=1:25for k=0:9w(i)=w(i)+wave(25*k+i);%10个周期的对应点分别求和endendw=w/10;%取平均值wave2=repmat(w,1,10);%将 1个周期的 10个点延拓至 250个点wave2=resample(wave2,243,250); %重采样,将点数变回 243 hold on,plot(wave2, r ),hold off ; %

26、将处理后的数据绘出,红色 hold on,plot(wave2proc); %将所给的数据绘出,蓝色运行后的结果为:由图可见,两组数据重合的很好,说明这种方法是很不错的方法。3.3分析 wave2proc 的基波和谐波为了分析 wave2proc的基波和谐波,可以对 wave2proc进行傅里叶变换,得到wave2proc的幅值谱,在频谱图上的第一个突出的波峰对应的频率即为wave2proc1313基频,利用 help fft 学习了 MATLAB中快速傅里叶变换函数 fft 的用法,编写了如下程序:clear;clc;load Guitar.mat;fs=8000;NFFT = 2nextp

27、ow2(length(wave2proc);Y = fft(wave2proc,NFFT)/length(wave2proc);g = fs/2*linspace(0,1,NFFT/2+1);plot(g,2*abs(Y(1:NFFT/2+1)运行后得到的结果为虽然从图上可以大概看出包络, 但是非常不明显, 假如提高频域的抽样频率,例如将抽样频率由 NFFT = 2nextpow2(length(wave2proc) 改为NFFT = 8nextpow2(length(wave2proc)得到的结果如下 ;1414由图可见虽然频域的抽样频率提高了很多,但是得到的包络依然不精确,这是因为 wav

28、e2proc是周期函数,但是现在的wave2proc只有 243个数据点,并不能非常明显的体现出其周期性, 因此它的幅值谱的离散化程度不高,虽然提高了频域的抽样频率,但是 wave2proc数据点的周期性并没有增加,所以要显示出离散化程度高的幅值谱, 就要增加 wave2proc的周期性,即让 wave2proc在时域重复多次后在进行傅里叶变换。利用 repmat 函数可以将 wave2proc在时域重复。将程序修改为:clear;clc;load Guitar.mat;fs=8000;wave2proc =repmat(wave2proc,20,1); %将 wave2proc重复 20次

29、NFFT = 2nextpow2(length(wave2proc);Y = fft(wave2proc,NFFT)/length(wave2proc);g = fs/2*linspace(0,1,NFFT/2+1);plot(g,2*abs(Y(1:NFFT/2+1)1515由图读出 wave2proc的基频为 329.1Hz,幅值为 0.05401 ,高次谐波幅值分别为:谐23456789波幅0.076760.048410.051900.0057090.019230.0067410.007326值3.4自动分析 fmt.wav 的音调和节拍思路分析 :将 fmt.wav 导入后得到的是一个

30、向量,它包含了这段音乐的所有信息,要自动分析这段音乐的音调就需要将每个音调对应的点进行傅里叶变换得到其幅值谱,在幅值谱上找到第一个幅值较大的极大值点, 该点对应的就是该音调的基频,得到基频后就可以得到高次谐波的幅值。 为了使对每个音调进行傅里叶变换后得到的幅值谱离散程度高, 应该将每个音调的数据在时域上重复多次, 由于这些点都是直接采集的为做处理的点, 因此其重复次数应该足够大才能体现出较强周期性,本实验采用重复 1000次,虽然重复次数越多越好,但是次数太大,程序运行的速度会大大降低。这里边还有两个关键点:第一,在从幅值谱上找基频时,因为图上的极大值1616点很多,怎么能让程序自动确定出准确

31、的基频。第二,在程序找到了基频之后,再由基频去获取高次谐波的幅值时需要有一定的容错能力,例如若基频为 200Hz,幅值为 1,那么对应的二次谐波的频率为 400Hz,但是很可能恰好幅值谱上 400Hz 处的幅值为 0.01 ,但是 401Hz处的幅值为 0.2 ,这时实际上的二次谐波应该为401Hz,但是若没有给基频一个容错范围,显然找到的二次谐波的幅值是不正确的。针对以上提出的两个关键点,我找到了两条有针对性的解决办法。对于第一点,因为幅值谱上极大值点的幅值足够大才能将其定位基频,因此在分析了几个音调后发现基频处的幅值都在0.025 以上,因此将基频处的限定条件改为幅值大于 0.025 的,

32、但是在运行后发现,有几个音调没有分析出来,说明它们的基频幅值小于 0.025 ,其实可以观察一下 fmt.wav 的波形就会发现, 有几段的整体幅值很小,因此基频幅值小,于是又在加上限定条件,若所有点的幅值都小于 0.02 ,那么再用 0.015 作为幅值的限定条件继续找,这样就将剩下的音调基频也确定出来了。对于上述的第二点,可以将确定出的基频的误差设为+-1Hz,例如程序确定的基频为 200Hz,实际的基频应该在( 200-1 )到( 200+1)之间,那么 k次谐波对应的频率范围是 k*(200-1) 到 k*(200+1) ,在这个区间中继续找幅值的极大值点就是 k次谐波对应点。根据以上

33、思路,下面开始编写用于分析一个音调频率的函数analysis 。在取谐波幅值时,幅值小于基波幅值 5%的谐波认为其幅值为 0,最终谐波的幅值用归一化后的数据表示。4. 基于傅里叶级数的音乐合成4.1 用2.3 分析出来的结果重新加谐波基频 329.1Hz幅值为 0.05401由图读出 wave2proc的基频为 329.1Hz,幅值为 0.05401 ,高次谐波幅值分别为:谐23456789波幅0.076760.048410.051900.0057090.019230.0067410.007326值再次完成 1.4只需将 1.4 程序中的波形幅度矩阵1717m=1 0.3 0.2改为m=0.0

34、5401 0.07676 0.04841 0.0519 0.005709 0.01923 0.006791 0.007326;即可重新加谐波根据 2.4 分析的结果可以提取出吉他的音调信息18184.2通过音调信息弹奏送别根据 2.4 分析的结果可以提取出吉他的音调信息,在“自动分析结果”Excel文件中用黄色标出了出来, 一下所用的音调信息用最接近的频率来近似。 而所给信息中缺少 523.25 和587.33 的数据,因此用它们的一半来近似频率293.66349.23392523.25587.33近似频率291.97350.65391.942*261.632*295.4511111120.5

35、20305440.2757865390.1086165950.3071496930.205838324300.1758122440.06907235600.15708081340000.057298602050.052802710.05603520200.0753863870.08891702260.095940260000700000.065977510将 1.4 中的程序改为clear;clcfs=10000;f=784 659 784 1047 880 1047 784 784 523 587 659 587 523 587 784 659 784 1047 988 880 1047 7

36、84 784 587 659 698 494 523 880 1047 1047 988 880 988 1047 880 988 1047 880 880 784 659 523 587 ;time=fs*1 0.5 0.5 2 1 1 2 1 0.5 0.5 1 0.5 0.5 4 1 0.5 0.5 1 0.5 1 1 21 0.5 0.5 1 0.5 4 1 1 2 1 0.5 0.5 2 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 4 ;N=length(time);y=zeros(1,N);n=1;for num=1:N%利用循环产生抽样数据,num表示乐音编号

37、t=1/fs:1/fs:(time(num)/fs;%产生第 num个乐音的抽样点P=zeros(1,time(num);%P为存储包络数据的向量L=(time(num)*0 1/5 333/1000 333/500 1;%包络线端点对应的横坐标T=0 1 0.5 0.5 0;%包络线端点对应的纵坐标s=1;b=1:1:time(num);%产生包络线抽样点for k=1:4P(s:L(k+1)-1)=(T(k+1)-T(k)/(L(k+1)-L(k)*(b(s:L(k+1)-1)-L(k+1)*ones( 1,L(k+1)-s)+T(k+1)*ones(1,L(k+1)-s);%包络线直线方

38、程通式s=L(k+1);end1919m=1 0.307149693 0 0.057298602 0.075386387 0 0;.10.3071496930 0.0572986020.075386387 00;.10.2058383240.157080813 00.088917022 00.06597751;.10.1086165950.069072356 00 00;.10.2757865390.175812244 00.056035202 00;.10.2757865390.175812244 00.056035202 00;.10.52030544 0 0 0.05280271 0.0

39、9594026 0;.10.1086165950.069072356 00 00;%波形幅值矩阵ss=zeros(1,length(t);for i=1:8ss=ss+m(i)*sin(2*i*pi*f(num)*t);%加谐波endy(n:n+time(num)-1)=sin(2*pi*f(num)*t).*P(1:time(num);%给第 num个乐音加上包络n=n+time(num);endsound(y,fs);plot(y);运行后可以听出声音更加真实了。5. 制作 GUI界面GUI 是Graphical User Interface图形用户界面首先新建一个 GUI 文件: File/New/GUI如下图所示 :选择 Blank GUI(Default) 进入 GUI 开发环境以后添加七个编辑文本框,1 个波形显示。我们利用 editor 进行编辑,对文本

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论