与上一篇的“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. 解决 ld: library not found for -lPods的问题

    现在打开有pods建好的workspace文件,尝试编译,会报ld: library not found for -lPods错误,原因就是工程里面的设置项覆盖了pods中xcconfig中的设置.解 ...

  2. IOS客户端的个人中心可以查看自己的博客了。

    IOS客户端的个人中心可以查看自己的博客了. 写这篇是为了在客户端显示之用. 下一步实现在客户端发博客.

  3. 《Cracking the Coding Interview》——第17章:普通题——题目11

    2014-04-29 00:00 题目:给定一个rand5()函数,能够返回0~4间的随机整数.要求实现rand7(),返回0~6之间的随机整数.该函数产生随机数必须概率相等. 解法:自己想了半天没想 ...

  4. SQL Server无法连接到数据库

    连接数据库的时候出现如下错误: 我解决的使用方法: 第一步:关闭上面的错误,取消连接数据库. 第二步:开始->程序->Microsoft SQL Server 2008 R2->配置 ...

  5. Nuget.config格式错误,请检查nuget.config配置文件

    安装 VS 2015 Professional 版,安装后,我想加一个nuget的包配置. 然后提示我:Nuget.config格式错误,请检查nuget.config配置文件 我找到了 Nuget. ...

  6. Swift 与众不同的地方

    Swift 与众不同的地方 switch(元组) 特点 其他语言中的switch语句只能比较离散的整形数据(字符可以转换成整数) 但是swift中可以比较整数.浮点数.字符.字符串.和元组数据类型,而 ...

  7. 一道简单的CTFpython沙箱逃逸题目

    看了几天的ssti注入然后了解到有python沙箱逃逸 学过ssti注入的话python沙箱逃逸还是很容易理解的. 看一道CTF题目,源码的话我改了改,一开始不能用,直接在py2上运行就好. 题目要求 ...

  8. Mysql与Oracle之间的数据类型转换

    MySQL Data Type Oracle Data Type BIGINT NUMBER(19, 0) BIT RAW BLOB BLOB, RAW CHAR CHAR DATE DATE DAT ...

  9. Spring Boot多数据源配置(二)MongoDB

    在Spring Boot多数据源配置(一)durid.mysql.jpa 整合中已经讲过了Spring Boot如何配置mysql多数据源.本篇文章讲一下Spring Boot如何配置mongoDB多 ...

  10. ASP.NET 抓取网页内容

    (转)ASP.NET 抓取网页内容 ASP.NET 抓取网页内容-文字 ASP.NET 中抓取网页内容是非常方便的,而其中更是解决了 ASP 中困扰我们的编码问题. 需要三个类:WebRequest. ...