你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

启用音频噪音抑制改进

本文介绍如何使用 Azure 通信服务在通话中添加音频效果。

Azure 通信服务音频效果功能可以通过筛选掉不需要的背景噪音和消除回声来显著增强音频呼叫。 干扰抑制的工作原理是识别和消除交通、键入或聊天等干扰声音,使对话更加清晰、更易于关注。 同时,回声删除可确保语音在通话期间不会反弹,减少反馈并防止中断。 这些技术不仅提高了语音清晰度,而且减少了侦听器疲劳,尤其是在干扰环境中。 例如,如果在繁忙的咖啡店进行 Azure 通信服务 WebJS 呼叫,则启用这些音频效果可以创建更流畅、更集中的通信体验。

🎧 什么是音频效果?

ACS 中的音频效果是呼叫期间应用于麦克风输入的实时增强功能。 Azure 通信服务音频效果包具有多种功能,可以从通话中删除不需要的声音(从客户端的角度来看)。

噪音抑制 (有时称为降噪)侧重于消除不需要的背景声音。 想象打字的声音、风扇嗡嗡声、远处的对话或街道噪音。 它的工作是隔离你的声音,以便任何正在倾听的人听到你更清晰,并减少或删除分散注意力的背景声音。 它使用经过训练的算法来识别语音和环境噪音之间的差异,然后实时减少或删除该噪音。 这些噪音可以被视为不是人类声音的声音。 噪声抑制所实现的关键特征:

  • 删除连续或可预测的背景噪音。
  • 提高语音清晰度。
  • 通常在发送音频之前在扬声器端处理。

当麦克风从扬声器拾取音频时,回声取消会消除回声。 例如,当某人在使用扬声器时,他们的麦克风会从自己的扬声器接收你的语音,这个声音会作为回声回传给你。 回声消除预测并减去这种返回的声音,这样你就不会在不到一秒钟后听到自己的声音。 回声消除的关键特征

  • 减少声学反馈。
  • 在开放式麦克风和桌面设置中,麦克风从本地扬声器拾取音频输出是至关重要的。
  • 减少因听到返回的自己的声音而产生的听者疲劳和混乱。

使用音频效果 - 安装通话效果 npm 包

重要说明

干扰抑制 功能在 GA WebJS SDK 版本 1.28.4 或更高版本中提供,以及 Azure 通信服务通话效果 SDK 版本 GA 1.1.2 或更高版本。 或者,如果选择使用公共预览版,则通话 SDK 版本 1.24.2-beta.1 及更高版本也支持噪音抑制功能。

重要说明

回显取消 功能在 GA WebJS SDK 1.38.1 或更高版本中可用。 另请注意,若要使用回声取消,必须使用音频效果 SDK 版本 GA 版本 1.31.1 或更高版本。 或者,如果选择使用公共预览版,则通话 SDK 版本 1.38.1-beta.1 及更高版本也支持噪音抑制功能。

注释

  • 利用音频效果仅在 Chrome 和 Edge 桌面浏览器中可用。
  • 音频效果库不是独立模块,无法独立运行。 若要利用其功能,效果包必须与用于 WebJS 的 Azure 通信服务呼叫客户端库集成。
  • 如果使用通话 SDK 的 GA 版本,则必须使用通话音频效果包的 GA 版本
  • 如果使用通话 SDK 的公共预览版,则必须使用通话音频效果包的公共预览版。

安装音频效果包

使用 npm install 命令安装适用于 JavaScript 的 Azure 通信服务音频效果 SDK。

@azure/communication-calling-effects/v/latest

如果使用通话 SDK 的公共预览版 ,则必须使用通话效果 SDK 的 beta 版本 。 使用 npm install 命令安装适用于 JavaScript 的 Azure 通信服务音频效果 SDK。

@azure/communication-calling-effects/v/next

启用要使用的音频效果

下面是 AudioEffects 接口的树状表示形式:

