為音訊通話體驗新增音訊品質增強功能
Azure 通訊服務音訊效果噪音抑制功能可過濾掉不想要的背景雜訊,從而改善音訊通話。 噪音抑制這種技術可移除音訊通話的背景雜訊, 消除背景噪音可讓您更輕鬆地交談和聆聽。 噪音抑制也可以減少嘈雜場所造成的干擾和疲勞。 例如,如果您要在嘈雜的咖啡店中接聽 Azure 通訊服務 WebJS 通話,開啟噪音抑制可能會讓通話體驗變得更好。
使用音訊效果:安裝呼叫效果 npm 套件
重要
本教學課程採用 Azure 通訊服務呼叫 SDK 版本或更新版本1.28.4
,以及 Azure 通訊服務 呼叫效果 SDK 版本或更新版本1.1.2
。 正式運作 (GA) 穩定版本和更新版本的 1.28.4
通話 SDK 支援雜訊抑制功能。 或者,如果您選擇使用公開預覽版本,呼叫 SDK 版本和更新版本 1.24.2-beta.1
也支援抑制雜訊。
目前瀏覽器支援新增音訊噪音抑制效果,僅適用於 Chrome 和 Edge 桌面瀏覽器。
呼叫效果連結庫無法獨立使用。 它只適用於搭配用於 WebJS 的 Azure 通訊服務 呼叫用戶端連結庫時。
使用 npm install
命令,以安裝適用於 JavaScript 的 Azure 通訊服務音訊效果 SDK。
如果您使用呼叫 SDK 的 GA 版本,則必須使用 呼叫效果 SDK 的 GA 版本 。
@azure/communication-calling-effects/v/latest
如果您使用通話 SDK 的公開預覽版,則必須使用 呼叫效果 SDK 的 Beta 版本 。
@azure/communication-calling-effects/v/next
載入雜訊抑制效果連結庫
如需詳細數據音訊效果屬性和方法之介面的資訊,請參閱 音訊效果功能介面 API 檔頁面。
若要在 Azure 通訊服務 呼叫 SDK 中使用噪音抑制音訊效果,您需要LocalAudioStream
目前在通話中的屬性。 您需要存取 AudioEffects
屬性的 LocalAudioStream
API,才能啟動和停止音訊效果。
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}`);
});
檢查作用中的音訊效果
若要檢查目前作用中的雜訊抑制效果,您可以使用 activeEffects
屬性。
activeEffects
屬性會傳回包含目前作用中效果名稱的物件。
// Use the audio effects feature API.
const currentActiveEffects = audioEffectsFeatureApi.activeEffects;
// Create the noise suppression instance.
const deepNoiseSuppression = new DeepNoiseSuppressionEffect();
// We recommend that you check support for the effect in the current environment by using the isSupported API
// method. Remember that noise supression is only supported on desktop browsers for Chrome and Edge.
const isDeepNoiseSuppressionSupported = await audioEffectsFeatureApi.isSupported(deepNoiseSuppression);
if (isDeepNoiseSuppressionSupported) {
console.log('Noise supression is supported in local 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
});
自動啟用雜訊抑制的呼叫
您可以啟動已開啟雜訊抑制的通話。 使用 建立新的LocalAudioStream
屬性(來源不應該是使用音訊效果的原始MediaStream
屬性),並將它CallStartOptions.audioOptions
傳入 : LocalAudioStream
AudioDeviceInfo
// As an example, here we're simply creating LocalAudioStream by using the current selected mic on DeviceManager.
const audioDevice = deviceManager.selectedMicrophone;
const localAudioStreamWithEffects = new AzureCommunicationCallingSDK.LocalAudioStream(audioDevice);
const audioEffectsFeatureApi = localAudioStreamWithEffects.feature(AzureCommunicationCallingSDK.Features.AudioEffects);
// Start effect
await audioEffectsFeatureApi.startEffects({
noiseSuppression: deepNoiseSuppression
});
// Pass LocalAudioStream in audioOptions in call start/accept options.
await call.startCall({
audioOptions: {
muted: false,
localAudioStreams: [localAudioStreamWithEffects]
}
});
在進行中的通話期間開啟雜訊抑制
您可以啟動通話,且未開啟雜訊抑制。 環境可能會變得嘈雜,因此您需要開啟噪音抑制。 若要開啟雜訊抑制,您可以使用 audioEffectsFeatureApi.startEffects
API。
// Create the noise supression 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 supression is only supported on desktop browsers for Chrome and Edge.
const isDeepNoiseSuppressionSupported = await audioEffectsFeatureApi.isSupported(deepNoiseSuppression);
if (isDeepNoiseSuppressionSupported) {
console.log('Noise supression 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
});
相關內容
瞭解如何使用原生通話 SDK 設定音訊篩選器
Azure 通訊服務音訊效果提供的過濾器可改善音訊通話。 針對原生平臺 (Android、iOS 和 Windows),您可以設定下列篩選器。
回音消除
您可以在從喇叭發出聲音之後,消除由來電者的聲音回音回音所造成的聲場迴音。 回應取消可確保清楚的通訊。
您可以在呼叫之前和進行期間設定過濾。 只有在啟用音樂模式時,才可以切換回音取消。 此過濾器預設為啟用。
雜訊抑制
您可以篩選掉不必要的背景噪音,例如輸入、空調或街道音效,以改善音訊品質。 這項技術可確保語音清晰明朗,以利於更有效率的溝通。
您可以在呼叫之前和進行期間設定過濾。 目前可用的模式為 [關閉]、[自動]、[低] 和 [高]。 根據預設,此功能會設定為 [高]。
自動增益控制
您可以自動調整麥克風的音量,以確保整個通話的音訊層級一致。
- 類比自動增益控件是只能在呼叫之前使用的篩選。 此過濾器預設為啟用。
- 數字自動增益控件是只能在呼叫之前使用的篩選。 此過濾器預設為啟用。
音樂模式
音樂模式是通話之前和期間可用的篩選。 若要深入瞭解音樂模式,請參閱 原生通話 SDK 上的音樂模式。 音樂模式只能在原生平臺上透過一對一或群組通話運作。 它無法在原生平臺與 Web 之間的一對一呼叫中運作。 音樂模式依預設為停用。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- 已部署的 Azure 通訊服務資源。 建立 Azure 通訊服務資源。
- 用來啟用呼叫用戶端的使用者存取權杖。 如需詳細資訊,請參閱建立和管理存取權杖。
- 選擇性:完成快速入門,將 語音通話新增至您的應用程式。
安裝 SDK
找出您的項目層級build.gradle
檔案,並將 新增mavenCentral()
至 和allprojects
下的buildscript
存放庫清單:
buildscript {
repositories {
...
mavenCentral()
...
}
}
allprojects {
repositories {
...
mavenCentral()
...
}
}
然後,在您的模組層級 build.gradle
檔案中,將下列幾行新增至 dependencies
區段:
dependencies {
...
implementation 'com.azure.android:azure-communication-calling:1.0.0'
...
}
初始化必要的物件
若要建立 CallAgent
執行個體,您必須在 CallClient
執行個體上呼叫 createCallAgent
方法。 此呼叫會以非同步方式傳回 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();
您可以使用音訊篩選功能,將不同的音訊前置處理選項套用至傳出音訊。 這兩種類型的音訊篩選器是 OutgoingAudioFilters
和 LiveOutgoingAudioFilters
。 用於 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 之間的一對一呼叫中運作。 音樂模式依預設為停用。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- 已部署的 Azure 通訊服務資源。 建立 Azure 通訊服務資源。
- 用來啟用呼叫用戶端的使用者存取權杖。 如需詳細資訊,請參閱建立和管理存取權杖。
- 選擇性:完成快速入門,將 語音通話新增至您的應用程式。
設定系統
請遵循下列步驟來設定系統。
建立 Xcode 專案
在 Xcode 中建立新的 iOS 專案,並選取 [單一檢視應用程式] 範本。 本文使用 SwiftUI 架構,因此您應該將 Language 設定為 Swift,並將 Interface 設定為 SwiftUI。
您不會在本文中建立測試。 您可以隨意清除 [包含測試] 核取方塊。
使用 CocoaPods 安裝套件和相依性
為您的應用程式建立 Podfile,如以下範例所示:
platform :ios, '13.0' use_frameworks! target 'AzureCommunicationCallingSample' do pod 'AzureCommunicationCalling', '~> 1.0.0' end
執行
pod install
。使用 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
若要從 CallClient
建立 CallAgent
執行個體,您必須使用 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")
}
})
您可以使用音訊篩選功能,將不同的音訊前置處理選項套用至傳出音訊。 這兩種類型的音訊篩選器是 OutgoingAudioFilters
和 LiveOutgoingAudioFilters
。 用於 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 之間的一對一呼叫中運作。 音樂模式依預設為停用。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- 已部署的 Azure 通訊服務資源。 建立 Azure 通訊服務資源。
- 用來啟用呼叫用戶端的使用者存取權杖。 如需詳細資訊,請參閱建立和管理存取權杖。
- 選擇性:完成快速入門,將 語音通話新增至您的應用程式。
設定系統
請遵循下列步驟來設定系統。
建立 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 套件管理員來安裝套件和相依性
通話 SDK API 和程式庫可透過 NuGet 套件公開取得。
若要尋找、下載並安裝呼叫 SDK NuGet 套件:
- 藉由選取 [工具]>[NuGet 套件管理員]>[管理解決方案的 NuGet 套件],開啟 NuGet 套件管理員。
- 選取 [ 瀏覽],然後在搜尋方塊中輸入 Azure.Communication.Calling.WindowsClient 。
- 請確定 已選取 [包含發行前版本 ] 複選框。
- 選取 Azure.Communication.Calling.WindowsClient 套件,然後選取 [Azure.Communication.Calling.WindowsClient 1.4.0-beta.1] 或更新版本。
- 選取對應至右窗格中 Azure 通訊服務 項目的複選框。
- 選取 [安裝]。
您可以使用音訊篩選功能,將不同的音訊前置處理套用至傳出音訊。 這兩種類型的音訊篩選器是 OutgoingAudioFilters
和 LiveOutgoingAudioFilters
。 用於 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;