【发布时间】:2019-09-24 04:44:36
【问题描述】:
来自 Microsoft API 文档:https://docs.microsoft.com/en-us/windows/win32/api/mmdeviceapi/ne-mmdeviceapi-erole
ERole 枚举
typedef enum __MIDL___MIDL_itf_mmdeviceapi_0000_0000_0002 {
eConsole,
eMultimedia,
eCommunications,
ERole_enum_count
} ERole;
定义音频端点设备选择播放的“角色”列表
常量
- eConsole 游戏、系统通知声音和语音命令。
- eMultimedia 音乐、电影、旁白和现场音乐录制。
- 电子通讯 语音通讯(与他人交谈)。
- ERole_enum_count ERole 枚举中的成员数(不包括 ERole_enum_count 成员)。
我没有从文档页面得到的是:
- 如果设备设置为
eConsole,是否会完全排除在处理范围内
音乐、电影、旁白和现场音乐录制,以及
语音通信(与他人交谈)
?
我不相信答案是肯定的,因为底层硬件或操作系统不知道没有用户标记的音频流是音乐还是语音。那么这个ERole 是什么?与目标内容类型“良好”(主观和统计)播放的音频混合配置?延迟设置?还是两个或多个属性的组合?
更新
感谢@Roman R. 的回答。现在更多的问题仍然适合问题标题:
IMMDeviceEnumerator::GetDefaultAudioEndpoint 的文档说:
HRESULT GetDefaultAudioEndpoint(
EDataFlow dataFlow,
ERole role,
IMMDevice **ppEndpoint
);
角色
端点设备的角色。调用者应设置此参数 以下 ERole 枚举值之一:
电子控制台
电子多媒体
电子通讯
所以只能分配“ONE”角色;并且由于ERole_enum_count 不像大多数枚举自定义协议那样是一个真正的选项,如何确保“all of the roles”由单个设备播放,正如the Device Roles 和您在该页面上的引用中提到的那样?
【问题讨论】: