1. WAVE音频文件

WAVE文件作为最早的数字音频文件格式之一,是应用于windows平台的波形音频文件。它是一种无损的音频文件,具有较好音质,缺点是占用大量存储空间。之后WAVE文件从无压缩编码形式PCM(脉冲编码调制)发展到压缩形式的编码解决其弊端,其中压缩格式有微软的自适应差分脉冲编码调制,国际电报联盟制定的语音压缩标准ITU G.711 a-alaw、GSM 6.10、ITU G7.721 ADPCM等。该文件遵循RIFF(Resource InterChange File Format)文件格式存放信息,它把WAVE文件划分为文件头和数据两个部分,并以小端方式存储数据,其中文件头包含音频信号的信息,存储及编码格式信息,如采样频率、数据存放大小、声道数目等信息。文件的扩展名标识文件数据类型。RIFF文件是以块作为基本单位,以树类型作为存储结构去存储文件数据。每个块包含文件表示符ID,当前块区间的大小和块数据内容,其中块大小为去除标识符字节占用空间和存储块长度占用空间后大小。RIFF格式结构的树根结点部是以“RIFF”为标识,叶子结点部分有“data”(数据块)标识,“fmt”(格式块)标识,若WAVE文件被压缩,还包括“fact”标识,该标识块记录了非PCM编码即压缩格式编码下文件的相关信息[2]。具体WAVE文件格式说明如表所示。

常见的音频压缩方法有帧间压缩和帧内压缩,在此基础上编码有对称编码和非对称编码两种方式。由于帧间压缩考虑了两帧数据间的重复量,所以可以达到帧内压缩达不到的压缩比,常用算法有幅差值算法等。对称编码数据处理速度快相比非对称编码更适用于实时音频信号传输处理的场合。

如还是不懂请看:点击打开链接

2. 音频处理

1.重采样原理及其分析

上采样:上采样就是通过插值的方法实现,下采样是通过抽取离散的音频信号实现。如下进行P倍的上采样分析,其中y为上采样                后的结果,x为未处理前的离散信号。在x的每个离散信号间插入P-1个零点。

故重采样信号的基音周期会变为原来信号P倍,重采样频谱缩小1/P。即基音频率与语速均变成原来的1/P。

下采样:先取原始信号中的一个点,从该点开始省略Q-1个点,后取出下一个点的信号,依次循环组成新的离散信号序列。公式推导如下。

由上推导得,下采样使得基频和语速均变为原来的Q倍。

时域信号再抽取等同原始采样频率按一定倍率下降,使得信号不满足香农定理,会产生混叠现象。但上采样在频谱图上的反应是镜像的分布特征,故在P倍上采样后进行低通滤波处理以消除镜像,在Q倍下采样前进行低通滤波处理将会消除混叠情况的产生,保证信号能不失真的恢复放到原信号。

重采样不仅能改变音调。在采样频率过低场合,因要求模拟低通滤波器的频带为0来抗混叠,使模拟滤波器设计困难。若使用高采样频率,则大量采样置又会对数据的处理,存储带来问题,使用重采样中的下采样可以解决此类问题。它使数据处理量减少,且数字低通滤波易于实现。在信号丢失严重场合里,滤除频率镜像的前提下采用重采样的上采样插值能有效恢复部分原信号。

如不懂请看: 点击打开链接

2.SOLA算法

因音频重采样导致音频音调升高使播放时间缩短,音调降低会使播放时间加长,所以需要做音频时长规整保证在不改变音调的前提条件下对音频长度进行改变。

SOLA算法是在OLA算法的基础上发展而来,其算法简单效果更优。这种算法能解决简单重叠叠加中的信号断裂,基频失真问题,保证做到精确的时长规整。首先对信号进行分帧,假设一帧信号的长度为S,以重采样的信号为原始信号,原始信号每帧的帧间距为A, 时长规整后每帧信号的长度仍为S,新的帧间距变为B,重叠叠加区大小O=S-B,假设共有N帧,则原始信号长度L1= A×(N-1) +S,规整后的信号L2= B×(N-1)+S。规整的信号长度本质是重采样前信号的长度。所以二者L2×P∕Q=L1,故A∕B亦可近似为P∕Q。令U=P∕Q做时长规整因子,当U>1时语音压缩,U<1时语音拉伸[11]。先将原始信号的第一帧数据放入欲规整序列中,根据原始信号帧间距取出下一帧(2×A位置)信号,在该帧开始位置在0到Pmax的范围内寻找与输出序列末尾重叠叠加法部分最匹配的位置p,找到最相似的这帧数据的位置后,将它重叠部分与输出序列重叠部分进行加权叠加,最后把原序列之后的信号以输出序列帧间距大小追加到输出序列的末尾。下一轮语音处理,匹配开始的位置从原始信号3×A的位置开始查找,并重复上述操作[12]。某次规整具体操做图解如下所示。

