博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows音频编程:Win32 Wave API 的使用
阅读量:4108 次
发布时间:2019-05-25

本文共 1776 字,大约阅读时间需要 5 分钟。

[转自:http://blog.csdn.net/zhi_qiu_yi_ye/article/details/6663366]

    使用 Wave API 进行Windows音频编程可以保持很大的自由度,而且与Linux中的OSS编程模式很像。下面我简单介绍函数的调用顺序,具体的用法参见MSDN(VS2008)。
  •     录音:

        waveInOpen -> waveInPrepareHeader -> waveInAddBuffer -> waveInStart -> waveInStop -> waveInReset ->waveInUnprepareHeader -> waveInClose

    录音的回调函数只需要处理WIM_DATA消息,拷贝数据及重新调用waveInAddBuffer将此缓存加入队列。

  •     放音:

        waveOutOpen -> waveOutPrepareHeader -> waveOutWrite -> waveOutReset -> waveOutUnprepareHeader -> waveOutClose

    下面是一个Win32控制台程序的源码,环境VS2008,新建一个空的Win32控制台项目,加入此文件编译即可,功能为录制5秒并回放。注意不要选择Unicode字符集,不然设备名会出现乱码。

#include "stdafx.h"////	WaveAPI.cpp//// by: 知秋一叶//#include 
#include
#include
#include
#pragma comment(lib, "winmm.lib")#define BUFFER_SIZE (44100*16*2/8*5) // 录制声音长度#define FRAGMENT_SIZE 1024 // 缓存区大小#define FRAGMENT_NUM 4 // 缓存区个数static unsigned char buffer[BUFFER_SIZE] = {0};static int buf_count = 0;// 函数定义void CALLBACK waveInProc(HWAVEIN hwi, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2 );void CALLBACK waveOutProc( HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2 );// 入口int main(){ /* 录音 */ // Device int nReturn = waveInGetNumDevs(); printf("输入设备数目:%d\n", nReturn); for (int i=0; i
pwh->dwBytesRecorded) ? pwh->dwBytesRecorded : temp; memcpy(buffer+buf_count, pwh->lpData, temp); buf_count += temp; waveInAddBuffer(hwi, pwh, sizeof(WAVEHDR)); }}// 放音回调函数void CALLBACK waveOutProc( HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2 ){ if (WOM_DONE == uMsg) { buf_count = BUFFER_SIZE; }}

你可能感兴趣的文章
苏宁产品经理面经
查看>>
百度产品经理群面
查看>>
去哪儿一面+平安科技二面+hr面+贝贝一面+二面产品面经
查看>>
element ui 弹窗在IE11中关闭时闪现问题修复
查看>>
vue 遍历对象并动态绑定在下拉列表中
查看>>
Vue动态生成el-checkbox点击无法选中的解决方法
查看>>
python __future__
查看>>
MySQL Tricks1
查看>>
python 变量作用域问题(经典坑)
查看>>
pytorch
查看>>
pytorch(二)
查看>>
pytorch(三)
查看>>
pytorch(四)
查看>>
pytorch(5)
查看>>
pytorch(6)
查看>>
opencv 指定版本下载
查看>>
ubuntu相关
查看>>
C++ 调用json
查看>>
nano中设置脚本开机自启动
查看>>
动态库调动态库
查看>>