与上一篇的“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. Android 渗透小知识点

    客户端用于 ADB 通信的默认端口始终是 5037,设备使用从 5555 到 5585 的端口 adb devices用于显示所有已连接设备, 有时候会出现一些问题, 这时候需要使用adb kill- ...

  2. 8,Linux系统基础优化及常用命令

    Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ifconfig 查询.设置网卡和 ...

  3. html---Web Storage存储

    在HTML5中,除了Canvas元素之外,另一个新增的非常重要的功能是可以在客户端本地保存数据的Web Storage功能,之前可以使用Cookies在客户端保存如用户名等简单用户信息,但通过长期使用 ...

  4. Parameter 'limit' not found. Available parameters are [arg1, arg0, pa

    mybatis代码报错,这是因为mapper识别不了limit,需要替换成 LIMIT #{arg0},#{arg1}

  5. sqlsever存储过程学习笔记

    1,创建数据表 use test create table money( id ,) primary key, money int, monetary_unity char ); 2,考虑到货币单位的 ...

  6. php 升级php5.5 、php7

    rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm yum install php55w php55w-opcache yum install ...

  7. 《Cracking the Coding Interview》——第8章:面向对象设计——题目6

    2014-04-23 22:57 题目:实现一个数据结构来表示拼图游戏中的碎片. 解法:一个拼图块儿有四条边,每边只有凹凸平三种情况,当两块碎片拼接的时候,分为四个方向进行,块儿上的图案肯定也是判断是 ...

  8. (原)Unreal-GamePlayer-Actor解析(1)

    (原)Unreal-GamePlayer-Actor解析(1) @author 白袍小道 前言 属于Unreal的 GamePlay 框架中Actor细节部分.主要关于Actor及其相关部件和实体的几 ...

  9. sources-t.list

    deb http://debian.ustc.edu.cn/ubuntu/ trusty main multiverse restricted universe deb http://debian.u ...

  10. web知识清单

    声名随笔中的实例链接到另一个博客是我本人的另一个博客号 模块一:HTML 1.html是什么: hyperText markup language超文本标记语言 超文本:比文本更丰富的内容 所有的浏览 ...