AudioEffectsFeature
├── Properties
│   ├── activeEffects: ActiveAudioEffects (read-only)
│   └── name: string (inherited from AudioStreamFeature)
│
├── Methods
│   ├── isSupported(effect: "BrowserNoiseSuppression" | DeepNoiseSuppressionEffect): Promise<boolean>
│   ├── startEffects(config: AudioEffectsStartConfig): Promise<void>
│   ├── stopEffects(config: AudioEffectsStopConfig): Promise<void>
│   ├── on(event: "effectsStarted" | "effectsStopped" | "effectsError", listener: AudioEffectsFeatureListener): void
│   └── off(event: "effectsStarted" | "effectsStopped" | "effectsError", listener: AudioEffectsFeatureListener): void
│
└── Inherited Methods (from AudioStreamFeature)
    └── dispose(): void

位置

  • activeEffects 提供当前正在运行的音频效果。
  • isSupported 检查当前环境中是否提供了特定效果。
  • startEffectsstopEffects 控制效果的激活(噪音抑制,回声取消)
  • on / off 允许订阅/取消订阅事件

有关详细信息音频效果属性和方法的接口的详细信息,请参阅 “音频效果功能”接口 API 文档页。

初始化音频效果功能

若要在 Azure 通信服务呼叫 SDK 中使用音频效果,需要 LocalAudioStream 当前在通话中的属性。 要启动和停止音频效果,需要访问 AudioEffects 属性的 LocalAudioStream API。

启用干扰抑制

以下代码片段演示了如何从 WebJS 环境中启用 干扰抑制 的示例。

import * as AzureCommunicationCallingSDK from '@azure/communication-calling'; 
import { DeepNoiseSuppressionEffect } from '@azure/communication-calling-effects'; 

// Get LocalAudioStream from the localAudioStream collection on the call object.
// 'call' here represents the call object.
const localAudioStreamInCall = call.localAudioStreams[0];

// Get the audio effects feature API from LocalAudioStream
const audioEffectsFeatureApi = localAudioStreamInCall.feature(AzureCommunicationCallingSDK.Features.AudioEffects);

// Subscribe to useful events that show audio effects status
audioEffectsFeatureApi.on('effectsStarted', (activeEffects: ActiveAudioEffects) => {
    console.log(`Current status audio effects: ${activeEffects}`);
});


audioEffectsFeatureApi.on('effectsStopped', (activeEffects: ActiveAudioEffects) => {
    console.log(`Current status audio effects: ${activeEffects}`);
});

audioEffectsFeatureApi.on('effectsError', (error: AudioEffectErrorPayload) => {
    console.log(`Error with audio effects: ${error.message}`);
});

// Start Communication Services Noise Suppression
await audioEffectsFeatureApi.startEffects({
    noiseSuppression: deepNoiseSuppression
});

启用回声消除

以下代码片段演示了如何从 WebJS 环境中启用 回显取消 的示例。

import * as AzureCommunicationCallingSDK from '@azure/communication-calling'; 
import { EchoCancellationEffect } from '@azure/communication-calling-effects';

// Create the noise suppression instance 
const echoCancellationEffect = new EchoCancellationEffect();

// Get LocalAudioStream from the localAudioStream collection on the call object
// 'call' here represents the call object.
const localAudioStreamInCall = call.localAudioStreams[0];

// Get the audio effects feature API from LocalAudioStream
const audioEffectsFeatureApi = localAudioStreamInCall.feature(AzureCommunicationCallingSDK.Features.AudioEffects);

// Start Communication Services echo cancellation
await audioEffectsFeatureApi.startEffects({
    echoCancellation: echoCancellationEffect
}); 

验证当前浏览器环境是否支持音频效果

建议使用 isSupported 功能 API 上的方法检查对当前浏览器环境中的效果的支持。 请记住,仅 Chrome 和 Edge 桌面浏览器支持音频效果。


const deepNoiseSuppression = new DeepNoiseSuppressionEffect();
const echoCancellationEffect = new EchoCancellationEffect();

const isEchoCancellationSupported = await audioEffectsFeatureApi.isSupported(echoCancellationEffect);
if (isEchoCancellationSupported) {
    console.log('Echo Cancellation is supported in the current browser environment');
}

const isNoiseSuppressionSupported = await audioEffectsFeatureApi.isSupported(deepNoiseSuppression);
if (isNoiseSuppressionSupported) {
    console.log('Noise Suppression is supported in the current browser environment');
}

