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/

原文地址:https://www.cnblogs.com/lvpblog/p/3794721.html