Share via


Adición de mejoras de calidad de audio a la experiencia de llamadas de audio

Las capacidades de supresión de ruido de los efectos de audio de Azure Communication Services pueden mejorar las llamadas de audio filtrando ruidos de fondo no deseados. La supresión de ruido es una tecnología que elimina los ruidos de fondo de las llamadas de audio. Hace que las llamadas de audio sean más claras y mejores al eliminar el ruido de fondo, facilitando el habla y la escucha. La supresión de ruido también reduce las distracciones y el cansancio causados por lugares ruidosos. Por ejemplo, al tomar llamadas de WebJS de Azure Communication Services en una cafetería con ruido considerable, activar la supresión de ruido mejorará la experiencia de las mismas.

Importante

La funcionalidad descrita en este artículo se encuentra actualmente en versión preliminar pública. Esta versión preliminar se ofrece sin un Acuerdo de Nivel de Servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

Uso de efectos de audio: supresión de ruido

Instalación del paquete npm

Use el comando npm install para instalar el SDK de Efectos de audio de Azure Communication Services para JavaScript.

Importante

En este tutorial se usa la versión 1.24.2-beta.1 (o superior) del SDK de llamadas de Azure Communication Services, así como la versión del SDK de Efectos de audio de llamadas de Azure Communication Services mayor o igual que 1.1.1-beta.1 (o superior).

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

Nota:

