record sound
获取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相关推荐
- 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 ...
- 【CodeForces - 1199C】MP3(思维,离散化)
题干: One common way of digitalizing sound is to record sound intensity at particular time moments. Fo ...
- android 模拟器声音设置,使用android模拟器录制声音
我试图通过创建一个android应用程序来录制声音. 这里是代码:使用android模拟器录制声音 这是辅助类 package com.recorder; import java.io.File; i ...
- 如何将音乐添加到PowerPoint演示文稿
There are many ways to improve your PowerPoint presentation-adding animations to objects, customizin ...
- Asterisk AGI 详解
Introduction The AGI facility allows you to launch scripts, written in just about any language, from ...
- my ReadFood_Nanking Delicious / food / delicious
南京市浦口区浦东北路9号江苏省食品集团有限公司 http://baike.baidu.com/view/9690601.htm http://www.jiangsufood.com/index/ind ...
- 简要视音频发展编年史
转自一外国牛人博客 First, I'd like to apologize for not posting any articles lately. I've been busy completin ...
- iphone实况照片导出_如何使用iPhone拍摄真棒实况照片
iphone实况照片导出 If you purchased a recent iPhone (6S and above), then you may be loving the new Live Ph ...
- Pepper/Nao初级教程:第四章 Pepper/Nao的常用指令盒介绍
第五章 Pepper/Nao的常用指令盒介绍 4.1 对话 制作对话App的方法有很多,其中一个方法是使用Speech Reco.和Say指令盒来实现. 4.1.1 Speech Reco.指令盒 S ...
最新文章
- gridview中动态绑定通过模板列增加的textbox。
- nginx进程管理之worker进程
- 7-8 InputMismatchException异常 (20 分)
- linux系统中防止系统时间,设置系统时间与在Linux中
- Python字符串介绍
- web语义化与h5新增标签
- CSS定义通用透明效果
- AD14 如何设置PCB板框大小及形状
- 电脑版微信打开内置浏览器
- 3000字告诉你如何渡过程序员菜鸟时期
- 【_ 記 】发送邮件功能和MimeMessageHelper 对象下的To Cc Bcc(发送,抄送,密送)
- 书籍推荐——一本老书,吴军老师《数学之美》
- Android百度地图开发之指南针
- 在疫情期间微分销商城如何运营
- 【JZOJ A组】C
- Excel(2):按上下左右键不是单元格在动,而是整个屏幕都在动
- 小说更新太慢怎么办_为什么现在的网络小说更新这么慢
- 双非渣本小Android四年磨一剑,秋招大厂(字节、腾讯、B站)面经分享
- 手机QQ登录测试用例
- iOS ffmpeg+OpenGL播放yuv+openAL 快放 慢放 视频播放器
热门文章
- iOS逆向之“修改微信运动步数”
- 【计算机科学】【2016.05】基于递归神经网络的股市预测研究
- sql数据库之提取时间函数date()、year()、month()...及示例
- 修复IE不能正常上网的工具
- c++智能指针的使用,auto_ptr,shared_ptr
- JUC之锁的八种情况
- IntelliJ IDEA 2020.1发布,你要的都在这!
- 下列不属于噪声的是_[单选] 下列选项中不属于噪声的是()。
- Greenplum中的vacuum
- python葡萄酒数据_用python进行葡萄酒质量预测