将其全部组合在一起:加载并启动噪声抑制和回声消除

若要启动启用了噪音抑制回声消除的调用,请使用 LocalAudioStream 创建新的 AudioDeviceInfo 属性。 确保 LocalAudioStream 源未被设置为原始 MediaStream 属性,以支持音频效果。 然后,在开始调用时包括此属性 CallStartOptions.audioOptions

import { EchoCancellationEffect, DeepNoiseSuppressionEffect } from '@azure/communication-calling-effects';

// Create the noise suppression instance 
const deepNoiseSuppression = new DeepNoiseSuppressionEffect();
// Create the noise suppression instance 
const echoCancellationEffect = new EchoCancellationEffect();

// Get LocalAudioStream from the localAudioStream collection on the call object
// 'call' here represents the call object.
const localAudioStreamInCall = call.localAudioStreams[0];

// Get the audio effects feature API from LocalAudioStream
const audioEffectsFeatureApi = localAudioStreamInCall.feature(AzureCommunicationCallingSDK.Features.AudioEffects);

// To start Communication Services Deep Noise Suppression
await audioEffectsFeatureApi.startEffects({
    echoCancellation: echoCancellationEffect,
    noiseSuppression: deepNoiseSuppression
}); 

在持续通话启用噪音抑制

你可能开始呼叫,并且未启用噪音抑制。 最终用户房间可能会变得嘈杂,这样他们就需要打开降噪功能。 若要打开干扰抑制,可以使用 audioEffectsFeatureApi.startEffects 接口。

// Create the noise suppression instance 
const deepNoiseSuppression = new DeepNoiseSuppressionEffect();

// Get LocalAudioStream from the localAudioStream collection on the call object
// 'call' here represents the call object.
const localAudioStreamInCall = call.localAudioStreams[0];

// Get the audio effects feature API from LocalAudioStream
const audioEffectsFeatureApi = localAudioStreamInCall.feature(AzureCommunicationCallingSDK.Features.AudioEffects);

// We recommend that you check support for the effect in the current environment by using the isSupported method on the feature API. Remember that noise suppression is only supported on desktop browsers for Chrome and Edge.
const isDeepNoiseSuppressionSupported = await audioEffectsFeatureApi.isSupported(deepNoiseSuppression);
if (isDeepNoiseSuppressionSupported) {
    console.log('Noise suppression is supported in the current browser environment');
}

// To start Communication Services Deep Noise Suppression
await audioEffectsFeatureApi.startEffects({
    noiseSuppression: deepNoiseSuppression
});

// To stop Communication Services Deep Noise Suppression
await audioEffectsFeatureApi.stopEffects({
    noiseSuppression: true
});

在活动调用期间启动或停止音频效果包

你可能开始呼叫,并且未启用噪音抑制。 最终用户房间可能会变得嘈杂,这样他们就需要打开降噪功能。 要启用噪音抑制,可以使用 audioEffectsFeatureApi.startEffects API。

启动 Azure 通信服务干扰抑制

await audioEffectsFeatureApi.startEffects({
    noiseSuppression: deepNoiseSuppression
});

停止 Azure 通信服务深度噪声抑制

await audioEffectsFeatureApi.stopEffects({
    noiseSuppression: true
});

启动 Azure 通信服务回声消除

await audioEffectsFeatureApi.startEffects({
    noiseSuppression: echoCancellation
});

停止 Azure 通信服务回声消除

await audioEffectsFeatureApi.stopEffects({
    echoCancellation: true
});

检查哪些音频效果处于可用状态

要检查哪些噪音抑制效果目前处于可用状态,可以使用 activeEffects 属性。 activeEffects 属性返回具有当前活动效果名称的对象。 有关接口的更多详细信息,请参阅activeEffects

import { EchoCancellationEffect, DeepNoiseSuppressionEffect } from '@azure/communication-calling-effects';
// Get LocalAudioStream from the localAudioStream collection on the call object.
// 'call' here represents the call object.
const localAudioStreamInCall = call.localAudioStreams[0];

// Get the audio effects feature API from LocalAudioStream
const audioEffectsFeatureApi = localAudioStreamInCall.feature(AzureCommunicationCallingSDK.Features.AudioEffects);

// Get the current active effects
const activeAudioEffects = audioEffectsFeatureApi.activeEffects;

if (activeAudioEffects.noiseSuppression === 'DeepNoiseSuppression') {
    // Deep Noise Suppression is currently active
}
if (activeAudioEffects.echoCancellation === 'EchoCancellation') {
    // Echo Cancellation is currently active
}
;

最佳做法

Azure 通信服务 WebJS 音频效果包提供用于减少不需要的声音的工具。 可以采取其他措施提高音频质量,例如:

  • 鼓励最终用户考虑使用耳机,以最大程度减少对回声消除的需求。
  • 启用噪音抑制功能以适应共享或开放的工作环境。
  • 将干扰抑制设置为默认选项(即当用户启动呼叫时激活音频效果)。 如果在呼叫开始时自动启用此功能,用户无需手动激活此功能。 默认情况下启用干扰抑制和回声取消可能有助于缓解通话期间的音频问题。
  • 在不同环境中测试音频效果,以优化最终用户体验。

有关扩展 API 功能的详细信息,请参阅音频效果功能界面文档页面。

使用本机通话 SDK 配置音频筛选器

Azure 通信服务音频效果提供可改善音频呼叫的筛选器。 对于本机平台(Android、iOS 和 Windows),可以配置以下筛选器。

回声消除

你可以消除由于呼叫者的声音从扬声器输出后反射回麦克风而引起的声学回声。 回响消除可确保清晰的通信。

你可以在通话前或通话期间配置过滤器。 只有在启用音乐模式的情况下,才能切换回响消除。 默认情况下会启用此筛选器。

噪声抑制

可以通过筛选掉不需要的背景噪音(如打字声、空调声或街道噪声)来提供音频质量。 这项技术可确保语音清晰明朗,以促进更有效的沟通。

你可以在通话前或通话期间配置过滤器。 当前可用的模式包括“关”、“自动”、“低”和“高”。 默认情况下,此功能设置为“高”

自动增益控制

可以自动调整麦克风音量,以确保在整个通话中保持一致的音频级别。

  • 模拟自动增益控制是仅在进行通话之前可用的筛选器。 默认情况下会启用此筛选器。
  • 数字自动增益控制是仅在进行通话之前可用的筛选器。 默认情况下会启用此筛选器。

音乐模式

音乐模式是在通话前和通话期间均可使用的筛选器。 要了解有关音乐模式的详细信息,请参阅本机通话 SDK 上的音乐模式。 音乐模式仅适用于本机平台上的一对一通话或群组通话。 它在本机平台和 Web 之间的一对一通话中不起作用。 默认情况下会禁用音乐模式。

Prerequisites

安装 SDK

找到项目级 build.gradle 文件,并将 mavenCentral() 添加到 buildscriptallprojects 下的存储库列表中:

buildscript {
    repositories {
    ...
        mavenCentral()
    ...
    }
}
allprojects {
    repositories {
    ...
        mavenCentral()
    ...
    }
}

然后,在模块级 build.gradle 文件中,将以下行添加到 dependencies 部分:

dependencies {
    ...
    implementation 'com.azure.android:azure-communication-calling:1.0.0'
    ...
}

初始化所需的对象

若要创建 CallAgent 实例,必须对 createCallAgent 实例调用 CallClient 方法。 此调用将异步返回 CallAgent 实例对象。

createCallAgent 方法采用 CommunicationUserCredential 作为参数来封装访问令牌

若要访问 DeviceManager,必须先创建 callAgent 实例。 然后,可以使用 CallClient.getDeviceManager 方法获取 DeviceManager

String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an activity, for instance
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential).get();
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();

若要为主叫方设置显示名称,请使用以下替代方法:

String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an activity, for instance
CallAgentOptions callAgentOptions = new CallAgentOptions();
callAgentOptions.setDisplayName("Alice Bob");
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential, callAgentOptions).get();

可以使用音频筛选功能对传出音频应用不同的音频预处理选项。 这两种类型的音频筛选器分别是 OutgoingAudioFiltersLiveOutgoingAudioFilters。 使用 OutgoingAudioFilters 在通话开始之前更改设置。 进行通话时,可使用 LiveOutgoingAudioFilters 更改设置。

