杨家超 发表于 2018-9-17 17:05:12

声卡播放音频采集开发指南

本帖最后由 杨家超 于 2018-9-18 20:41 编辑

AnyChat一直致力于为行业客户提供音视频整体解决方案。我们注意到,在某些特定的业务场景中,会需要采集声卡播放的声音(之前只能采集麦克风的声音)。比如:远程教育应用场景中,老师需要给学生播放课件,其中课件的声音就需要从声卡播放中采集出来。经过AnyChat技术团队的深入研发,目前在Windows平台的最新版本 AnyChatSDK r7554中已经提供出这种能力,并且已开放相应的API接口。
一、使用方式
1、SDK内部嵌入“Native Audio Play Capture”声卡采集设备
2、上层可以给声音采集设备绑定相应的流号,根据绑定的流号对设备进行开/关操作
二、示例代码
1、初始化SDK之后,添加声卡采集设备#define BRAC_SO_AUDIO_PLAYCAPTURE      79      ///< 音频播放采集参数设置(参数为int型,0 关闭[默认],1 开启)

BOOL bEnableNativeCapture = TRUE;
BRAC_SetSDKOption(BRAC_SO_AUDIO_PLAYCAPTURE,(PCHAR)&bEnableNativeCapture, sizeof(bEnableNativeCapture));2、给每个声音采集设备绑定流号#define BRAC_STREAMINFO_AUDIODEVICENAME   195///< 音频采集设备名称

#define NATIVE_AUDIO_PLAY_CAPTURE_INDEX   5    // 为了方便对方请求时指定声卡采集流,这里固定声卡采集设备的流号为5

// 获取音频采集设备的列表数量
DWORD dwDeviceNum = 0;
BRAC_EnumAudioCapture(NULL, dwDeviceNum);                                                      

// 获取设备列表名称
char **pDeviceName = new char *;
BRAC_EnumAudioCapture((TCHAR **)pDeviceName, dwDeviceNum);      

// 给声卡采集的设备绑定指定流号,其他的设备从0开始按顺序编号
for (DWORD i = 0; i < dwDeviceNum; i++){
      char pName = {0};
      strcpy_s(pName, 255, pDeviceName);
      if(strstr(pName, "Native Audio Play Capture"))                                       
                BRAC_SetUserStreamInfo(-1, NATIVE_AUDIO_PLAY_CAPTURE_INDEX, BRAC_STREAMINFO_AUDIODEVICENAME, pName, strlen(pName));
      else
                BRAC_SetUserStreamInfo(-1, i, BRAC_STREAMINFO_AUDIODEVICENAME, pName, strlen(pName));
}
for (DWORD i = 0; i < dwDeviceNum; i++){
      GlobalFree(pDeviceName);
}
delete[] pDeviceName;
pDeviceName = NULL;3、打开声卡采集设备采集音频BRAC_UserSpeakControlEx(-1, TRUE, NATIVE_AUDIO_PLAY_CAPTURE_INDEX);

admin 发表于 2019-2-25 09:16:38

谢谢,正是我需要的.
页: [1]
查看完整版本: 声卡播放音频采集开发指南