文章出处: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/