你首先需要导入通话 SDK 和关联的类:

import com.azure.android.communication.calling.OutgoingAudioOptions;
import com.azure.android.communication.calling.OutgoingAudioFilters;
import com.azure.android.communication.calling.LiveOutgoingAudioFilters;

通话开始前

通话开始时,可以应用 OutgoingAudioFilters

首先创建 OutgoingAudioFilters 属性,然后将其传入 OutgoingAudioOptions 中,如以下代码所示:

OutgoingAudioOptions outgoingAudioOptions = new OutgoingAudioOptions();
OutgoingAudioFilters filters = new OutgoingAudioFilters();
filters.setNoiseSuppressionMode(NoiseSuppressionMode.HIGH);
filters.setAnalogAutomaticGainControlEnabled(true);
filters.setDigitalAutomaticGainControlEnabled(true);
filters.setMusicModeEnabled(true);
filters.setAcousticEchoCancellationEnabled(true); 
outgoingAudioOptions.setAudioFilters(filters);

在呼叫期间

你可以在通话开始后应用 LiveOutgoingAudioFilters。 你可以在通话期间从通话对象中检索此对象。 若要更改 LiveOutgoingAudioFilters 中的设置,请将类中的成员设置为有效值,然后便会应用它们。

在活动通话期间,只能使用 OutgoingAudioFilters 中的一组筛选器。 它们是音乐模式、回声消除和噪音抑制模式。

LiveOutgoingAudioFilters filters = call.getLiveOutgoingAudioFilters();
filters.setMusicModeEnabled(false);
filters.setAcousticEchoCancellationEnabled(false);
filters.setNoiseSuppressionMode(NoiseSuppressionMode.HIGH);

使用本机通话 SDK 配置音频筛选器

Azure 通信服务音频效果提供可改善音频呼叫的筛选器。 对于本机平台(Android、iOS 和 Windows),可以配置以下筛选器。

回声消除

你可以消除由于呼叫者的声音从扬声器输出后反射回麦克风而引起的声学回声。 回响消除可确保清晰的通信。

你可以在通话前或通话期间配置过滤器。 只有在启用音乐模式的情况下,才能切换回响消除。 默认情况下会启用此筛选器。

噪声抑制

可以通过筛选掉不需要的背景噪音(如打字声、空调声或街道噪声)来提供音频质量。 这项技术可确保语音清晰明朗,以促进更有效的沟通。

你可以在通话前或通话期间配置过滤器。 当前可用的模式包括“关”、“自动”、“低”和“高”。 默认情况下,此功能设置为“高”

自动增益控制

可以自动调整麦克风音量,以确保在整个通话中保持一致的音频级别。

  • 模拟自动增益控制是仅在进行通话之前可用的筛选器。 默认情况下会启用此筛选器。
  • 数字自动增益控制是仅在进行通话之前可用的筛选器。 默认情况下会启用此筛选器。

音乐模式

音乐模式是在通话前和通话期间均可使用的筛选器。 要了解有关音乐模式的详细信息,请参阅本机通话 SDK 上的音乐模式。 音乐模式仅适用于本机平台上的一对一通话或群组通话。 它在本机平台和 Web 之间的一对一通话中不起作用。 默认情况下会禁用音乐模式。

Prerequisites

设置系统

若要设置系统,请按照以下步骤操作。

创建 Xcode 项目

在 Xcode 中,创建新的 iOS 项目,并选择“单视图应用”模板。 本文使用 SwiftUI 框架,因此应将“语言”设置为“Swift”,并将“界面”设置为“SwiftUI”

在本文中,无需创建测试。 请随意清除“包括测试”复选框。

显示用于在 Xcode 中创建项目的窗口的屏幕截图。

使用 CocoaPods 安装包和依赖项

  1. 为应用程序创建 Podfile,如此示例所示:

    platform :ios, '13.0'
    use_frameworks!
    target 'AzureCommunicationCallingSample' do
        pod 'AzureCommunicationCalling', '~> 1.0.0'
    end
    
  2. 运行 pod install

  3. 使用 Xcode 打开 .xcworkspace

请求访问麦克风

