基于QT的数字音频变调程序设计

来源 :科学与财富 | 被引量 : 0次 | 上传用户:HBFQYD2009
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:介绍了使用QT对WAV音频进行变调处理的相关概念和方法。根据WAV格式音频的格式类型和存储原理,介绍对WAV格式音频进行读取和写入方法,并在此基础上介绍了对WAV音频进行变调处理的处理的方法和C++代码。
  关键词:数字图像;边缘检测;QT;C++
  数字音频的变调处理是通过修改音频信号的频率来实现的,是其他语音处理如语音合成的重要准备工作。声音由物体的震动产生,音调取决于发生物体的振动频率,根据这个频率的不同,有不同的方法对乐音进行分级,世界上一般采用12平均律將纯八度均分12等分。用QT进行数字音频的变调处理程序设计可以测试各种变调算法的速率和变调效果。
  1 数字音频的变调原理
  对数字音频进行变调处理的基本原理是进行增减采样,升调进行减采样,降调进行增采样,同时在此基础上用帧间重叠原理可以保持相位连续性。但我们一般采用SOLA-FS的变调方法,也即在进行变采样率变调之后进行时常规整,因为一般单纯的变调结果会导致音频时长的改变。其中SOLA-FS的方法示意图如图1
  整个时长规整部分是分段进行的,每个检测窗口中待检测的一段通过计算窗口中与该段后面所有段中相似度最高的一段,进行匹配,从而达到规整时长的目的。
  2 程序设计步骤
  程序是基于QT设计的,使用C++编程语言,所以设计过程包括界面设计和程序设计思路。
  2.1 程序界面设计
  程序需要用户输入数据,故设计用户数据接口即可。程序界面如图2。
  2.2 程序流程设计
  程序设计的实现过程为:
  (1) 读取WAV音频文件的文件头和数据。
  (2) 进行变调处理。
  (3) 利用SOLA-FS进行时长规整。
  以上三部分的主要代码为:
  int xs=ui->lineEdit->text().toInt();
  double a=pow(2,(double)xs/12);
  int w;
  if(a>1)
  w=256;
  else
  w=500;
  int ss=2*w*(a)/(1+(a))+0.5;
  int sa=2*w/(1+a)+0.5;
  qDebug()<  //int sa=2*512
  char* ch;
  QByteArray ba=wavname.toLatin1();
  ch=ba.data();
  //wavFile.openfile(ch);
  //wavHeader=&wavFile.pWav;
  FILE* src;
  src=fopen(wavname.toStdString().c_str(),"rb");
  fread(&stru,44,1,src);//读文件头
  short int intdata[stru.datasize/2];//存数据的数组--16位
  unsigned int intdata_8[stru.datasize];//存数据的数组--对应8
  if(stru.wBitsPerSample==16)//如果是16位
  {
  fread(intdata,stru.datasize,1,src);//读取相应位数的数据
  s.sola(intdata,stru.datasize/2,sa,ss,w,512-ss,500);
  (4)将处理后的WAV文件数据写到新文件中。
  这一部分的主要代码为:
  wavnameafter=QFileDialog::getSaveFileName(this,tr("保存文件"),"",tr("*.wav"));
  ui->textBrowser_2->setText(wavnameafter);
  char* choutdir;
  QByteArray bb=wavnameafter.toLatin1();
  choutdir=bb.data();
  FILE* fp;
  fp=fopen(wavnameafter.toStdString().c_str(),"wb");
  fwrite(&stru,44,1,fp);
  fwrite(s.yout,stru.datasize,1,fp);
  fclose(fp);
  3 程序测试实验
  本程序经过8比特和16比特的单声道WAV音频测试,能够实现12级变调且均能输出变调后的音频文件。
  4 其他注意问题
  为了设计程序的人性化,我们必须设置简单的程序外部接口,给用户提供简单明了的变调调节方法。为此需要在程序内部根据外部程序借口输入的数据进行计算。实现代码为:
  nt xs=ui->lineEdit->text().toInt();
  double a=pow(2,(double)xs/12);
  if(a>0);
  int w=256;
  else
  w=512;
  int ss=2*w*(a)/(1+(a))+0.5;
  int sa=2*w/(1+a)+0.5;
  //int sa=2*512
  char* ch;
  QByteArray ba=wavname.toLatin1();
  ch=ba.data();
  wavFile.openfile(ch);
  wavHeader=&wavFile.pWav;
  s.sola(wavFile.databuf2,wavFile.pWav.datasize/2,sa,ss,512,512-438,500);
其他文献
随着我国经济发展进入新常态,企业升级转型成为了各大企业发展的关键转折,是劳动密集向知识密集的进步,是计划经济向市场经济的过渡,更是企业在日益激烈的市场竞争中屹立不倒
摘 要:研究企业信用风险管理的问题与对策具有一定的理论意义和实际意义。本文在概括了我国企业信用风险管理的相关理论基础上,分析了我国企业信用风险管理的问题,最后提出了解决企业信用风险管理问题的对策。  关键词:企业信用;信用风险;信用风险管理  一 、企业信用风险管理的概述  企业信用也称商业信用,是指企业间的信用形式,是赊销商品和预付货款等形式表现的信用。企业信用是一个企业在市场经济中价值取向、所
摘 要:在柴西地区的钻井施工过程中,井漏成了最常见的井下复杂,通过采用适当的预防措施和正确的处理方法,减少井漏的发生,缩短处理井漏的时间,达到钻井提速提效的目的。  关键词:井漏 预防和处理  前 言  钻井作业是高风险的施工过程,柴达木盆地跨越的地质时代较多、变化较大,地质条件十分复杂,突出表现为山前构造带高地应力、地层倾角高达30°-85°、断层发育、地层破碎、上部地层多含砾石、同一井段可能包
[目的]研究大花金挖耳果实和细胞培养物总黄酮含量的定性和定量测定。[方法]采用试管法和紫外分光光度法对大花金挖耳果实和细胞培养物中的黄酮进行定性鉴定;用紫外分光光度法
“先行支付”概念在2010年推出的《社会保险法》中作出了明确的规定,虽然“先行支付”貌似是对工伤申报方来说是个好政策,但是实际上的执行效果并不是很好,特别是近几年来关