C++ 采集音频流(PCM裸流)实现录音功能
来源:互联网 发布:腾讯云和阿里云做ss 编辑:程序博客网 时间:2024/06/01 14:09
本文转载自博客:https://www.2cto.com/kf/201406/309391.html
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
与上一篇的“C++ 播放音频流(PCM裸流)” 点击打开链接 相对应,本篇是关于用C++实现录音功能的。同样是直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用,也可以下载本人上传的相关工程,这个工程是用VS2013写的,如果是较低的版本就呵呵了。点击打开链接
代码部分如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#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
;
}</windows.h></stdio.h>
阅读全文
0 0
- C++ 采集音频流(PCM裸流)实现录音功能
- C++ 采集音频流(PCM裸流)实现录音功能
- C++ 采集音频流(PCM裸流)实现录音功能
- C++ 采集音频流(PCM裸流)实现录音功能(双缓存版本)
- c语言实现录音功能
- windows音频PCM采集及简单编码
- 使用C语言实现pcm格式音频音量的调整
- 使用C语言实现pcm格式音频的声道分离
- Android多媒体功能的实现上(音频,视频,相机,录音)
- C++ 播放音频流(PCM裸流)
- C++ 播放音频流(PCM裸流)
- C++ 播放音频流(PCM裸流)
- Android 音频 OpenSL ES 录音 采集
- Unity3D 录音功能 音频保存
- 在Android系统中使用TeeSink功能截取任意音频流的原始PCM音频数据
- ios开发 设备录音 音频流的 获取 ACC PCM 等都可以 苹果官方提供的 demo下载链接
- DirectShow音频采集pcm,实时编码AAC,附源码
- Android PCM音频的采集和编码成AAC
- Spring Bean的生命周期(freestyle)
- springmvc4.x+fastjson 整合及问题
- 打牌导论:>
- extend带参default值的问题
- 如何自定义绘制View
- C++ 采集音频流(PCM裸流)实现录音功能
- HTML5:学习(5)CSS盒子模型
- Android Window
- Caffe Tutorials
- Apache Spark 2.2.0 中文文档
- Qt tableview总结
- JavaScript-滚动条事件
- List 循环中出现的问题
- web前端之自动判断访问设备