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

lame边录音边转换的更多相关文章

  1. iOS 通过(lame)将录制音频转换成Mp3

    版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明出处,保留原帖地址及作者署名. Url:http://blog.csdn.net/ysy441088327/article/detail ...

  2. WebRTC录音(2)-录音文件转换成WAV格式

    以下是源码,大路货,从网上找的. 但是,这个东西在MacOS上是有问题的,原因在最后,都是泪啊. #include <stdio.h> #include <string.h> ...

  3. MP3 Lame 转换 参数 设置(转)

    我们在对音频格式的转换中,打交道最多的就是MP3了.如果你能彻底玩转MP3,那么对你的音频创作和对其他音频格式的掌握会有很大的帮助.下面我们给大家介绍MP3制作软件:LAME 要制作出高音质的MP3靠 ...

  4. 如何将MP3录音转文字

    相信很多人都有电话录音的习惯,因为这样可以记录下很多重要的信息.那么当我们通过录音将一些重要的信息记录下来后,我们应该怎样将这些录音文件转换成文字进行记录呢?下面我们就一起来看一下吧. 操作步骤: 步 ...

  5. Android Weekly Notes Issue #238

    Android Weekly Issue #238 January 1st, 2017 Android Weekly Issue #238 本期内容包括: Firebase发送Notification ...

  6. C 语言资源大全中文版

    C 语言资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-c 是 koz.ross 发起维护的 C 语言资源列表,内容包括了: ...

  7. 基于科大讯飞语音云windows平台开发

    前记: 前段时间公司没事干,突发奇想想做一个语音识别系统,看起来应该非常easy的,但做起来却是各种问题,这个对电气毕业的我,却是挺为难的.谷姐已经离我们而去,感谢度娘,感谢CSDN各位大神,好歹也做 ...

  8. 录音文件lame转换MP3相关配置

    文件下载整个功能完成了,那么对应的文件上传也跑不了.So~ Look here~ 业务需求是录制音频然后上传到七牛并且Android可以读. 与安卓沟通了一下统一了mp3格式,大小质量都不错.由于AV ...

  9. iOS: lame框架将PCM录音转成MP3格式

    lame框架将PCM录音转成MP3格式 1.lame下载地址:https://github.com/rbrito/lame,它是一个不可执行的文件,需要借助build-lame.sh脚本将其编译成.a ...

随机推荐

  1. Qt中sizeof

    class a{ int d; // virtual void ssss(); }; qDebug() <<sizeof(a) << sizeof(int) << ...

  2. 排序系列 之 折半插入排序算法 —— Java实现

    基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中 ...

  3. linux下内存泄露检测工具Valgrind介绍

    目前在linux开发一个分析实时路况的应用程序,在联合测试中发现程序存在内存泄露的情况. 这下着急了,马上就要上线了,还好发现了一款Valgrind工具,完美的解决了内存泄露的问题. 推荐大家可以使用 ...

  4. 几款Z2760平板对比

    现阶段的Windows平板本质上分为Windows RT系统平板和完整的Windows 8系统平板两大阵营.RT系统的平板轻薄续航持久,但是由于没法安装常规的.exe程序,所以对于工作需要略显不足,是 ...

  5. entity framework 新手入门篇(4)-entity framework扩展之 entityframework.extended

    对于EF的操作,我们已经有了大概的了解了,但对于实战来说,似乎还欠缺着一些常用的功能,那就是批量的删除,更新数据. 承接上面的部分,我们有一个叫做House的数据库,其中包含house表和seller ...

  6. 面向对象to1

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. Guid和Sequence做主键的比较

    记得A项目组是一个物流管理系统,后台采用了Oracle数据库.在系统中的核心表托运单表中,关于主键采用何种数据类型,是 sequence 还是用GUID , 大家起了争论. 从网络搜索得到的结论看,一 ...

  8. 了解JavaWeb,一篇就够

    把HTML.CSS.JSP.JS.JavaScript,JQuery,STRUTS,String,MVC,DOM 柔和起来,贯穿成一篇完整的内容,让读者明白JavaWeb的前前后后. 从Servlet ...

  9. Canvas基础

    1.1. 什么是 Canvas canvas 是 HTML5 提供的一个用于展示绘图效果的标签. canvas 原意画布, 帆布. 在 HTML 页面中用于展示绘图效果. 最早 canvas 是苹果提 ...

  10. software_testing_work2_question1(改)_edition

    由于上个版本问题多多,而且测试情况略有呵呵,于是想想还是默默的改进了一个版本. input类 首先呢,是作为输入项的实体类input. 对比之前的版本,新版本(姑且称其为edition2)加强了ope ...