C++ 採集音频流(PCM裸流)实现录音功能
与上一篇的“C++ 播放音频流(PCM裸流)” 点击打开链接 相相应,本篇是关于用C++实现录音功能的。相同是直接建一个win32控制台程序然后将代码拷过去改个文件名称就能够用,也能够下载本人上传的相关project,这个project是用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;//声音格式为PCMwaveform.nSamplesPerSec = 8000;//採样率,16000次/秒waveform.wBitsPerSample = 16;//採样比特,16bits/次waveform.nChannels = 1;//採样声道数,2声道waveform.nAvgBytesPerSec = 16000;//每秒的数据率,就是每秒能採集多少字节的数据waveform.nBlockAlign = 2;//一个块的大小,採样bit的字节数乘以声道数waveform.cbSize = 0;//一般为0wait = 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);//等待声音录制1swaveInReset(hWaveIn);//停止录音fwrite(pBuffer1, 1, wHdr1.dwBytesRecorded, pf);delete pBuffer1; printf("%ds ", i);}fclose(pf);waveInClose(hWaveIn);return 0;
}
C++ 採集音频流(PCM裸流)实现录音功能相关推荐
- C++ 播放音频流(PCM裸流)
直接上代码.假设有须要能够直接建一个win32控制台程序然后将代码拷过去改个文件名称就能够用了(注意将声道和频率与你自己的文件相应).当然我自己也用VS2008写了个样例上传了,假设有须要下载地址例如 ...
- PCM裸流ADPCM算法压缩(调用adpcm_coder/adpcm_decoer接口)
最近一周做一个ADPCM算法的调研工作,以前是做电视智能浏览器,所以对这个东西不了解,虽然给我了算法的接口, 使用intel的adpcm_coder/adpcm_decoder进行压缩和解压,参数也能 ...
- PCM裸流数据的16进制格式以及左右声道分离c语言程序
前言 本文讲解PCM裸流数据的存储格式. 本文PCM音频参数 声道数: 2采样位数: little endian signed 16 bits,小端有符号字 = short,表示范围 -32768~3 ...
- FFmpeg系列(二)—— 音视频裸流转换:mp3转pcm、h264转YUV
文章目录 1.总流程 2.解析流程 3.解码流程 4.完整代码 1.总流程 创建解析器.解码器.AVPacket和AVFrame 打开文件,将mp3数据读入缓冲区 解析mp3数据(在 main 函数中 ...
- 成功在MP4封装的H264视频中提取能播放的裸流
首先说明一下,本人只是从MP4(AVC)封装的h264视频流中成功把裸流提取出来并进行播放,而这一段MP4封装的流中是不含音频流的,因为项目并不需要实现这个,所以我也就偷懒了,需要从含有音频流的MP4 ...
- Linux ALSA驱动之三:PCM创建流程源码分析(基于Linux 5.18)
1.基本概念及逻辑关系 如上图,通过上一节声卡的学习我们已经知道PCM是声卡的一个子设备,或者表示一个PCM实例. 每个声卡最多可以包含4个pcm的实例,每个pcm实例对应一个pcm设备文件.pcm实 ...
- 【源代码】基于Android和蓝牙的单片机温度採集系统
如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 STC89C52单片机通过HC-06蓝牙模块与Android手机通信实例- 基于And ...
- 【嵌入式开发】用 VLC 显示 树莓派摄像头 H264 裸流
首先树莓派连上网络,并和电脑在同一网段. 树莓派的IP是: 192.168.3.13 电脑的IP是: 192.168.3.6 1.在树莓派上采集 H264裸流,并用UDP发送到电脑. pi@Neil- ...
- 【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )
FFmpeg 系列文章目录 [FFmpeg]Windows 搭建 FFmpeg 命令行运行环境 [FFmpeg]FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 ...
最新文章
- 转载 为什么不要 lock(this) ? lock object 并是readonly
- Python模块: 文件和目录os+shutil
- 世上最“贵”的河:河里石头比黄金还值钱?甚至还有士兵驻守!
- Linux:关于头文件的位置
- c盘java文件误删_java获取C盘下的隐藏目录文件名称
- [jQuery原理] jQuery事件操作相关方法
- c++语言中for循环语句,C++ 循环
- python mobile-hi.codemao.cn_使用thrift做c++,java和python的相互调用
- r语言aggredate_R语言 分组计算,不止group_by
- Kubernetes核心技术--Pod,Label,Volume,Service,Deployment详解
- java中nul值的处理
- android pak文件_Android 动态加载 (三) PAK 详解
- python中的主函数调用_调用主函数中的函数
- 如何设置变更Word页面颜色?干货经验!怎样操作更改word背景颜色?
- Python爬虫,高清美图我全都要(彼岸桌面壁纸)
- python打开是什么颜色-Python中常见颜色记录
- 美股分时交易数据 API 接口
- android 修改系统默认时间24小时制
- 集团化公司快递收发管理教程
- 输入年和月,判断该月有多少天