• lame边录音边转换


      文章出处:http://big-joe.blog.sohu.com/88902836.html

    void CViewTFreqList::RecFileInit(LPCTSTR sFileName, 
             LPCTSTR sStationName, 
             LPCTSTR sFreq, 
             LPCTSTR sLanguage, 
             LPCTSTR sTaskName, 
             LPCTSTR sComment)
    {
     CString sTemp;
     m_lgf = lame_init();
     lame_set_in_samplerate(m_lgf,16000);//16000Hz
     lame_set_num_channels(m_lgf,2);  //双声道,这个OK
     lame_set_brate(m_lgf,16);   //16kBps
     lame_set_quality(m_lgf,5);   //中等的

     lame_init_params(m_lgf);
     fout=fopen(sFileName,"wb+");

     id3tag_init(m_lgf);
     id3tag_add_v2(m_lgf);
     id3tag_space_v1(m_lgf);
     id3tag_pad_v2(m_lgf);
     id3tag_set_artist(m_lgf,sStationName);
     sTemp.Format("%s(%s)",sFreq,sLanguage);
     id3tag_set_album(m_lgf,sTemp);
     sTemp.Format("任务:%s",sTaskName);
     id3tag_set_title(m_lgf,sTemp);
     id3tag_set_track(m_lgf,"0");
     id3tag_set_year(m_lgf,"");
     id3tag_set_comment(m_lgf,sComment);
     id3tag_set_genre(m_lgf,"");
     //lame_mp3_tags_fid(m_lgf,fout);
    }

    void CViewTFreqList::RecFileClose()
    {
     BYTE Buf[7200];
     UINT mp3bytes = lame_encode_flush(m_lgf,Buf,7200);
     if (mp3bytes>0)
     {
      fwrite(Buf,1,mp3bytes,fout);
     }
     lame_close(m_lgf);
     fflush(fout);
     fclose(fout);
     fout=NULL;
    }

    void CViewTFreqList::OnPCMBufFull(WPARAM wParam,LPARAM lParam)
    {
     if (fout!=NULL)
     {
      short int *RecBuf;
      short int *RecBufL;
      short int *RecBufR;
      RecBuf=(short int *)HeapAlloc(GetProcessHeap(),0,lParam);
      RecBufL=(short int *)HeapAlloc(GetProcessHeap(),0,lParam/2);
      RecBufR=(short int *)HeapAlloc(GetProcessHeap(),0,lParam/2);
      
      memcpy(RecBuf,(void*)wParam,lParam);

      LONG x,y;
      LONG num_samples=lParam/4;  //4个short 长度是 LONG

      for (x=0, y=0; x<(num_samples*2); x+=2, y++)
      {
       RecBufL[y] = RecBuf[x];
       RecBufR[y] = RecBuf[x+1];
      }
      LONG nMp3Length=(unsigned long)(1.25*(double)num_samples) + 7200;
    //  LONG mp3bytes =lame_encode_buffer(m_lgf,RecBufL,RecBufR,num_samples,(unsigned char *)RecBuf,nMp3Length);

     Long mp3bytes = lame_encode_buffer_interleaved(  );
      if (mp3bytes>0)
      {
       fwrite(RecBuf,1,mp3bytes,fout);
      }
      HeapFree(GetProcessHeap(),0,RecBuf);
      HeapFree(GetProcessHeap(),0,RecBufL);
      HeapFree(GetProcessHeap(),0,RecBufR);
     }
    }

    void CViewTFreqList::RecFileClose()
    {
     BYTE Buf[7200];
     UINT mp3bytes = lame_encode_flush(m_lgf,Buf,7200);

    // UINT mp3bytes = lame_get_size_mp3buffer( * );
     if (mp3bytes>0)
     {
      fwrite(Buf,1,mp3bytes,fout);
     }
     lame_close(m_lgf);
     fflush(fout);
     fclose(fout);
     fout=NULL;
    }

    mmioInstallIOProc( (FOURCC)mmioStringToFOURCC("WAV"),0 ) ,  )

    waveInOpen();

    waveInPrepareHeader();

    waveInAddBuf()

    waveInStar();

    waveInClose()

    waveInStop()

    mmioOpen()

    mmioSetBuffer()

    mmioSeek()  mmioFOURCC( 'W','A','V','E' )

    mmioCreateChunk()

    mmioWrite();

    mmAscend();

    mmioFlush()

    mmioClose()

    参考:http://chinaxxren.iteye.com/blog/1750296

      http://tianjing.cnblogs.com/

    http://ikinglai.blog.51cto.com/6220785/1228309/

  • 相关阅读:
    poj1661【DP,左右两端dp】
    hdoj1074【A的无比爆炸】
    hdoj1024【DP.最 大 m 字 段 和】(写完我都怕。。。不忍直视。。)
    qq教xixi写模拟加法【非常爆炸】
    错排公式
    POJ3616【基础DP】
    hdoj1257【疑问】(贪心)
    【弱的C艹之路。。未完待续】
    hdoj1728【搜索的两种写法】
    hdoj1001【智障了。。。】
  • 原文地址:https://www.cnblogs.com/lvpblog/p/3794721.html
Copyright © 2020-2023  润新知