当相关性系数有多个相同最大值时,则p为0到Pmax内计算获得的第一个最大相关性系数对应的位置。令Rxy表示匹配程度,对信号规整前后第n段的匹配程度计算用下方公式计算。

流程图:

具体分析请看点击打开链接

点击打开链接

点击打开链接

3.倒谱基音频率分析

语音基音作为浊音的代称,现实生活中因浊音的不同而能够区分不同人语音,因此声音的基频参数可以作为判别语音者的标志。基音频率具体指气体由声带发出,声带打开到闭合的频率。基音的产生可形象的看作是一系列冲击序列的组合,冲击信号的周期便是基音周期。因为语音可看作是基音与声道系统响应,所以本文使用倒谱法分析基音。先对语音信号进行Z变换并求对数频谱,之后去掉相位信息后,对对数幅值部分逆Z变换后便是倒谱,由于已经丢失相位信息,故信号无法被还原。其原理是将卷积的信号通过取对数的方法变成两个相加的信号,而后的逆Z变换到时域两信号人仍保持了相加的关系,由于时域保持了冲击信号的周期性,故在倒谱序列在定义查找的基音周期范围内的第一个峰值到原点的距离便是基音周期。详细计算和分析请看:

点击打开链接

4.FFT原理分析讲解

快速傅里叶变换(FFT)是基于离散傅里叶变换(DFT)的基础,具体可分基于时间抽取和基于频率抽取,两种方法FFT,主要运用旋转因子周期性,对称性,实现公式的简化,从而在程序算法上达到对时间复杂度,空间复杂度降低的目的。以下重点分析基于时间抽取的FFT。

一个分析比较好的文章:点击打开链接

C代码实现http://www.elecfans.com/engineer/blog/20161008440131.html

FFT图形推导详细分析:https://wenku.baidu.com/view/5cacb2b8bd64783e09122b9a.html

3. MATLAB程序实现

SOLA变声:

