將音訊品質增強功能新增至音訊通話體驗

Azure 通訊服務 音訊效果噪音抑制功能可藉由篩選掉不必要的背景雜訊來改善音訊呼叫。 噪音抑制 是一種技術,可移除音訊通話的背景雜訊。 它藉由消除背景噪音,讓音訊通話更清晰且更好,讓您更容易說話和聆聽。 噪音抑制也可以減少干擾和疲勞造成的嘈雜地方。 例如,如果您在咖啡店中接聽 Azure 通訊服務 WebJS 通話,並產生相當大的噪音,則開啟噪音抑制可能會讓通話體驗變得更好。

重要

本文所述的功能目前處於公開預覽狀態。 此預覽版本沒有服務等級協定,不建議用於處理生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

使用音訊效果 - 噪音抑制

安裝 npm 套件

npm install使用 命令來安裝 Azure 通訊服務 Audio Effects SDK for JavaScript。

重要

本教學課程使用 Azure 通訊服務 呼叫 SDK 版本(或更新版本),以及 Azure 通訊服務 呼叫音訊效果 SDK 版本1.24.2-beta.1大於或等於1.1.1-beta.1(或更新版本)。

@azure/communication-calling-effects@1.1.1-beta

注意

通話效果無法獨立使用,必須與 WebJS 的 Azure 通訊通話用戶端程式庫 (https://www.npmjs.com/package/@azure/communication-calling) 搭配使用才能運作。

您可以在呼叫效果 npm 套件頁面上找到更多 詳細數據

注意

目前瀏覽器支援新增音訊噪音抑制效果,僅適用於 Chrome 和 Edge 桌面瀏覽器。

您可以瞭解呼叫 API 的詳細資料。

若要在 noise suppression Azure 通訊通話 SDK 中使用音訊效果,您需要 LocalAudioStream 目前在通話中的 。 您需要存取 AudioEffectsLocalAudioStream API,才能啟動和停止音訊效果。

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

// Get the 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(SDK.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 傳回具有目前作用中效果名稱的物件。

// Using the audio effects feature api
const currentActiveEffects = audioEffectsFeatureApi.activeEffects;

啟動已啟用雜訊抑制的呼叫

若要啟動已開啟雜訊抑制的呼叫,您可以使用 來建立新的 AudioDeviceInfoLocalAudioStream (LocalAudioStream 來源不應該是使用音訊效果的原始MediaStream來源),並將它CallStartOptions.audioOptions傳入 :

// As an example, here we are simply creating a LocalAudioStream using the current selected mic on the DeviceManager
const audioDevice = deviceManager.selectedMicrophone;
const localAudioStreamWithEffects = new SDK.LocalAudioStream(audioDevice);
const audioEffectsFeatureApi = localAudioStreamWithEffects.feature(SDK.Features.AudioEffects);

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

// Pass the 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();

// Its recommened to check support for the effect in the current environment 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 browser environment');
}

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

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

瞭解如何使用呼叫原生 SDK 來設定音訊篩選器。

Azure 通訊服務 音訊效果提供可改善音訊通話的篩選條件。 針對原生平臺(Android、iOS 和 Windows),您可以設定下列篩選:

回音消除

它可消除由來電者從喇叭發出後回音回音所造成的聲音回音,以確保清楚的通訊。

您可以在呼叫之前和期間設定篩選。 只有在音樂模式啟用時,才能切換回音消除。 根據預設,會 啟用此篩選。

雜訊抑制

改善音訊品質,以篩選掉不必要的背景噪音,例如輸入、空調或街道音效。 這項技術可確保聲音清晰明朗,促進更有效的溝通。

您可以在呼叫之前和期間設定篩選。 目前可用的模式為 OffAutoLowHigh。 根據預設,此功能會設定為 High 模式

自動增益控制 (AGC)

自動調整麥克風音量,以確保整個通話的音訊層級一致。

  • 類比自動增益控件是只能在呼叫之前使用的篩選條件。 根據預設,會 啟用此篩選。
  • 數字自動增益控件是只能在呼叫之前使用的篩選條件。 根據預設,會 啟用此篩選。

