下图是原声、延迟的声音以及叠加后声音信号的时域图。
(4)应用实践
利用数字信号处理得到的回声可以在需要的情况下模拟回声效果,以适应需求。
(5)核心代码分析
[x,fs,nbits]=wavread('1112',1156384); %读取文件
x1=[zeros(4000,2);x]; %前“添”零,声音延时
x2=[x;zeros(4000,2)]; %后“添”零,使原声音长度与延时后相等 y1=x1*0.8+x2; %回声衰减并与原声叠加
4.3 添加背景音乐
(1)原理简述
原理较为简单,即两个矩阵的相加。 (2)实现步骤
首先将两个需要叠加的矩阵处理使得形式一致(行列数相等),然后叠加即可。
(3)效果实现
可是实现为一段人说话声,唱歌声,朗诵声添加背景音乐,其本质是语音序列的叠加,所以可实现两段语音序列的叠加。
(4)应用实践
为一段人说话声,唱歌声,朗诵声添加背景音乐等,其本质是语音序列的叠加,所以可实现两段语音序列的叠加。 (5)核心代码分析
较为简单,此处省略。
4.4 回旋特效
(1)原理简述
回旋特效是我们根据效果来命名的,是将声音的左右声道分时播放,也就是说,在第一段时间内,左声道有声音,下一段时间内,右声道有声音,依次交替。 (2)实现步骤
对声音信号矩阵按行进行遍历,设定点数长度,依次交替分别使左、右声道的某段信号的值在该取样点段内置零。或者利用矩阵运算的方法实现。实现步骤如下:
(3)效果实现
播放处理后的语音,耳机(非立体声耳机)的左右耳机轮流有声音,即当左边耳机有声音时,右边耳机没有,反之亦然。这样就会产生声源在不断回转,声音有种回旋的效果。
下面是原声以及处理后的左右声道的时域图:
矩阵运算流程如下:
(4)应用实践
在某些音乐作品中可以产生声源回旋变换的特效,增强音乐的丰富性。 (5)核心代码分析
y=zeros(400000,2);%定义一个矩阵
[x,fs,nbits]=wavread('1112',400000); %读声音文件 for i=1:400000
y(i,:)=x(i,:); %新建信号序列,用于运算 end
x1=reshape(y,40000,20); %将信号分成了10段20列 for i=1:2:10
x1(:,i)=0; %1~10列,将单数列置零,即实现左声道的回旋 end
for i=12:2:20
x1(:,i)=0; ~20列,将双数列置零,即实现右声道的回旋 end
x5=reshape(x1,400000,2); %重排序列,变成N行2列的序列
sound(x5*2,fs); %单声道播放后,声音幅度有减小,这里做补偿
4.5 快/慢放特效
(1)原理简述
快慢放的原理就是在单位长的时间内播放比原声包含更多或更少的信息的语音序列。以2倍速率快放为例,就是将原来2倍单位时间内的语音序列在单位时间内播放完,这里的原理用的是在播放时增大采样间隔,那么在单位时间内采集到的点实际包含了从2长度序列采集到的信号(实际上这里就是一个语音序列的有损压缩),虽然这样做有信息丢失,但只要满足奈奎斯特采样定律,语音信号就不会出现失真,所以在一定条件下是可行的。 (2)实现步骤
在播放语音序列时,更改采样频率即可。但是在作图必须对语音信号一步步处理。 (3)效果实现
以快放为例,快放时,如果快放倍数为2,那么原本10s长的信号,可以在5s内播放完,并且语音的音调会变高,关于这一点将在后面解释原因。
下面是2倍快放时的语音的时域图(2倍压缩图):
从下面的图中可以看出快放的信号实质上就是原信号的压缩。
下面是语音信号压缩的矩阵运算过程:
(4)应用实践
快放的这种原理可以用来在保证采样频率的前提下压缩语音信号。 (5)核心代码分析
第一种方式(展示原理,绘制图像时使用)
[x,fs,nbits]=wavread('1112',400000); %读取声音文件 x1=x'; %转置
x2=reshape(x1,4,200000); %重排成2行,400000列 x3=x2'; %转置
x4=x3(:,[1,2]); %取新序列的1、2行 第二种方式(实际程序中使用)
Sound(x,2*fs); %改变采样频率,播放速度加快一倍