获取pcm文件

SoundRecord* g_sound=nullptr;
#pragma comment(lib, "winmm.lib")
DWORD CALLBACK MicCallback(HWAVEIN hwavein, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2){switch (uMsg) {case WIM_OPEN:LOGXD("The device is on ...");break;case WIM_DATA: {if (g_sound)g_sound->getDealFun()(hwavein, uMsg, dwInstance, dwParam1, dwParam2, g_sound->getRunState());waveInAddBuffer(hwavein, (LPWAVEHDR)dwParam1, sizeof(WAVEHDR));break;}case WIM_CLOSE:LOGXD("The equipment has been shut down. ...");break;default:break;}return 0;}void SoundRecord::getPcm(int _rate, int _channel, int _bit_size, std::function<void(HWAVEIN, UINT, DWORD, DWORD, DWORD, bool& is_run)> _fun) {do {//1.get infoint count = waveInGetNumDevs();//1LOGXD("n Audio input quantity: ", VAR_DATA(count));if (count <= 0)break;WAVEINCAPS waveIncaps;MMRESULT mmResult = waveInGetDevCaps(0, &waveIncaps, sizeof(WAVEINCAPS));//2LOGXD("Audio input equipment:", VAR_DATA(waveIncaps.szPname));if (mmResult != MMSYSERR_NOERROR)break;//2.init wave_formatWAVEFORMATEX pwfx;pwfx.wFormatTag = WAVE_FORMAT_PCM;pwfx.nChannels = _channel;pwfx.nSamplesPerSec = _rate;pwfx.wBitsPerSample = _bit_size;pwfx.nBlockAlign = pwfx.nChannels * pwfx.wBitsPerSample / 8;pwfx.nAvgBytesPerSec = pwfx.nSamplesPerSec * pwfx.nBlockAlign;pwfx.cbSize = 0;//3.open device and ready bufHWAVEIN phwi;LOGXD("Request to open audio input device ");LOGXD(VAR_DATA(pwfx.nChannels), VAR_DATA(pwfx.nBlockAlign), VAR_DATA(pwfx.nSamplesPerSec));mmResult = waveInOpen(&phwi, WAVE_MAPPER, &pwfx, (DWORD)(MicCallback), NULL, CALLBACK_FUNCTION);//3if (MMSYSERR_NOERROR != mmResult)break;int buf_size = pwfx.nAvgBytesPerSec * 2;WAVEHDR pwh1;unique_ptr<char[]> buffer1 = make_unique<char[]>(buf_size);pwh1.lpData = buffer1.get();pwh1.dwBufferLength = buf_size;pwh1.dwUser = 1;pwh1.dwFlags = 0;mmResult = waveInPrepareHeader(phwi, &pwh1, sizeof(WAVEHDR));LOGXD("Standby buffer 1");WAVEHDR pwh2;unique_ptr<char[]> buffer2 = make_unique<char[]>(buf_size);pwh2.lpData = buffer2.get();pwh2.dwBufferLength = buf_size;pwh2.dwUser = 2;pwh2.dwFlags = 0;mmResult = waveInPrepareHeader(phwi, &pwh2, sizeof(WAVEHDR));LOGXD("Standby buffer 2");//4.start getif (MMSYSERR_NOERROR != mmResult)break;mmResult = waveInAddBuffer(phwi, &pwh1, sizeof(WAVEHDR));LOGXD("The buffer 1 Add audio input device ");mmResult = waveInAddBuffer(phwi, &pwh2, sizeof(WAVEHDR));LOGXD("The buffer 2 Add audio input device ");if (MMSYSERR_NOERROR != mmResult)break;mmResult = waveInStart(phwi);//6LOGXA("Request to start recording");getDealFun() = _fun;g_sound = this;while (getRunState()) { Sleep(1000); }waveInReset(phwi); waveInClose(phwi);} while (false);LOGXF("record was exit");
}
void Start::doSomething(){int all_number = 20;int now_number =0;fstream out_file;auto del_fun = [&now_number, all_number, &out_file](HWAVEIN hwavein, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2,bool &is_run) {LPWAVEHDR waveheader = ((LPWAVEHDR)dwParam1);LOGXD("The buffer %d To fill ...", waveheader->dwUser);LOGXD("The buffer %d To fill ...", waveheader->dwBytesRecorded);if (now_number>=all_number) {out_file.close();out_file.open("C:/desktop/1/" + to_string(time(nullptr)) + ".pcm", ios::out | ios::binary);now_number = 0;}now_number++;out_file.write(waveheader->lpData, waveheader->dwBytesRecorded);};SoundRecord s;s.getPcm(8000,1,16, del_fun);
}

pcm to mp3

ffmpeg -y -f s16be -ac 1 -ar 8000 -acodec pcm_s16le -i 1.pcm new.mp3

record sound相关推荐

  1. Sound recording and encoding in MP3 format.

    Download source files - 18.7 Kb Download demo project - 185 Kb Introduction Have you ever tried to w ...

  2. 【CodeForces - 1199C】MP3(思维,离散化)

    题干: One common way of digitalizing sound is to record sound intensity at particular time moments. Fo ...

  3. android 模拟器声音设置,使用android模拟器录制声音

    我试图通过创建一个android应用程序来录制声音. 这里是代码:使用android模拟器录制声音 这是辅助类 package com.recorder; import java.io.File; i ...

  4. 如何将音乐添加到PowerPoint演示文稿

    There are many ways to improve your PowerPoint presentation-adding animations to objects, customizin ...

  5. Asterisk AGI 详解

    Introduction The AGI facility allows you to launch scripts, written in just about any language, from ...

  6. my ReadFood_Nanking Delicious / food / delicious

    南京市浦口区浦东北路9号江苏省食品集团有限公司 http://baike.baidu.com/view/9690601.htm http://www.jiangsufood.com/index/ind ...

  7. 简要视音频发展编年史

    转自一外国牛人博客 First, I'd like to apologize for not posting any articles lately. I've been busy completin ...

  8. iphone实况照片导出_如何使用iPhone拍摄真棒实况照片

    iphone实况照片导出 If you purchased a recent iPhone (6S and above), then you may be loving the new Live Ph ...

  9. Pepper/Nao初级教程:第四章 Pepper/Nao的常用指令盒介绍

    第五章 Pepper/Nao的常用指令盒介绍 4.1 对话 制作对话App的方法有很多,其中一个方法是使用Speech Reco.和Say指令盒来实现. 4.1.1 Speech Reco.指令盒 S ...

最新文章

  1. gridview中动态绑定通过模板列增加的textbox。
  2. nginx进程管理之worker进程
  3. 7-8 InputMismatchException异常 (20 分)
  4. linux系统中防止系统时间,设置系统时间与在Linux中
  5. Python字符串介绍
  6. web语义化与h5新增标签
  7. CSS定义通用透明效果
  8. AD14 如何设置PCB板框大小及形状
  9. 电脑版微信打开内置浏览器
  10. 3000字告诉你如何渡过程序员菜鸟时期
  11. 【_ 記 】发送邮件功能和MimeMessageHelper 对象下的To Cc Bcc(发送,抄送,密送)
  12. 书籍推荐——一本老书,吴军老师《数学之美》
  13. Android百度地图开发之指南针
  14. 在疫情期间微分销商城如何运营
  15. 【JZOJ A组】C
  16. Excel(2):按上下左右键不是单元格在动,而是整个屏幕都在动
  17. 小说更新太慢怎么办_为什么现在的网络小说更新这么慢
  18. 双非渣本小Android四年磨一剑,秋招大厂(字节、腾讯、B站)面经分享
  19. 手机QQ登录测试用例
  20. iOS ffmpeg+OpenGL播放yuv+openAL 快放 慢放 视频播放器

热门文章

  1. iOS逆向之“修改微信运动步数”
  2. 【计算机科学】【2016.05】基于递归神经网络的股市预测研究
  3. sql数据库之提取时间函数date()、year()、month()...及示例
  4. 修复IE不能正常上网的工具
  5. c++智能指针的使用,auto_ptr,shared_ptr
  6. JUC之锁的八种情况
  7. IntelliJ IDEA 2020.1发布,你要的都在这!
  8. 下列不属于噪声的是_[单选] 下列选项中不属于噪声的是()。
  9. Greenplum中的vacuum
  10. python葡萄酒数据_用python进行葡萄酒质量预测