与上一篇的“C++ 播放音频流(PCM裸流)” 点击打开链接 相对应,本篇是关于用C++实现录音功能的。同样是直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用,也可以下载本人上传的相关工程,这个工程是用VS2013写的,如果是较低的版本就呵呵了。点击打开链接

代码部分如下:

  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <Windows.h>
  4. #pragma comment(lib, "winmm.lib")
  5. HWAVEIN hWaveIn;  //输入设备
  6. WAVEFORMATEX waveform; //采集音频的格式,结构体
  7. BYTE *pBuffer1;//采集音频时的数据缓存
  8. WAVEHDR wHdr1; //采集音频时包含数据缓存的结构体
  9. FILE *pf;
  10. int _tmain(int argc, _TCHAR* argv[])
  11. {
  12. HANDLE          wait;
  13. waveform.wFormatTag = WAVE_FORMAT_PCM;//声音格式为PCM
  14. waveform.nSamplesPerSec = 8000;//采样率,16000次/秒
  15. waveform.wBitsPerSample = 16;//采样比特,16bits/次
  16. waveform.nChannels = 1;//采样声道数,2声道
  17. waveform.nAvgBytesPerSec = 16000;//每秒的数据率,就是每秒能采集多少字节的数据
  18. waveform.nBlockAlign = 2;//一个块的大小,采样bit的字节数乘以声道数
  19. waveform.cbSize = 0;//一般为0
  20. wait = CreateEvent(NULL, 0, 0, NULL);
  21. //使用waveInOpen函数开启音频采集
  22. waveInOpen(&hWaveIn, WAVE_MAPPER, &waveform,(DWORD_PTR)wait, 0L, CALLBACK_EVENT);
  23. //建立两个数组(这里可以建立多个数组)用来缓冲音频数据
  24. DWORD bufsize = 1024*100;//每次开辟10k的缓存存储录音数据
  25. int i = 20;
  26. fopen_s(&pf, "录音测试.pcm", "wb");
  27. while (i--)//录制20左右秒声音,结合音频解码和网络传输可以修改为实时录音播放的机制以实现对讲功能
  28. {
  29. pBuffer1 = new BYTE[bufsize];
  30. wHdr1.lpData = (LPSTR)pBuffer1;
  31. wHdr1.dwBufferLength = bufsize;
  32. wHdr1.dwBytesRecorded = 0;
  33. wHdr1.dwUser = 0;
  34. wHdr1.dwFlags = 0;
  35. wHdr1.dwLoops = 1;
  36. waveInPrepareHeader(hWaveIn, &wHdr1, sizeof(WAVEHDR));//准备一个波形数据块头用于录音
  37. waveInAddBuffer(hWaveIn, &wHdr1, sizeof (WAVEHDR));//指定波形数据块为录音输入缓存
  38. waveInStart(hWaveIn);//开始录音
  39. Sleep(1000);//等待声音录制1s
  40. waveInReset(hWaveIn);//停止录音
  41. fwrite(pBuffer1, 1, wHdr1.dwBytesRecorded, pf);
  42. delete pBuffer1;
  43. printf("%ds  ", i);
  44. }
  45. fclose(pf);
  46. waveInClose(hWaveIn);
  47. return 0;
  48. }
 
from:http://blog.csdn.net/weixinhum/article/details/31155985

