驱动级别的系统底层音频输出系统第一版发布!!!!!!

经过几天的调测,终于放出第一个版本,版本号为:1.0.23.Alpha1,版本字为102300,系统只支持Vista及更高版本
首先介绍一个这个程序,这是一个驱动级别的底层音频输出系统,在我的机子上测试延迟远小于10ms,本系统工作时直接创建一个用户程序要声卡驱动服务的会话,同时声卡被独占,其他程序包括操作系统均无权访问声卡!极大地保证了声音质量并且降低了延迟!
本系统的工作流程:
初始化:本系统加载HD音频服务->客户输入音频格式->客户申请缓冲区块数目->创建“用户->声卡”的会话->创建成功
工作模式:用户向缓冲区写入数据->本系统向音频服务提交请求->系统产生IRP并传给声卡驱动->将数据输入声卡->声卡输出
停止工作:用户提交停止会话->用户提交关闭会话->用户释放HD音频服务

本系统采用API接口方式,方便程序调用,接口声明如下:
//加载音频服务,输入参数为客户程序句柄
int LoadAudBus_Service(HWND MyParents);
//获取当前会话产生并发送一个IRP所需的最短时间
int GetIRPMinimumTime();
//获取当前会话产生并发送一个IRP所需的标准时间
int GetIRPDefaultTime();
//获取当前会话的延迟,不太精确,偏大
int GetCurrentLatency();
//获取可用输出设备数目
int GetOutDeviceCount();
//获取指定输出设备的名称,nIndex为索引(范围在0到可用数目之间),szBuffer为输出名称缓冲,bufferLen为缓冲区大小
void GetOutDeviceName(int nIndex, LPWSTR szBuffer, int bufferLen);
//选择指定输出设备,nIndex为索引
int SelectOutDevice(int nIndex);
//选择默认输出设备
int SelectDefaultOutDevice();
//获取已选定设备名称,参数作用同上
void GetSelectedOutDevice(LPWSTR szBuffer, int bufferLen);
//输入音频格式,inFormat为输出音频格式结构体
int SetInputAudioFormat(WAVEFORMATEX *inFormat);
//创建“用户->声卡”的会话,bufferBlockCount为缓冲区块数目
int CreateAudioSessionInterface(int bufferBlockCount);
//获取当前会话所支持的最大音频格式,outFormat为传出支持的格式
int GetSessionSupportedFormat(WAVEFORMATEX *outFormat);
//会话控制,ControlWord为控制字,下面介绍,Parameter为可选参数(传入或传出)
long SessionControl(AUDIO_SESSION_CONTROL_WORD ControlWord, void *Parameter);
//写入数据到声卡驱动,pcmBuffer为PCM数据,bufferLen为数据大小
int WritePCMToDriver(unsigned char *pcmBuffer, int bufferLen);
//关闭会话
void CloseAudioSessionInterface();
//释放音频服务
void UnloadAudBus_Service();
//获取本系统版本字符串,szBuffer为传出版本字符串,大小至少为128,bufferLen为缓冲大小
void GetDriverVersionString(char *szBuffer, int bufferLen);
//获取本系统本版字
int GetDriverVersionWord();
//显示关于对话框
void ShowAboutDlg(HWND MyParents);

除void型函数,返回值皆有意义:
//没有发现HD驱动
#define RETURN_HD_AUDIO_DRV_NOT_FOUND    -1
//驱动版本不对(驱动无法工作)
#define RETURN_HD_AUDIO_DRV_VER_ERROR    -2
//系统不支持WDM驱动
#define RETURN_WDM_

Copyright 2008 ViPER520 Powered By 5uCMS
苏ICP备08007398号