若要访问设备的麦克风,需要使用 NSMicrophoneUsageDescription 更新应用的信息属性列表。 将关联的值设置为一个字符串,该字符串将包含在系统用于向用户请求访问权限的对话框中。

右键单击项目树的 Info.plist 条目,然后选择“打开为...”“源代码”>。 将以下代码行添加到顶层 <dict> 节,然后保存文件。

<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>

设置应用框架

打开项目的 ContentView.swift 文件。 将 import 声明添加到文件顶部以导入 AzureCommunicationCalling 库。 此外,导入 AVFoundation。 你需要使用它来处理代码中的音频权限请求。

import AzureCommunicationCalling
import AVFoundation

初始化 CallAgent

若要从 CallAgent 创建 CallClient 实例,必须使用 callClient.createCallAgent 方法,该方法在初始化后异步返回 CallAgent 对象。

若要创建通话客户端,请传递 CommunicationTokenCredential 对象:

import AzureCommunication

let tokenString = "token_string"
var userCredential: CommunicationTokenCredential?
do {
    let options = CommunicationTokenRefreshOptions(initialToken: token, refreshProactively: true, tokenRefresher: self.fetchTokenSync)
    userCredential = try CommunicationTokenCredential(withOptions: options)
} catch {
    updates("Couldn't created Credential object", false)
    initializationDispatchGroup!.leave()
    return
}

// tokenProvider needs to be implemented by Contoso, which fetches a new token
public func fetchTokenSync(then onCompletion: TokenRefreshOnCompletion) {
    let newToken = self.tokenProvider!.fetchNewToken()
    onCompletion(newToken, nil)
}

将创建的 CommunicationTokenCredential 对象传递给 CallClient 并设置显示名称:

self.callClient = CallClient()
let callAgentOptions = CallAgentOptions()
options.displayName = " iOS Azure Communication Services User"

self.callClient!.createCallAgent(userCredential: userCredential!,
    options: callAgentOptions) { (callAgent, error) in
        if error == nil {
            print("Create agent succeeded")
            self.callAgent = callAgent
        } else {
            print("Create agent failed")
        }
})

可以使用音频筛选功能对传出音频应用不同的音频预处理选项。 这两种类型的音频筛选器分别是 OutgoingAudioFiltersLiveOutgoingAudioFilters。 使用 OutgoingAudioFilters 在通话开始之前更改设置。 进行通话时,可使用 LiveOutgoingAudioFilters 更改设置。

你首先需要导入通话 SDK:

import AzureCommunicationCalling

通话开始之前

通话开始时,可以应用 OutgoingAudioFilters

首先创建 OutgoingAudioFilters 属性,然后将其传入 OutgoingAudioOptions 中,如下所示:

let outgoingAudioOptions = OutgoingAudioOptions()
let filters = OutgoingAudioFilters()
filters.NoiseSuppressionMode = NoiseSuppressionMode.high
filters.analogAutomaticGainControlEnabled = true
filters.digitalAutomaticGainControlEnabled = true
filters.musicModeEnabled = true
filters.acousticEchoCancellationEnabled = true
outgoingAudioOptions.audioFilters = filters

在呼叫期间

你可以在通话开始后应用 LiveOutgoingAudioFilters。 你可以在通话期间从通话对象中检索此对象。 若要更改 LiveOutgoingAudioFilters 中的设置,请将类中的成员设置为有效值,然后便会应用它们。

在活动通话期间,只能使用 OutgoingAudioFilters 中的一组筛选器。 它们是音乐模式、回声消除和噪音抑制模式。

LiveOutgoingAudioFilters filters = call.liveOutgoingAudioFilters
filters.musicModeEnabled = true
filters.acousticEchoCancellationEnabled = true
filters.NoiseSuppressionMode = NoiseSuppressionMode.high

使用本机通话 SDK 配置音频筛选器

Azure 通信服务音频效果提供可改善音频呼叫的筛选器。 对于本机平台(Android、iOS 和 Windows),可以配置以下筛选器。

回声消除

你可以消除由于呼叫者的声音从扬声器输出后反射回麦克风而引起的声学回声。 回响消除可确保清晰的通信。

你可以在通话前或通话期间配置过滤器。 只有在启用音乐模式的情况下,才能切换回响消除。 默认情况下会启用此筛选器。