La biblioteca de efectos para llamadas no se puede usar de forma independiente y solo puede funcionar cuando se usa con la biblioteca cliente de llamadas de Azure Communication para WebJS (https://www.npmjs.com/package/@azure/communication-calling).

Encontrará más detalles en la página del paquete npm de efectos de llamadas.

Nota:

La compatibilidad del explorador actual para agregar efectos de supresión de ruido de audio solo está disponible en los exploradores de escritorio Chrome y Edge.

Obtenga información sobre los detalles de la API de llamadas.

Para usar efectos de audio de noise suppression en el SDK de llamadas de Azure Communication, se necesita el LocalAudioStream que se encuentre actualmente en la llamada. Se necesita acceso a la API de AudioEffects del LocalAudioStream para iniciar y detener efectos de audio.

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}`);
});

En cualquier momento, si quisiera comprobar qué efectos de supresión de ruido están activos en ese momento, use la propiedad activeEffects. La propiedad activeEffects devuelve un objeto con los nombres de los efectos activos actuales.

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

Iniciar una llamada con la supresión de ruido habilitada

Para iniciar llamadas con la supresión de ruido activada, cree un nuevo LocalAudioStream con un AudioDeviceInfo (el origen de LocalAudioStream no debe ser un MediaStream sin procesar para usar efectos de audio) y páselo en el 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]
    }
});

Cómo activar la supresión de ruido durante llamadas en curso

Hay situaciones en las que un usuario podría iniciar una llamada sin tener la supresión de ruido activada, pero el entorno actual podría volverse ruidoso, lo que provocaría la necesidad de activar la supresión de ruido. Para activar la supresión de ruido, use la API de audioEffectsFeatureApi.startEffects.

// 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
});

Obtenga información sobre cómo configurar los filtros de audio con los SDK nativos de llamada.

Los efectos de audio de Azure Communication Services ofrecen filtros que pueden mejorar las llamadas de audio. Para plataformas nativas (Android, iOS y Windows), puede configurar los siguientes filtros:

Cancelación del eco

Elimina el eco acústico causado por el eco de la voz del autor de la llamada de vuelta al micrófono después de emitirse desde el altavoz, lo que garantiza una comunicación clara.

Puede configurar el filtro antes y durante una llamada. Solo se puede alternar la cancelación del eco si el modo de música está habilitado. De manera predeterminada, este filtro está habilitado.

Supresión de ruido

Mejore la calidad del audio filtrando ruidos de fondo no deseados, como sonido de teclas, el aire acondicionado o sonidos de la calle. Esta tecnología garantiza que la voz sea nítida y clara, lo que facilita una comunicación más eficaz.

Puede configurar el filtro antes y durante una llamada. Los modos disponibles actualmente son Off, Auto, Low y High. De manera predeterminada, esta característica está establecida en modo High.

Control automático de ganancia (AGC)

Ajusta automáticamente el volumen del micrófono para garantizar niveles de audio coherentes a lo largo de la llamada.

  • El control analógico de ganancia automática es un filtro disponible únicamente antes de una llamada. De manera predeterminada, este filtro está habilitado.
  • El control digital de ganancia automática es un filtro disponible únicamente antes de una llamada. De manera predeterminada, este filtro está habilitado.

Modo de música

El modo de música es un filtro disponible antes de una llamada y durante la misma. Obtenga más información sobre el modo de música aquí. El modo de música solo funciona en plataformas nativas en 1n1 o llamadas grupales y no funciona en llamadas 1:1 entre plataformas nativas y web. De manera predeterminada, el modo de música está deshabilitado.

Requisitos previos

Instalación del SDK

Busque el archivo build.gradle de nivel de proyecto y agregue mavenCentral() a la lista de repositorios en buildscript y allprojects:

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

A continuación, en el archivo build.gradle de nivel de módulo, agregue las siguientes líneas a la sección dependencies:

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

Inicialización de los objetos necesarios

Para crear una instancia de CallAgent, debe llamar al método createCallAgent en una instancia de CallClient. Esta llamada devuelve un objeto de instancia de CallAgent de manera asincrónica.

El método createCallAgent toma CommunicationUserCredential como argumento, que encapsula un token de acceso.

Para acceder a DeviceManager, primero debe crear una instancia de callAgent. A continuación, puede usar el método CallClient.getDeviceManager para obtener 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();

Para establecer un nombre para mostrar para el autor de la llamada, use este método alternativo:

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();

La característica de filtro de audio permite aplicar diferentes opciones de preprocesamiento de audio al audio saliente. Hay dos tipos de filtros de audio: OutgoingAudioFilters y LiveOutgoingAudioFilters. Use OutgoingAudioFilters para cambiar la configuración antes de que se inicie la llamada y LiveOutgoingAudioFilters para cambiar la configuración mientras una llamada está en curso.

En primer lugar, debe importar el SDK de llamada y las clases asociadas:

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

Antes de que se inicie la llamada

OutgoingAudioFilters se puede aplicar cuando se inicia una llamada.

Para empezar, cree un OutgoingAudioFilters y páselo a OutgoingAudioOptions como se muestra en el código siguiente:

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);

Durante la llamada

Puede aplicar LiveOutgoingAudioFilters después de que se inicie una llamada. Puede recuperar este objeto del objeto de llamada durante la llamada. Para cambiar la configuración de LiveOutgoingAudioFilters, establezca los miembros dentro de la clase en un valor válido y se aplicarán.

Solo hay disponible un subconjunto de los filtros disponibles en OutgoingAudioFilters durante una llamada activa: modo de música, cancelación del eco y modo de supresión del ruido.

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

Obtenga información sobre cómo configurar los filtros de audio con los SDK nativos de llamada.

Los efectos de audio de Azure Communication Services ofrecen filtros que pueden mejorar las llamadas de audio. Para plataformas nativas (Android, iOS y Windows), puede configurar los siguientes filtros:

Cancelación del eco

Elimina el eco acústico causado por el eco de la voz del autor de la llamada de vuelta al micrófono después de emitirse desde el altavoz, lo que garantiza una comunicación clara.

Puede configurar el filtro antes y durante una llamada. Solo se puede alternar la cancelación del eco si el modo de música está habilitado. De manera predeterminada, este filtro está habilitado.

Supresión de ruido

Mejore la calidad del audio filtrando ruidos de fondo no deseados, como sonido de teclas, el aire acondicionado o sonidos de la calle. Esta tecnología garantiza que la voz sea nítida y clara, lo que facilita una comunicación más eficaz.

Puede configurar el filtro antes y durante una llamada. Los modos disponibles actualmente son Off, Auto, Low y High. De manera predeterminada, esta característica está establecida en modo High.

Control automático de ganancia (AGC)

Ajusta automáticamente el volumen del micrófono para garantizar niveles de audio coherentes a lo largo de la llamada.

  • El control analógico de ganancia automática es un filtro disponible únicamente antes de una llamada. De manera predeterminada, este filtro está habilitado.
  • El control digital de ganancia automática es un filtro disponible únicamente antes de una llamada. De manera predeterminada, este filtro está habilitado.

Modo de música

El modo de música es un filtro disponible antes de una llamada y durante la misma. Obtenga más información sobre el modo de música aquí. El modo de música solo funciona en plataformas nativas en 1n1 o llamadas grupales y no funciona en llamadas 1:1 entre plataformas nativas y web. De manera predeterminada, el modo de música está deshabilitado.

Requisitos previos

Configuración del sistema

Creación del proyecto de Xcode

En Xcode, cree un nuevo proyecto de iOS y seleccione la plantilla Aplicación de una vista. En este inicio rápido se usa el marco SwiftUI, por lo que debe establecer el Lenguaje en Swift y establecer la interfaz en SwiftUI.

Durante este inicio rápido, no se van a crear pruebas. Puede desactivar la casilla Incluir pruebas.

Captura de pantalla que muestra la ventana para crear un proyecto en Xcode.

Instalación del paquete y las dependencias mediante CocoaPods

  1. Cree un Podfile para la aplicación, como en este ejemplo:

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

  3. Abra .xcworkspace mediante Xcode.

Solicitud de acceso al micrófono

Para acceder al micrófono del dispositivo, debe actualizar la lista de propiedades de información de la aplicación mediante NSMicrophoneUsageDescription. Establecerá el valor asociado a una cadena que se va a incluir en el cuadro de diálogo que el sistema usa para solicitar acceso al usuario.

Haga clic con el botón derecho en la entrada Info.plist del árbol del proyecto y seleccione Abrir como>Código fuente. Agregue las líneas siguientes a la sección <dict> de nivel superior y guarde el archivo.

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

Instalación del marco de la aplicación

Abra el archivo ContentView.swift del proyecto. Agregue una declaración import a la parte superior del archivo para importar la biblioteca AzureCommunicationCalling. Además, importe AVFoundation. Lo necesitará para las solicitudes de permiso de audio en el código.

import AzureCommunicationCalling
import AVFoundation

Inicialización de CallAgent

Para crear una instancia de CallAgent a partir de CallClient, debe usar el método callClient.createCallAgent, que devuelve de manera asincrónica un objeto CallAgent después de que se inicializa.

Para crear un cliente de llamada, pase un objeto 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)
}

Pase el objeto CommunicationTokenCredential que ha creado a CallClient y establezca el nombre para mostrar:

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")
        }
})

La característica de filtro de audio permite aplicar diferentes opciones de preprocesamiento de audio al audio saliente. Hay dos tipos de filtros de audio: OutgoingAudioFilters y LiveOutgoingAudioFilters. Use OutgoingAudioFilters para cambiar la configuración antes de que se inicie la llamada y LiveOutgoingAudioFilters para cambiar la configuración mientras una llamada está en curso.

En primer lugar, necesita importar el SDK de llamada:

import AzureCommunicationCalling

Antes de que se inicie la llamada

OutgoingAudioFilters se puede aplicar cuando se inicia una llamada.

Para empezar, cree un OutgoingAudioFilters y páselo a OutgoingAudioOptions como se muestra en el código siguiente:

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

Durante la llamada

Puede aplicar LiveOutgoingAudioFilters después de que se inicie una llamada. Puede recuperar este objeto del objeto de llamada durante la llamada. Para cambiar la configuración de LiveOutgoingAudioFilters, establezca los miembros dentro de la clase en un valor válido y se aplicarán.

Solo hay disponible un subconjunto de los filtros disponibles en OutgoingAudioFilters durante una llamada activa: modo de música, cancelación del eco y modo de supresión del ruido.

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

Obtenga información sobre cómo configurar los filtros de audio con los SDK nativos de llamada.

Los efectos de audio de Azure Communication Services ofrecen filtros que pueden mejorar las llamadas de audio. Para plataformas nativas (Android, iOS y Windows), puede configurar los siguientes filtros:

Cancelación del eco

Elimina el eco acústico causado por el eco de la voz del autor de la llamada de vuelta al micrófono después de emitirse desde el altavoz, lo que garantiza una comunicación clara.

Puede configurar el filtro antes y durante una llamada. Solo se puede alternar la cancelación del eco si el modo de música está habilitado. De manera predeterminada, este filtro está habilitado.

Supresión de ruido

Mejore la calidad del audio filtrando ruidos de fondo no deseados, como sonido de teclas, el aire acondicionado o sonidos de la calle. Esta tecnología garantiza que la voz sea nítida y clara, lo que facilita una comunicación más eficaz.

Puede configurar el filtro antes y durante una llamada. Los modos disponibles actualmente son Off, Auto, Low y High. De manera predeterminada, esta característica está establecida en modo High.

Control automático de ganancia (AGC)

Ajusta automáticamente el volumen del micrófono para garantizar niveles de audio coherentes a lo largo de la llamada.

  • El control analógico de ganancia automática es un filtro disponible únicamente antes de una llamada. De manera predeterminada, este filtro está habilitado.
  • El control digital de ganancia automática es un filtro disponible únicamente antes de una llamada. De manera predeterminada, este filtro está habilitado.

Modo de música

El modo de música es un filtro disponible antes de una llamada y durante la misma. Obtenga más información sobre el modo de música aquí. El modo de música solo funciona en plataformas nativas en 1n1 o llamadas grupales y no funciona en llamadas 1:1 entre plataformas nativas y web. De manera predeterminada, el modo de música está deshabilitado.

Requisitos previos

Configuración del sistema

Creación del proyecto de Visual Studio

En el caso de una aplicación para UWP, en Visual Studio 2022, cree un nuevo proyecto de Aplicación vacía (Universal Windows). Después de escribir el nombre del proyecto, puede elegir cualquier Windows SDK posterior a 10.0.17763.0.

En el caso de una aplicación WinUI 3, cree un nuevo proyecto con la plantilla Aplicación vacía, empaquetada (WinUI 3 en escritorio) para configurar una aplicación WinUI 3 de una sola página. Se requiere la versión 1.3 o posterior del SDK de aplicaciones de Windows.

Instalación del paquete y las dependencias mediante el Administrador de paquetes NuGet

Las API y bibliotecas de SDK de llamadas están disponibles públicamente a través de un paquete NuGet.

Los pasos siguientes demuestran cómo encontrar, descargar e instalar el paquete NuGet del SDK de llamada:

  1. Abra el Administrador de paquetes NuGet desde Herramientas>Administrador de paquetes NuGet>Administrar paquetes NuGet para la solución.
  2. Seleccione Examinar y, luego, escriba Azure.Communication.Calling.WindowsClient en el cuadro de búsqueda.
  3. Asegúrese de que la casilla Incluir versión preliminar esté activada.
  4. Seleccione el paquete Azure.Communication.Calling.WindowsClient y, luego, elija Azure.Communication.Calling.WindowsClient1.4.0-beta.1 o una versión más reciente.
  5. Active la casilla correspondiente al proyecto de Communication Services en la pestaña derecha.
  6. Seleccione el botón Instalar.

La característica de filtro de audio le permite aplicar diferentes preprocesamientos de audio al audio saliente. Hay dos tipos de filtros de audio: OutgoingAudioFilters y LiveOutgoingAudioFilters. Use OutgoingAudioFilters para cambiar la configuración antes de que se inicie la llamada y LiveOutgoingAudioFilters para cambiar la configuración mientras una llamada está en curso.

En primer lugar, necesita importar el SDK de llamada:

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

Antes de que se inicie la llamada

OutgoingAudioFilters se puede aplicar cuando se inicia una llamada.

Para empezar, cree un OutgoingAudioFilters y páselo a OutgoingAudioOptions como se muestra en el código siguiente:

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

Durante la llamada

Puede aplicar LiveOutgoingAudioFilters después de que comience una llamada. Puede recuperar este objeto del objeto de llamada una vez que comience la llamada. Para cambiar la configuración de LiveOutgoingAudioFilters, establezca los miembros dentro de la clase en un valor válido y se aplicarán.

Solo hay disponible un subconjunto de los filtros disponibles en OutgoingAudioFilters durante una llamada activa: modo de música, cancelación del eco y modo de supresión del ruido.

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