音樂模式

音樂模式是通話之前和通話期間可用的篩選。 在這裡深入了解音樂模式。 音樂模式僅適用於原生平台超過 1n1 或群組通話,且無法在原生和 Web 之間的 1:1 呼叫中運作。 根據預設,音樂模式會 停用

必要條件

安裝 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 執行個體,您必須在 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();

音訊篩選功能可讓您將不同的音訊前置處理選項套用至傳出音訊。 音訊篩選器有兩種類型: 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),您可以設定下列篩選:

回音消除

它可消除由來電者從喇叭發出後回音回音所造成的聲音回音,以確保清楚的通訊。

您可以在呼叫之前和期間設定篩選。 只有在音樂模式啟用時,才能切換回音消除。 根據預設,會 啟用此篩選。

雜訊抑制

改善音訊品質,以篩選掉不必要的背景噪音,例如輸入、空調或街道音效。 這項技術可確保聲音清晰明朗,促進更有效的溝通。

您可以在呼叫之前和期間設定篩選。 目前可用的模式為 OffAutoLowHigh。 根據預設,此功能會設定為 High 模式

自動增益控制 (AGC)

自動調整麥克風音量,以確保整個通話的音訊層級一致。

  • 類比自動增益控件是只能在呼叫之前使用的篩選條件。 根據預設,會 啟用此篩選。
  • 數字自動增益控件是只能在呼叫之前使用的篩選條件。 根據預設,會 啟用此篩選。

音樂模式

音樂模式是通話之前和通話期間可用的篩選。 在這裡深入了解音樂模式。 音樂模式僅適用於原生平台超過 1n1 或群組通話,且無法在原生和 Web 之間的 1:1 呼叫中運作。 根據預設,音樂模式會 停用

必要條件

設定系統

建立 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

若要從 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")
        }
})

音訊篩選功能可讓您將不同的音訊前置處理選項套用至傳出音訊。 音訊篩選器有兩種類型: 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),您可以設定下列篩選:

回音消除

它可消除由來電者從喇叭發出後回音回音所造成的聲音回音,以確保清楚的通訊。

您可以在呼叫之前和期間設定篩選。 只有在音樂模式啟用時,才能切換回音消除。 根據預設,會 啟用此篩選。

雜訊抑制

改善音訊品質,以篩選掉不必要的背景噪音,例如輸入、空調或街道音效。 這項技術可確保聲音清晰明朗,促進更有效的溝通。

您可以在呼叫之前和期間設定篩選。 目前可用的模式為 OffAutoLowHigh。 根據預設,此功能會設定為 High 模式

自動增益控制 (AGC)

自動調整麥克風音量,以確保整個通話的音訊層級一致。

  • 類比自動增益控件是只能在呼叫之前使用的篩選條件。 根據預設,會 啟用此篩選。
  • 數字自動增益控件是只能在呼叫之前使用的篩選條件。 根據預設,會 啟用此篩選。

音樂模式

音樂模式是通話之前和通話期間可用的篩選。 在這裡深入了解音樂模式。 音樂模式僅適用於原生平台超過 1n1 或群組通話,且無法在原生和 Web 之間的 1:1 呼叫中運作。 根據預設,音樂模式會 停用

必要條件

設定系統

建立 Visual Studio 專案

針對 UWP 應用程式,在 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 套件:

  1. 藉由選取 [工具]>[NuGet 套件管理員]>[管理解決方案的 NuGet 套件],開啟 NuGet 套件管理員。
  2. 選取 [瀏覽],然後在搜尋方塊中輸入 Azure.Communication.Calling.WindowsClient
  3. 確定已選取 [包含發行前版本] 核取方塊。
  4. 選取 Azure.Communication.Calling.WindowsClient 套件,然後選取 Azure.Communication.Calling.WindowsClient1.4.0-beta.1 或更新版本。
  5. 選取與右側索引標籤上的「通訊服務」專案相對應的核取方塊。
  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;