噪声抑制

可以通过筛选掉不需要的背景噪音(如打字声、空调声或街道噪声)来提供音频质量。 这项技术可确保语音清晰明朗,以促进更有效的沟通。

你可以在通话前或通话期间配置过滤器。 当前可用的模式包括“关”、“自动”、“低”和“高”。 默认情况下,此功能设置为“高”

自动增益控制

可以自动调整麦克风音量,以确保在整个通话中保持一致的音频级别。

  • 模拟自动增益控制是仅在进行通话之前可用的筛选器。 默认情况下会启用此筛选器。
  • 数字自动增益控制是仅在进行通话之前可用的筛选器。 默认情况下会启用此筛选器。

音乐模式

音乐模式是在通话前和通话期间均可使用的筛选器。 要了解有关音乐模式的详细信息,请参阅本机通话 SDK 上的音乐模式。 音乐模式仅适用于本机平台上的一对一通话或群组通话。 它在本机平台和 Web 之间的一对一通话中不起作用。 默认情况下会禁用音乐模式。

Prerequisites

设置系统

若要设置系统,请按照以下步骤操作。

创建 Visual Studio 项目

对于通用 Windows 平台应用,请在 Visual Studio 2022 中创建新的“空白应用(通用 Windows)”项目。 输入项目名称后,可随意选择任何版本高于 10.0.17763.0 的 Windows SDK。

对于 WinUI 3 应用,请使用“已打包空白应用(桌面中的 WinUI 3)”模板创建新项目,以设置单页 WinUI 3 应用。 需要 Windows App SDK 版本 1.3 或更高版本。

使用 NuGet 包管理器安装包和依赖项

可通过 NuGet 包公开提供通话 SDK API 和库。

要查找、下载和安装通话 SDK NuGet 包,请执行以下操作:

  1. 选择“工具”“NuGet 包管理器”>“管理解决方案的 NuGet 包”,以打开 NuGet 包管理器。>
  2. 选择“浏览”,然后在搜索框中输入 Azure.Communication.Calling.WindowsClient
  3. 确保已选中“包括预发行版”复选框
  4. 选择 Azure.Communication.Calling.WindowsClient 包,然后选择 Azure.Communication.Calling.WindowsClient1.4.0-beta.1 或更新版本。
  5. 在右侧窗格中选中与 Azure 通信服务项目对应的复选框。
  6. 选择“安装”

可以使用音频筛选器功能将不同的音频预处理应用于传出音频。 这两种类型的音频筛选器分别是 OutgoingAudioFiltersLiveOutgoingAudioFilters。 使用 OutgoingAudioFilters 在通话开始之前更改设置。 进行通话时,可使用 LiveOutgoingAudioFilters 更改设置。

你首先需要导入通话 SDK:

using Azure.Communication;
using Azure.Communication.Calling.WindowsClient;

通话开始前

通话开始时,可以应用 OutgoingAudioFilters

首先创建 OutgoingAudioFilters 属性,然后将其传入 OutgoingAudioOptions 中,如以下代码所示:

var outgoingAudioOptions = new OutgoingAudioOptions();
var filters = new OutgoingAudioFilters()
{
    AnalogAutomaticGainControlEnabled = true,
    DigitalAutomaticGainControlEnabled = true,
    MusicModeEnabled = true,
    AcousticEchoCancellationEnabled = true,
    NoiseSuppressionMode = NoiseSuppressionMode.High
};
outgoingAudioOptions.Filters = filters;

在呼叫期间

你可以在通话开始后应用 LiveOutgoingAudioFilters。 你可以在通话开始后从通话对象中检索此对象。 若要更改 LiveOutgoingAudioFilters 中的设置,请将类中的成员设置为有效值,然后便会应用它们。

在活动通话期间,只能使用 OutgoingAudioFilters 中的一组筛选器。 它们是音乐模式、回声消除和噪音抑制模式。

LiveOutgoingAudioFilters filter = call.LiveOutgoingAudioFilters;
filter.MusicModeEnabled = true;
filter.AcousticEchoCancellationEnabled = true;
filter.NoiseSuppressionMode = NoiseSuppressionMode.Auto;