使用WindowsAPI进行录音和播放

本文详细介绍了如何使用Windows API进行录音和播放操作。在录音部分,包括初始化、设置参数、开始录音、回调处理及停止录音等步骤,强调了回调处理后的缓冲区清理。在播放环节,初始化阶段用dwUser作为播放状态标记,并提到了与录音相关的getAudioDevices()和setWaveFormat()函数的应用,以及开始播放和回调处理的实现。

录音

1、初始化

	memset(&hWaveIn, 0, sizeof(HWAVEIN));
	memset(&waveForm, 0, sizeof(WAVEFORMATEX));

	if (getAudioDevices())   //判断能否获取设备
	{
   
   
		//设置采样频率
		setWaveFormat(&waveForm, 2, 44100, 16);

		//初始化设备缓冲区
		for (int i = 0; i < 2; ++i)
		{
   
   
			whdr[i].lpData = (CHAR*)malloc(bufLength);
			memset(whdr[i].lpData, 0, bufLength);
			whdr[i].dwBufferLength = bufLength;	//缓冲区大小
			whdr[i].dwBytesRecorded = 0;		//已填充字节数,结束时未填充的自动处理
			whdr[i].dwUser = 0;				   	//用户自定义数据
			whdr[i].dwFlags = 0;				//用不着
			whdr[i].dwLoops = 0;				//用不着
			whdr[i].lpNext = NULL;				//用不着
			whdr[i].reserved = 0;				//用不着
		}
	}

bool InputSound::getAudioDevices()
{
   
   
	//获取音频设备数量
	int count = 0;
	count = waveInGetNumDevs();
	if (count == 0)
	{
   
   
		printf("未获取到音频设备,请检查设备\n");
		return false;
	}
	printf("音频输入设备数据量:%d\n", count);
	
	//获取设备的信息
	WAVEINCAPS waveIncaps;
	MMRESULT mmResult = waveInGetDevCaps(0, &waveIncaps, sizeof(WAVEINCAPS));
	if (mmResult != MMSYSERR_NOERROR)
	{
   
   
		printf("获取设备信息异常\n");
		return false;
	}
	//printf("音频输入设备:%s\n", waveIncaps.szP
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值