麦克风和音频捕获
Convai Player Component 和麦克风子系统中麦克风设备枚举、选择、音量以及持久化设置的参考。
UConvaiPlayerComponent 将所有可由蓝图调用的麦克风函数暴露在 Convai|Microphone 类别下。其内部驱动一个 UConvaiAudioCaptureComponent 实例,该实例封装了 Unreal AudioCapture 引擎插件,并通过 UConvaiMicrophoneSubsystem。在 Android 上, AndroidPermission 插件处理运行时麦克风权限。
若要查看完整的 UConvaiPlayerComponent 属性集——身份、会话、注视注意力和音频处理——请参阅 Convai Player 组件.
FCaptureDeviceInfoBP
FCaptureDeviceInfoBP 是一个 BlueprintType 由设备枚举和选择函数返回的结构体。所有字段均为 EditAnywhere, BlueprintReadWrite, 类别 = "Convai|Microphone".
DeviceName
FString
""
在设备菜单中显示的人类可读名称。
DeviceIndex
int
0
采集设备列表中的从零开始索引。设备在添加或移除时,索引可能会在不同会话之间变化。
LongDeviceId
FString
""
平台相关的设备标识符。在 Windows 上,它比 DeviceIndex 在会话之间更稳定。
InputChannels
int
0
设备报告的输入通道数量。
PreferredSampleRate
int
0
设备的首选采样率,单位 Hz。
bSupportsHardwareAEC
布尔值
false
true 当设备支持硬件声学回声消除时。
Convai|Microphone 函数
这些 BlueprintCallable 函数都在 UConvaiPlayerComponent (蓝图显示名称 Convai Player).
设备枚举
GetAvailableCaptureDeviceNames
—
TArray<FString>
所有可用输入设备的名称。请将这些字符串用作显示标签以及 DeviceName 的参数 SetCaptureDeviceByName.
GetAvailableCaptureDeviceDetails
—
TArray<FCaptureDeviceInfoBP>
完整的 FCaptureDeviceInfoBP 每个可用设备的结构体。包含索引、长 ID、通道数、采样率和 AEC 标志。
GetDefaultCaptureDeviceInfo
OutInfo(FCaptureDeviceInfoBP) 输出
布尔值
当前来源: 会验证 AudioCaptureComponent,然后始终返回 false 而不填充 OutInfo。不要依赖 OutInfo 来自此节点。请使用 GetAvailableCaptureDeviceDetails 或 GetActiveCaptureDevice 代替。
GetCaptureDeviceInfo
OutInfo(FCaptureDeviceInfoBP) 输出, DeviceIndex(int)
布尔值
填充 OutInfo 位于以下索引的设备的 DeviceIndex。返回 false 索引超出范围时。
GetActiveCaptureDevice
OutInfo(FCaptureDeviceInfoBP) 输出
—
填充 OutInfo 与当前选择的采集设备一起。
设备选择
SetCaptureDeviceByIndex
DeviceIndex(int)
布尔值
打开位于以下索引的采集设备 DeviceIndex。返回 false 当索引超出范围或设备无法打开时返回。
SetCaptureDeviceByName
DeviceName(FString)
布尔值
打开枚举列表中最后一个其 DeviceName 与输入匹配的设备。若未找到匹配项则返回 false 当未找到匹配项时。
这两个选择函数都可在游戏开始前或游戏过程中调用。成功调用后, GetActiveCaptureDevice 会反映新设备。
音量
SetMicrophoneVolumeMultiplier
InVolumeMultiplier(float)
Success(bool)
按比例缩放捕获到的音频信号。 成功 反映的是采集组件是否可用,而不是麦克风采集当前是否正在流式传输或录制。
GetMicrophoneVolumeMultiplier
—
OutVolumeMultiplier(float), Success(bool)
读取当前音量倍增值。 成功 反映采集组件可用性。
InVolumeMultiplier 在 API 中没有强制范围。值为 1.0 时不会应用增益变化。高于该值的值会 1.0 放大信号;低于该值的值会 1.0 衰减信号。值为 0.0 会使捕获的音频静音,同时保持采集会话处于活动状态。
流式传输与录制状态
GetIsStreaming (显示名称 是否正在流式传输)
`Convai
麦克风`
布尔值
GetIsRecording (显示名称 是否正在录制)
`Convai
麦克风`
布尔值
StartRecording, FinishRecording, UnmuteStreamingAudio,以及 MuteStreamingAudio 的文档见 音频流式传输与录制 部分 Convai Player 组件.
持久化设置
SaveMicrophoneSettings
—
布尔值
快照保存玩家组件当前的采集设备和增益,然后通过 UConvaiMicrophoneSubsystem将其持久化。在玩家确认设备选择后调用此函数——仅选择设备只会在当前会话中生效,直到调用此函数。若 false 子系统不可用时返回。
ApplySavedMicrophoneSettings
—
布尔值
将已持久化的设备(如果已不再插入则跳过)和增益重新应用到玩家组件。会在 BeginPlay期间自动调用;若 UI 需要还原未保存的更改,可再次调用它。返回 false 子系统不可用时返回。
这两个函数都委托给 UConvaiMicrophoneSubsystem,如下所述。
UConvaiMicrophoneSubsystem
UConvaiMicrophoneSubsystem (蓝图显示名称 Convai 麦克风子系统)是一个 UGameInstanceSubsystem ,它在多个会话之间维护玩家的麦克风设备和增益偏好,因此选择不会再在每次启动时重置为系统默认值。其上所有暴露给蓝图的成员都使用 类别 = "Convai|Microphone".
获取 (显示名称 获取,派生——无显式 DisplayName 元数据)
BlueprintPure,静态
WorldContextObject
UConvaiMicrophoneSubsystem*
返回当前 GameInstance 的子系统实例。
GetMicrophoneSettings (显示名称 获取麦克风设置)
BlueprintPure
—
FConvaiMicrophoneSettings
返回子系统当前持有的设置。
HasSavedMicrophoneSettings (显示名称 是否已有保存的麦克风设置)
BlueprintPure
—
布尔值
true 当本会话在磁盘上找到了已保存记录,而不是回退到默认值时返回。
SaveMicrophoneSettings (显示名称 保存麦克风设置)
BlueprintCallable
InSettings(FConvaiMicrophoneSettings)
—
替换当前持有的设置并将其写入共享记录。广播 OnMicrophoneSettingsChanged。采用显式设置值——这与在 UConvaiPlayerComponent上同名节点不同,后者读取的是组件当前的设备和增益。
SaveMicrophoneSettingsFromPlayerComponent (显示名称 从玩家组件保存麦克风设置)
BlueprintCallable
PlayerComponent(UConvaiPlayerComponent)
布尔值
快照保存 PlayerComponent的当前采集设备和增益,然后将其持久化。这就是 UConvaiPlayerComponent::SaveMicrophoneSettings 在内部调用的内容。
ResetMicrophoneSettingsToDefaults (显示名称 将麦克风设置重置为默认值)
BlueprintCallable
—
—
忘记已保存的选择并删除共享记录。
GetAvailableMicrophoneNames (显示名称 获取可用麦克风名称)
BlueprintCallable
—
TArray<FString>
当前存在的设备名称,命名方式与 UConvaiPlayerComponent::GetAvailableCaptureDeviceNames.
IsSavedMicrophoneAvailable (显示名称 已保存的麦克风是否可用)
BlueprintCallable
—
布尔值
true 当某个设备已保存且当前已插入时返回。 false 没有任何已保存内容属于正常的“跟随系统默认值”情况,并非错误。
ApplySavedSettingsToPlayerComponent (显示名称 将已保存设置应用到玩家组件)
BlueprintCallable
PlayerComponent(UConvaiPlayerComponent)
布尔值
将已保存的增益,以及(如果仍可用的话)已保存的设备,应用到 PlayerComponent。返回 true 仅当已解析并选择了已保存的设备时。
OnMicrophoneSettingsChanged (显示名称 麦克风设置已更改)
BlueprintAssignable 事件
NewSettings(FConvaiMicrophoneSettings)
—
每当 SaveMicrophoneSettings 在子系统上运行时广播。
FConvaiMicrophoneSettings
FConvaiMicrophoneSettings (BlueprintType, 类别 = "Convai|Microphone")是一个结构体 UConvaiMicrophoneSubsystem 会持久化。
InputDeviceName
FString
""
为空表示系统默认设备。否则为 DeviceName 来自以下项的值: UConvaiPlayerComponent::GetAvailableCaptureDeviceNames.
InputGain
float
1.0
作用于麦克风输入增益的倍增系数。 1.0 保持不变;编辑器 UI 会将该字段限制在 0.0–2.0 范围内。
ConvaiAudioCaptureComponent
UConvaiAudioCaptureComponent (C++ 类, ClassGroup = Synth)继承 USynthComponent 并封装 FConvaiAudioCaptureSynth,而后者又封装了 Unreal FAudioCapture 对象。 UConvaiPlayerComponent 会自动创建并持有一个实例;你无需手动将 UConvaiAudioCaptureComponent 添加到你的 Actor 中。
该组件声明了一个 Convai 特有的可由蓝图配置的属性;继承的 USynthComponent 属性同样适用。
JitterLatencyFrames
int32
延迟
ClampMin = 0, ClampMax = 1024
为人为抖动缓冲声明的延迟设置。在当前插件源码中,Convai 采集实现不会读取此属性,因此更改它没有经过验证的运行时效果。
大多数设备枚举和设备切换行为都通过 UConvaiPlayerComponent ——上面列出的蓝图函数会委托到底层的 UConvaiAudioCaptureComponent 在内部,除了 GetDefaultCaptureDeviceInfo 玩家组件上的该方法,它目前不会转发到采集组件。
在 C++ 层, UConvaiAudioCaptureComponent::GetDefaultCaptureDeviceInfo 确实会填充系统默认设备。该方法未暴露给蓝图。该组件的其他设备方法(GetCaptureDevicesAvailable, GetCaptureDeviceInfo, GetActiveCaptureDevice, SetCaptureDevice)也都属于 C++ 内部实现。
插件依赖
这两个依赖都在 ConvAI.uplugin 中声明,并会在安装 Convai 插件时自动启用。无需手动激活插件。
AudioCapture
true
Unreal Engine 内置插件,提供 FAudioCapture 和 USynthComponent-based 采集。Win64 和 Android 上所有麦克风输入都需要它。
AndroidPermission
true
Unreal Engine 内置插件,提供用于检查和请求 Android 运行时权限的蓝图节点。Android 上的麦克风访问需要它。
Android 麦克风权限
在 Android 上,操作系统要求为音频采集授予运行时权限。没有它, UConvaiAudioCaptureComponent 会初始化但不会捕获任何音频——Convai 角色收不到语音输入。插件不会记录权限被拒绝的消息,不过流打开失败仍可能产生采集警告。
请求 android.permission.RECORD_AUDIO 在调用 StartSession 或 UnmuteStreamingAudio之前。若权限被拒绝,音频采集会静默地产生空数据。
请使用 AndroidPermission 蓝图节点来请求该权限:
调用
检查 Android 权限使用该权限字符串android.permission.RECORD_AUDIO.如果返回值是
false,则调用请求 Android 权限针对同一字符串。绑定到
权限请求完成时委托,并在确认已授予权限后再开始对话。
该 AndroidPermission 插件节点位于 Android Permission 蓝图类别中。它们在 Win64 上不起作用——同一蓝图图表无需平台分支即可在两个平台上工作。
相关参考
玩家组件页面涵盖完整的属性集;操作指南页面则逐步讲解在发布前选择和测试设备。
最后更新于
这有帮助吗?