wave文件:8000hz,16位, 单通道,pcm格式。
改为:16000hz,16位, 单通道,pcm格式的wave文件?我直接把频率改为16000以后就wav文件就不能正常发声了,我估计应该也要该相应的数据,不知道该怎么做?我定义的一个结构如下:
typedef struct tag_wavhdr {
  int RIFF;                        
  int size;              
  int WAVE;            
  int fmt;
  int   wFormatLength;    
  short    wFormatTag;    
  short    nChannels;             
  int   nSamplesPerSec;      
  int   nAvgBytesPerSec;            
  short    nBlockAlign;          
  short    wBitsPerSample;       
  int data;                          
  int   datasize;                     
} wavhdr;直接改nSamplesPerSec不行,该怎么做呢?谢谢!

解决方案 »

  1.   

    把数据部分复制2份以前是这种
    {
    unsigned short 采样1
    unsigned short 采样2
    unsigned short 采样3
    unsigned short 采样4
    }你要改为{
    unsigned short 采样1
    unsigned short 采样1
    unsigned short 采样2
    unsigned short 采样2
    unsigned short 采样3
    unsigned short 采样3
    unsigned short 采样4
    unsigned short 采样4
    }
      

  2.   

    UpSample 线性插值理论上直接修改采样频率也行,只不过播放速度会变化
    你改了采样频率的同时,修改了nAvgBytesPerSec;了么
      

  3.   

    nAvgBytesPerSec应该改了,因为这个值是这么设的:nSamplesPerSec * nBlockAlign,所以改了nSamplesPerSec的话nAvgBytesPerSec也会改的。我现在按照 Oversense(步步文)  的方法做试了一下,现在已经能发声音了,但是发生效果没有原来那么好,这是算正常吗,还是可以有方法改进?我用别的转换工具转的时候发生效果没变,我我看了一下转换工具转出来的文件中的数据跟我的不太一样。
      

  4.   

    这个要做ssrc处理的,也就是重采样处理,具体的代码网上应该不少.
    复制的肯定不行,波形完全破坏了.
      

  5.   

    好像线性编码里没有这个采样率吧  只有8Khz  8.0 kHz, 11.025 kHz, 22.05 kHz, and 44.1 kHz