C++ 采集音频流(PCM裸流)实现录音功能
与上一篇的“C++ 播放音频流(PCM裸流)” 点击打开链接 相对应,本篇是关于用C++实现录音功能的。同样是直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用,也可以下载本人上传的相关工程,这个工程是用VS2013写的,如果是较低的版本就呵呵了。点击打开链接
代码部分如下:
- #include "stdafx.h"
- #include <stdio.h>
- #include <Windows.h>
- #pragma comment(lib, "winmm.lib")
- HWAVEIN hWaveIn; //输入设备
- WAVEFORMATEX waveform; //采集音频的格式,结构体
- BYTE *pBuffer1;//采集音频时的数据缓存
- WAVEHDR wHdr1; //采集音频时包含数据缓存的结构体
- FILE *pf;
- int _tmain(int argc, _TCHAR* argv[])
- {
- HANDLE wait;
- waveform.wFormatTag = WAVE_FORMAT_PCM;//声音格式为PCM
- waveform.nSamplesPerSec = 8000;//采样率,16000次/秒
- waveform.wBitsPerSample = 16;//采样比特,16bits/次
- waveform.nChannels = 1;//采样声道数,2声道
- waveform.nAvgBytesPerSec = 16000;//每秒的数据率,就是每秒能采集多少字节的数据
- waveform.nBlockAlign = 2;//一个块的大小,采样bit的字节数乘以声道数
- waveform.cbSize = 0;//一般为0
- wait = CreateEvent(NULL, 0, 0, NULL);
- //使用waveInOpen函数开启音频采集
- waveInOpen(&hWaveIn, WAVE_MAPPER, &waveform,(DWORD_PTR)wait, 0L, CALLBACK_EVENT);
- //建立两个数组(这里可以建立多个数组)用来缓冲音频数据
- DWORD bufsize = 1024*100;//每次开辟10k的缓存存储录音数据
- int i = 20;
- fopen_s(&pf, "录音测试.pcm", "wb");
- while (i--)//录制20左右秒声音,结合音频解码和网络传输可以修改为实时录音播放的机制以实现对讲功能
- {
- pBuffer1 = new BYTE[bufsize];
- wHdr1.lpData = (LPSTR)pBuffer1;
- wHdr1.dwBufferLength = bufsize;
- wHdr1.dwBytesRecorded = 0;
- wHdr1.dwUser = 0;
- wHdr1.dwFlags = 0;
- wHdr1.dwLoops = 1;
- waveInPrepareHeader(hWaveIn, &wHdr1, sizeof(WAVEHDR));//准备一个波形数据块头用于录音
- waveInAddBuffer(hWaveIn, &wHdr1, sizeof (WAVEHDR));//指定波形数据块为录音输入缓存
- waveInStart(hWaveIn);//开始录音
- Sleep(1000);//等待声音录制1s
- waveInReset(hWaveIn);//停止录音
- fwrite(pBuffer1, 1, wHdr1.dwBytesRecorded, pf);
- delete pBuffer1;
- printf("%ds ", i);
- }
- fclose(pf);
- waveInClose(hWaveIn);
- return 0;
- }
C++ 采集音频流(PCM裸流)实现录音功能的更多相关文章
- C++ 採集音频流(PCM裸流)实现录音功能
与上一篇的"C++ 播放音频流(PCM裸流)" 点击打开链接 相相应,本篇是关于用C++实现录音功能的.相同是直接建一个win32控制台程序然后将代码拷过去改个文件名称就能够用,也 ...
- C++ 播放音频流(PCM裸流)--改善
直接上代码,如果有需要可以直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用了(注意将声道和频率与你自己的文件对应).当然我自己也用VS2008写了个例子上传了,如果有需要下载地址如下: ...
- C++ 播放音频流(PCM裸流)
直接上代码,如果有需要可以直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用了(注意将声道和频率与你自己的文件对应哦).当然我自己也用VS2008(VS2013好用太多,强烈推荐还是用V ...
- ffplay播放PCM裸流
ffplay -f s16le -ar 48000 -ac 2 d:\lei.pcm
- 全志Tina_dolphin播放音视频裸流(h264,pcm)验证
最近在验证tina对裸流音视频的支持,主要指h264视频裸流及pcm音频裸流. 在原始sdk中有针对很多video和audio类型的parser,但就是没有找到pcm和h264的parser,所以需要 ...
- 【嵌入式开发】用 VLC 显示 树莓派摄像头 H264 裸流
首先树莓派连上网络,并和电脑在同一网段. 树莓派的IP是: 192.168.3.13 电脑的IP是: 192.168.3.6 1.在树莓派上采集 H264裸流,并用UDP发送到电脑. pi@Neil- ...
- JavaCV FFmpeg采集麦克风PCM音频数据
前阵子用一个JavaCV的FFmpeg库实现了YUV视频数据地采集,同样的采集PCM音频数据也可以采用JavaCV的FFmpeg库. 传送门:JavaCV FFmpeg采集摄像头YUV数据 首先引入 ...
- H264裸流分析中,能获取哪些信息?
从H264的裸流中,PPS,SPS中,一定可以获取到的,有图像的宽,高信息. 这部分信息的提取,用Stream eye 分析: 这里需要特别提一下这两个参数: pic_width_in_mbs_mi ...
- ffmpeg学习(二) 通过rtsp获取H264裸流并保存到mp4文件
本篇将使用上节http://www.cnblogs.com/wenjingu/p/3977015.html中编译好的库文件通过rtsp获取网络上的h264裸流并保存到mp4文件中. 1.VS2010建 ...
随机推荐
- (A)eclipse搭建springboot项目入门
网上许多资料都是用idea的,但是我个人用eclipse习惯了,所以就在eclipse里面自己尝试着写了一个hello. 然而项目建好后却迟迟不能访问!!!网上搜了许多资料都不靠谱! 虽然最后能看到h ...
- 阿里云ECS Ubuntu安装PHP+Mysql+Apache+Nginx+Redis+Discuz
http://www.linuxdiyf.com/linux/13662.html http://blog.csdn.net/wangnan537/article/details/47868659 h ...
- DOS程序员手册(三)
56页 第4章DOS和BIOS接口 本章介绍了用户程序访问DOS内核和BIOS所提供的各种服务的方法.为了访问这 些服务,我们可以从任何编程语言中调用各个软件中断,这些中断便是我们在本 ...
- 《算法》C++代码 快速排序
快速排序,简称快排,常称QuickSort.QSort.在排序算法中非常常用,其编程复杂度低,时间复杂度O(NlogN),空间复杂度O(N),执行效率稳定,而且常数很低. 基本思想就是二分,例如你要将 ...
- Visual Studio使用技巧笔记(引用程序集自动复制dll到引用项目目录)
copy /y $(TargetPath) $(SolutionDir)\[您项目引用dll文件的目录]\$(TargetFileName) 例如:copy /y $(TargetPath) $(So ...
- gulp批量添加版本号
要实现的理想效果: "/css/style.css" => "/dist/css/style.css?v=1d87bebe""/js/scrip ...
- Python学习-django-ModelForm组件
ModelForm a. class Meta: model, # 对应Model的 fields=None, # 字段 exclude=None, # 排除字段 labels=None, # 提示信 ...
- 孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化
孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.什么是序列化与反序列化 序列化是指将内存中的数据进行指 ...
- 在jsp页面中使用jstl标签
第一步:引入标签库 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%> 第 ...
- FileZilla修改文件大小格式
之前使用FileZilla觉得很奇怪,文件大小显示为字节格式,很不习惯. 最近发现是在这里修改. 菜单“编辑”下选择设置,选择选项“文件大小格式”,在右边选择为:“使用SI式二进制前缀.(如 1 KB ...