zoukankan      html  css  js  c++  java
  • 程序集之·二(修改一)

    #include <stdio.h>
    #include <stdlib.h>
    #include "wavIo.h"
    #include "PreAccent.h"
    #include "HammingWindow.h"
    #include "Enframe.h"
    #define factor 0.97
    void main()
    {    
        int len=0;;
        char* rawfile = "MF.wav";
        len=Getlength(rawfile);
        double *sample;
        sample=new double[len];
        Read(rawfile,sample);
        
        
        
        /*Pre-cent*/
        PreAccent(sample,len,factor );//欲加重,factor 为预加重因子
        
        /*Enframe*/
        Enframe(rawfile,sample);
        
    /*Hamming windows*/
        //Hamming( frames[][512],framenum, winsize);
    
    /*FFT of each frame*/
        
    } 
    #ifndef ML_WAVFILE
    #define ML_WAVFILE
    
    //#include <afx.h>
    //#include "RealVec.h"
    #include <stdio.h>
    
    
         bool Read(char *filename,double *s);
         int Getlength(char *filename);
    
    
    #endif
    #include "WavIo.h"
    #include "stdio.h"
    
    
    #ifndef MAXWORD
        #define MAXWORD            0xFFFF
    #endif
    
    typedef unsigned int uint;
    typedef unsigned long  dword;
    typedef unsigned short word;
    
    bool Read(char *filename,double *s)
    {
        FILE *f = fopen(filename, "rb");
            if((f=fopen(filename,"rb"))==NULL)
                printf("open file failed!
    ");
        int size, format, samp_freq, num_samp_bits, NumSamples;
        dword dw;
        word w;
    
        fread(&dw, sizeof(dword), 1, f);
        if (dw != 0x46464952) /* RIFF*/
          return false;
        //else 
            //printf("the RIFF is %c;
    ",dw);
    
        fread(&dw, sizeof(dword), 1, f);
        fread( &dw, sizeof(dword), 1, f);
        if (dw != 0x45564157) /* WAVE */
            return false;
        //else 
            //printf("the WAVE is %c;
    ",dw);
    
        fread(&dw, sizeof(dword), 1, f);
        if (dw != 0x20746d66) /* fmt */
            return false;
        fread( &dw, sizeof(dword), 1, f);
    
        /* format */
        fread(&w, sizeof(word), 1, f);
        if (w != 7 && w != 1) 
            return false;
        format=w;
    
        /* read the number of channels */
        fread( &w, sizeof(word), 1, f);
        if (w != 1) 
            return false;
        else
            printf("the channel is:%d
    ",w);
    
        fread( &dw, sizeof(dword), 1, f);
        samp_freq=dw;
        printf("the samp_freq is:%d
    ",dw);
    
        /* Skip a few bytes */
        fread( &dw, sizeof(dword), 1, f);
        fread( &w, sizeof(word), 1, f);
    
        fread( &w, sizeof(word), 1, f);
        if (w!=16)
            return false;
        num_samp_bits=w;
        printf("the samp_bits is:%d
    ",w);
    
        if ((num_samp_bits == 8 && (format != 7 && format != 6)) ||
            (num_samp_bits == 16 && format != 1))
            return false;
    
        fread( &dw, sizeof(dword), 1, f);
        if (dw != 0x61746164) /* data */
            return false;
    
        fread( &dw, sizeof(dword), 1, f);
        size=dw;
        if (size == -1)
            NumSamples = -1;
        else 
        {
              if (format == 6 || format == 7) 
                  NumSamples = size;
              else if (format == 1) 
                  NumSamples = size / 2;
              printf("the NumSamples is:%d
    ",NumSamples);
              
        }
        signed short *buf;
        int numread;
        int i=0;
    
        //s.Resize(NumSamples);
        buf = new signed short [NumSamples];
        numread = fread( buf, sizeof(signed short), NumSamples, f );
        if (numread)
        {
            for (int i=0 ; i<NumSamples ; ++i)
            {
                s[i] = ( (double) buf[i] ) / MAXWORD;
            }
        }
        delete buf;
    
        
        fclose(f);
    
        return true;
    }
     int Getlength(char *filename)
     {
         FILE *f = fopen(filename, "rb");
            if((f=fopen(filename,"rb"))==NULL)
                printf("open file failed!
    ");
        int size, format, samp_freq, num_samp_bits, NumSamples;
        dword dw;
        word w;
    
        fread(&dw, sizeof(dword), 1, f);
        if (dw != 0x46464952) /* RIFF*/
          return false;
        
    
        fread(&dw, sizeof(dword), 1, f);
        fread( &dw, sizeof(dword), 1, f);
        if (dw != 0x45564157) /* WAVE */
            return false;
        
    
        fread(&dw, sizeof(dword), 1, f);
        if (dw != 0x20746d66) /* fmt */
            return false;
        fread( &dw, sizeof(dword), 1, f);
    
        /* format */
        fread(&w, sizeof(word), 1, f);
        if (w != 7 && w != 1) 
            return false;
        format=w;
    
        /* read the number of channels */
        fread( &w, sizeof(word), 1, f);
        if (w != 1) 
            return false;
    
        fread( &dw, sizeof(dword), 1, f);
        samp_freq=dw;
    
        /* Skip a few bytes */
        fread( &dw, sizeof(dword), 1, f);
        fread( &w, sizeof(word), 1, f);
    
        fread( &w, sizeof(word), 1, f);
        if (w!=16)
            return false;
        num_samp_bits=w;
    
        if ((num_samp_bits == 8 && (format != 7 && format != 6)) ||
            (num_samp_bits == 16 && format != 1))
            return false;
    
        fread( &dw, sizeof(dword), 1, f);
        if (dw != 0x61746164) /* data */
            return false;
    
        fread( &dw, sizeof(dword), 1, f);
        size=dw;
        if (size == -1)
            NumSamples = -1;
        else 
        {
              if (format == 6 || format == 7) 
                  NumSamples = size;
              else if (format == 1) 
                  NumSamples = size / 2;
             fclose(f);
              return NumSamples;
      
        }
     }
    #ifndef ML_Precent
    #define ML_Precent
        
        bool PreAccent(double *sample,int len,double factor);
    
    #endif
    #include <stdio.h>
    #include "PreAccent.h"
    
    bool PreAccent(double *sample,int len,double factor)
    {
     //欲加重公式s2(n) = s(n) - a*s(n-1)
     for(int i=1;i<len;i++)
     {
      sample[i]=sample[i]-factor*sample[i-1];
     }
     
     return true;
    }
    #ifndef ML_Enframe
    #define ML_Enframe
        int Enframe(char *filename,double *sample);
    #endif
    #include <stdio.h>
    #include "wavIo.h"
    
    
    int Enframe(char* filename ,double *sample)
    {
        int NumSamples=Getlength(filename);
        int i=0,j=0;
        double frames[600][512];
        
        int winsize=512;
        int hopsize=128;
        int framenum=(int)((NumSamples-winsize)/hopsize)+1;
        //frames = new double [framenum][512];
        for(int i=0; i<framenum; i++)
        {
            for(int j=0; j<winsize; j++)
            {
                frames[i][j] = sample[i*hopsize+j];
            }
        }
        for(int i=0;i<100;i++) printf("the frames[][] is %f
    ",frames[i][j]);
        //delete[] frames;
        return framenum;
    }
  • 相关阅读:
    VS 2008潜在强大的功能:提取EXE文件中的ICO等资源
    园友们注意:淘宝网上QQ会员 4钻 3元 等都为骗子行为
    Comet Async Process Request Handler
    WCF(Sender) to MSMQ to WCF(Receiver)
    ASP.NET Web Form GridView DetailsView Query Edit
    WCF NetTcp AsyncQueue Service
    Xml CDATA 序列化
    Sync Invoke Remoting Async Invoke
    .Net 4.0 Remoting ConcurrentQueue
    Socket Async Receive Data to LinkedList Buffer (telnet proxy server)
  • 原文地址:https://www.cnblogs.com/taozijy/p/3685076.html
Copyright © 2011-2022 走看看