C++ 采集音频流(PCM裸流)实现录音功能的更多相关文章

  1. C++ 採集音频流(PCM裸流)实现录音功能

    与上一篇的"C++ 播放音频流(PCM裸流)" 点击打开链接 相相应,本篇是关于用C++实现录音功能的.相同是直接建一个win32控制台程序然后将代码拷过去改个文件名称就能够用,也 ...

  2. C++ 播放音频流(PCM裸流)--改善

    直接上代码,如果有需要可以直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用了(注意将声道和频率与你自己的文件对应).当然我自己也用VS2008写了个例子上传了,如果有需要下载地址如下: ...

  3. C++ 播放音频流(PCM裸流)

    直接上代码,如果有需要可以直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用了(注意将声道和频率与你自己的文件对应哦).当然我自己也用VS2008(VS2013好用太多,强烈推荐还是用V ...

  4. ffplay播放PCM裸流

    ffplay -f s16le -ar 48000 -ac 2 d:\lei.pcm

  5. 全志Tina_dolphin播放音视频裸流(h264,pcm)验证

    最近在验证tina对裸流音视频的支持,主要指h264视频裸流及pcm音频裸流. 在原始sdk中有针对很多video和audio类型的parser,但就是没有找到pcm和h264的parser,所以需要 ...

  6. 【嵌入式开发】用 VLC 显示 树莓派摄像头 H264 裸流

    首先树莓派连上网络,并和电脑在同一网段. 树莓派的IP是: 192.168.3.13 电脑的IP是: 192.168.3.6 1.在树莓派上采集 H264裸流,并用UDP发送到电脑. pi@Neil- ...

  7. JavaCV FFmpeg采集麦克风PCM音频数据

    前阵子用一个JavaCV的FFmpeg库实现了YUV视频数据地采集,同样的采集PCM音频数据也可以采用JavaCV的FFmpeg库. 传送门:JavaCV FFmpeg采集摄像头YUV数据 首先引入 ...

  8. H264裸流分析中,能获取哪些信息?

    从H264的裸流中,PPS,SPS中,一定可以获取到的,有图像的宽,高信息. 这部分信息的提取,用Stream eye 分析: 这里需要特别提一下这两个参数:  pic_width_in_mbs_mi ...

  9. ffmpeg学习(二) 通过rtsp获取H264裸流并保存到mp4文件

    本篇将使用上节http://www.cnblogs.com/wenjingu/p/3977015.html中编译好的库文件通过rtsp获取网络上的h264裸流并保存到mp4文件中. 1.VS2010建 ...

随机推荐

  1. PHP.TP框架下商品项目的优化2-图片优化

    图片存储.上传.显示优化 1.图片路径写进配置文件,当路径有变动时[因业务扩大,服务器存储图片空间不足等],只需修改配置文件,而不用修改代码 2.封装显示.上传.删除函数,实现代码重用 [可类比其他类 ...

  2. Android 人脸识别

    Android人脸识别技术,可以参考下面的网站. http://www.faceplusplus.com.cn/ 本项目使用的就是该网站的api. 项目具体使用的技术代码 /** * 用来压缩图片的方 ...

  3. jQuery的Ajax初识

    1. 什么是Ajax? Ajax是“Asynchronous Javascript And XML(异步Javascript和XML)”的缩写, 是指一种创建交互式网页应用的网站开发技术. Ajax不 ...

  4. iOS程序执行顺序和UIViewController 的生命周期(整理)

    说明:此文是自己的总结笔记,主要参考: iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 UIView的生命周期 言叶之庭.jpeg 一. iOS程序 ...

  5. react事件处理及动态样式添加

    多数据的事件绑定,循环数据来进行绑定.如下方式就是循环绑定事件的基本代码: this.state.lists.map(function(value,index,array){//代码片段}.bind( ...

  6. JMeter学习笔记(七) 导出文件接口测试

    导出文件接口,其实跟下载文件接口的测试类似,主要就是执行接口导出文件后保存到本地. 下载文件接口测试,参考文档:https://www.cnblogs.com/xiaoyu2018/p/1017830 ...

  7. postman导出excel出现response

    https://jingyan.baidu.com/article/915fc414559b4351394b2084.html

  8. day06_06 字典操作01

    1.0 字典操作 dic1 = {'name':'alex'} dic1['age'] = 18 print(dic1) #>>>{'age': 18, 'name': 'alex' ...

  9. ironic images

    参考: http://blog.csdn.net/wanghuiict/article/details/52757359 ironic 整个部署流程中有两组映像,分别是 deploy 映像和 user ...

  10. 【bzoj1899】[Zjoi2004]Lunch 午餐 dp

    题目描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他们要吃的菜各 ...