function main
[Y,Fs] = audioread('f:\Work\test.wav');
b=0.6;                %新旧序列帧间距之比
OriginalSign=Y(:,1)';
u=b*1000;
ResampleSign=resample(OriginalSign,u,1000); %重采样信号
S=400;                       %一帧的长度
Overlap=200;                 %重叠叠加区间长度
Pmax=170;                    %允许寻找相关性最大移动位数
B=S-Overlap;                 %输出序列间距
OriginalLen= length(OriginalSign);  %原始信号的序列长度
NewSign= zeros(1, OriginalLen);      %为新序列开辟原始信号的长度
ratio = (1:Overlap)/(Overlap+1); %加权叠加系数
i = 1:Overlap;
app=1:B;                        %信号追加移动变量
%以重采样信号为模板新建序列用以计算
CalSeries = [ResampleSign, zeros(1,400)];
%取原始信号第一帧给(将要规整的)新信号
NewSign(1:S) = ResampleSign(1:S);
for newpos = B:B:(OriginalLen-S)    Originalpos = round(b * newpos);              y = NewSign(newpos + i);           rxy = zeros(1, Pmax+1);         rxx = zeros(1, Pmax+1);         Pmin=0;  %相关性计算for p =Pmin:Pmax        x = CalSeries(Originalpos + p + i);rxx(p+1) = norm(x);             rxy(p+1) = (y*x');          endRxy = (rxx ~= 0).*rxy./(rxx+(rxx==0));    pm = min(find(Rxy == max(Rxy))-1);       bestpos = Originalpos+pm;              %当前最佳匹配位置  %加权叠加NewSign(newpos+i)
=((1-ratio).*NewSign(newpos+i))+(ratio.*CalSeries(bestpos+i)); %去除重叠部分信号追加在新信号输出序列NewSign(newpos+Overlap+app) = CalSeries(bestpos+Overlap+app);
endsound(NewSign,Fs);audiowrite(‘F:/regulate.wav’, NewSign,Fs);
end

频谱获取

function [Yf, f] = Spectrum_Calc(yt, Fs)
L = length(yt);NFFT = 2^nextpow2(L);
Yf = fft(yt,NFFT)/L;Yf = 2*abs(Yf(1:NFFT/2+1));
f = Fs/2*linspace(0,1,NFFT/2+1);
end

MATLAB在使用汉明窗卷积时,两个信号维度必须相同,且要卷积的信号不能全为0

MATLAB单个&是同时判断两个条件并适用于矩阵,而&&进判断第一个

MATLAB求倒谱函数rceps(framedata);

resample()重采样函数

audioread()音频读取

详细请看matlab的doc

WAVE音频文件数字信号处理——实现变声功能相关推荐

  1. android变声后的文件,仿QQ语音变声功能实现(二)---移植到android studio 并解决部分问题...

    版权声明:转载必须注明本文转自张鹏辉的博客: http://blog.csdn.net/qingtiangg 大家好,距离上一篇博客半年过去了,关于上一篇博客很多人加我QQ留言问了几个问题,最近不忙决 ...

  2. AU变声功能音频调节

    变声功能与音频调节 今天再分享一些关于AU调整音频的方法,变声功能与音频调节. 一.变声功能方法1 说实话我感觉这个功能用于恶搞比较多,男声变女声,女声变娃娃音之类的,现在qq也有类似的语音变声功能, ...

  3. 仿QQ语音变声功能实现

    版权声明:转载必须注明本文转自张鹏辉的博客: http://blog.csdn.net/qingtiangg 大家好,这是我从业以来第一篇博客,给大家拜个晚年,祝大家鸡年大吉,幸福美满.事业有成.好了 ...

  4. 技术系列课|网易云信音视频通话2.0产品中的美声/变声功能

    随着技术的发展,越来越多的直播和社交类产品开始引入RTC功能.新的业务和生态对原本服务于实时通话.视频会议等场景的RTC PaaS产品提出新的需求,原本关注于通话基础功能的设计只能提供基本的交互,并没 ...

  5. 现实版“柯南变声领结”!搜狗输入法“变声”功能发布,千人千声一键转换...

    允中 发自 凹非寺  量子位 报道 | 公众号 QbitAI 不再是动画,也不再是科幻想象,AI再次带来梦想成真一刻. 在动画片<名侦探柯南>中,阿笠博士送给柯南的变声领结是柯南破案的重要 ...

  6. 每日辣评:快手和抖音、爱奇艺巨亏、搜狗输入法变声功能、贝佐斯

    文/王易见 知名科技KOL,四川创业者联盟发起人 QQ:543415188,微信:543415188,广告.约稿.公关.营销.欢迎合作 [快手和抖音谁更能带货?]利用短视频带货已经不是什么新鲜事儿,快 ...

  7. 通过开源项目SoundTouch实现类似Tom猫的变声功能

    SoundTouch是一个开源的音频处理库,用于改变音频流或音频文件的节奏.音调和播放速率. 通过调节Tempo.Pitch和Playback Rate可以实现类似Tom猫的变声效果,对于这三个参数官 ...

  8. 仿QQ变声功能的实现

    Android ndk开发之QQ变声 要做出QQ变声的效果,用Android系统自带的MediaPlayer是无法实现的,只能另想他法了.听说汤姆猫是用SoundTouch实现的,而QQ是用FMOD实 ...

  9. Android 开发之 QQ变声功能实现

    1.简介 在QQ中我们使用到的一个功能就是变声,QQ是使用FMOD实现的,那么同样的我们也使用FMOD让自己的应用可以变音 2.FMOD简介 fmod Ex 声音系统是为游戏开发者准备的革命性音频引擎 ...

最新文章

  1. 想去苹果做AI?看看你够不够格
  2. gvim 编辑器初学
  3. Laravel框架中的路由和控制器
  4. 2019自考00018计算机应用基础,全国2019年4月自考00018《计算机应用基础》试题及答案...
  5. 三角函数公式【转载】
  6. 2.8 Adam 优化算法
  7. nodejs中的模块的理解
  8. zookeeper3.4.6 使用研究
  9. html php插入百度地图定位
  10. SQL教程数据库视频数据分析教程Sql Server|MySQL|Oracle视频教程
  11. T - SQL(常用语句)
  12. 《我的二本学生》的读后感5000字范文
  13. sd卡启动分区的制作--使用fdisk 工具
  14. 分布式事务CAP理论
  15. AJAX参数传递时有特殊符号时解决办法
  16. c语言中next如何用,C++ STL prev()和next()函数用法详解
  17. php 合成图片、合成圆形图片
  18. 加州欧文大学计算机申请,美国加州大学欧文分校信息与计算机科学专业申请条件.pdf...
  19. 计算机起源于发展论文,关于计算机起源及发展的论文
  20. linux 对应 网口_linux 查看网口类型

热门文章

  1. 世园会开幕式上的机器人_5G、机器人、大数据,在2019世园会里看见未来
  2. springboot拦截器,拦截完后,传送继续传递
  3. popstate_H5,API的pushState(),replaceState()和popstate()用法
  4. Shopee虾皮SRE工程师HR面面经
  5. bootstrap实现下拉框dropdown选中select option 美爆了
  6. PyCharm安装教程(简单又实用)
  7. 基于yolov5的Android版本目标检测app开发(部署安卓手机)
  8. git提交出现Your branch and ‘origin/master‘ have diverged解决方法
  9. 【时间序列预测算法】——ARIMA 算法介绍及代码实现
  10. 同一wifi下电脑与手机无法ping通