Snabbstart: Lägga till undertexter i din samtalsapp
Förutsättningar
- Azure-konto med en aktiv prenumeration finns i Skapa ett konto kostnadsfritt.
- Azure Communication Services-resurs. Se Skapa en Azure Communication Services-resurs. Spara anslutningssträng för den här resursen.
- En app med röst- och videosamtal, se våra snabbstarter för röst - och videosamtal .
Kommentar
Observera att du måste ha en röstsamtalsapp med hjälp av Azure Communication Services som anropar SDK:er för att få åtkomst till funktionen för undertexter som beskrivs i den här guiden.
Modeller
Name | beskrivning |
---|---|
CaptionsCallFeature | API för bildtexter |
CaptionsCommon | Basklass för bildtexter |
StartCaptionOptions | Alternativ för dold bildtext som talat språk |
CaptionsHandler | Motringningsdefinition för hantering av captionsReceivedEventType-händelse |
CaptionsInfo | Datastruktur som tas emot för varje CaptionsReceivedEventType-händelse |
Hämta funktionen för undertexter
let captionsCallFeature: SDK.CaptionsCallFeature = call.feature(SDK.Features.Captions);
Hämta undertextobjekt
Du måste hämta och casta objektet Bildtexter för att använda specifika funktioner för bildtexter.
let captions: SDK.Captions;
if (captionsCallFeature.captions.kind === 'Captions') {
captions = captionsCallFeature.captions as SDK.Captions;
}
Prenumerera på lyssnare
Lägg till en lyssnare för att ta emot undertexter som är aktiva/inaktiva
const captionsActiveChangedHandler = () => {
if (captions.isCaptionsFeatureActive) {
/* USER CODE HERE - E.G. RENDER TO DOM */
}
}
captions.on('CaptionsActiveChanged', captionsActiveChangedHandler);
Lägga till en lyssnare för mottagna textningsdata
Hantera det returnerade captionsInfo-dataobjektet.
Obs! Objektet innehåller en resultType-prop som anger om data är en partiell beskrivning eller en slutförd version av bildtexten. ResultType Partial
anger live oredigerad bildtext, medan Final
anger en slutförd tolkad version av meningen (d.v.s. innehåller skiljetecken och versaler).
const captionsReceivedHandler : CaptionsHandler = (data: CaptionsInfo) => {
/** USER CODE HERE - E.G. RENDER TO DOM
* data.resultType
* data.speaker
* data.spokenLanguage
* data.spokenText
* data.timeStamp
*/
// Example code:
// Create a dom element, i.e. div, with id "captionArea" before proceeding with the sample code
let mri: string;
switch (data.speaker.identifier.kind) {
case 'communicationUser': { mri = data.speaker.identifier.communicationUserId; break; }
case 'phoneNumber': { mri = data.speaker.identifier.phoneNumber; break; }
}
const outgoingCaption = `prefix${mri.replace(/:/g, '').replace(/-/g, '')}`;
let captionArea = document.getElementById("captionArea");
const captionText = `${data.timestamp.toUTCString()}
${data.speaker.displayName}: ${data.spokenText}`;
let foundCaptionContainer = captionArea.querySelector(`.${outgoingCaption}[isNotFinal='true']`);
if (!foundCaptionContainer) {
let captionContainer = document.createElement('div');
captionContainer.setAttribute('isNotFinal', 'true');
captionContainer.style['borderBottom'] = '1px solid';
captionContainer.style['whiteSpace'] = 'pre-line';
captionContainer.textContent = captionText;
captionContainer.classList.add(outgoingCaption);
captionArea.appendChild(captionContainer);
} else {
foundCaptionContainer.textContent = captionText;
if (captionData.resultType === 'Final') {
foundCaptionContainer.setAttribute('isNotFinal', 'false');
}
}
};
captions.on('CaptionsReceived', captionsReceivedHandler);
Lägg till en lyssnare för att få ändrat status för talat språk
// set a local variable currentSpokenLanguage to track the current spoken language in the call
let currentSpokenLanguage = ''
const spokenLanguageChangedHandler = () => {
if (captions.activeSpokenLanguage !== currentSpokenLanguage) {
/* USER CODE HERE - E.G. RENDER TO DOM */
}
}
captions.on('SpokenLanguageChanged', spokenLanguageChangedHandler)
Starttexter
När du har konfigurerat alla lyssnare kan du nu börja lägga till bildtexter.
try {
await captions.startCaptions({ spokenLanguage: 'en-us' });
} catch (e) {
/* USER ERROR HANDLING CODE HERE */
}
Stoppa undertexter
try {
captions.stopCaptions();
} catch (e) {
/* USER ERROR HANDLING CODE HERE */
}
Avsluta prenumerationen på lyssnare
captions.off('CaptionsActiveChanged', captionsActiveChangedHandler);
captions.off('CaptionsReceived', captionsReceivedHandler);
Stöd för talat språk
Hämta en lista över talade språk som stöds
Hämta en lista över talade språk som stöds och som användarna kan välja mellan när de aktiverar undertexter. Egenskapen returnerar en matris med språk i bcp 47-format.
const spokenLanguages = captions.supportedSpokenLanguages;
Ange talat språk
Skicka in ett värde från matrisen talade språk som stöds för att säkerställa att det begärda språket stöds. Om contoso inte tillhandahåller något språk eller ett språk som inte stöds är standardspråket "en-us".
// bcp 47 formatted language code
const language = 'en-us';
// Alternatively, pass a value from the supported spoken languages array
const language = spokenLanguages[0];
try {
captions.setSpokenLanguage(language);
} catch (e) {
/* USER ERROR HANDLING CODE HERE */
}
Lägg till en lyssnare för att ta emot textningstypen ändrad status
Typ av bildtexter kan ändras från Bildtexter till TeamsCaptions om en Teams/CTE-användare ansluter till samtalet eller om samtalet ändras till en interop-samtalstyp. Omprenumerationer till teamstextlyssnare krävs för att fortsätta beskrivningsupplevelsen. TeamsCaptions-typen kan inte växlas eller ändras tillbaka till Typ av bildtext i ett samtal när TeamsCaptions används i samtalet.
const captionsKindChangedHandler = () => {
/* USER CODE HERE - E.G. SUBSCRIBE TO TEAMS CAPTIONS */
}
captions.on('CaptionsKindChanged', captionsKindChangedHandler)
Förutsättningar
- Azure-konto med en aktiv prenumeration finns i Skapa ett konto kostnadsfritt.
- Azure Communication Services-resurs. Se Skapa en Azure Communication Services-resurs. Spara anslutningssträng för den här resursen.
- En app med röst- och videosamtal, se våra snabbstarter för röst - och videosamtal .
Kommentar
Observera att du måste ha en röstsamtalsapp med hjälp av Azure Communication Services som anropar SDK:er för att få åtkomst till funktionen för undertexter som beskrivs i den här guiden.
Modeller
Name | beskrivning |
---|---|
CaptionsCallFeature | API för anropsfunktion för undertexter |
CommunicationCaptions | API för kommunikationstexter |
StartCaptionOptions | Alternativ för dold bildtext som talat språk |
CommunicationCaptionsReceivedEventArgs | Dataobjekt som tagits emot för varje mottagen kommunikationstext |
Hämta funktionen för undertexter
Du måste hämta och casta objektet Bildtexter för att använda specifika funktioner för bildtexter.
CaptionsCallFeature captionsCallFeature = call.Features.Captions;
CallCaptions callCaptions = await captionsCallFeature.GetCaptionsAsync();
if (callCaptions.CaptionsKind == CaptionsKind.CommunicationCaptions)
{
CommunicationCaptions communicationCaptions = callCaptions as CommunicationCaptions;
}
Prenumerera på lyssnare
Lägg till en lyssnare för att ta emot undertexter aktiverade/inaktiverade status
communicationCaptions.CaptionsEnabledChanged += OnIsCaptionsEnabledChanged;
private void OnIsCaptionsEnabledChanged(object sender, PropertyChangedEventArgs args)
{
if (communicationCaptions.IsEnabled)
{
}
}
Lägg till en lyssnare för att få textningstypen ändrad
Den här händelsen utlöses när textningstypen ändras från CommunicationCaptions
till TeamsCaptions
när Microsoft 365-användare bjuds in till ACS-anrop.
captionsCallFeature.ActiveCaptionsTypeChanged += OnIsCaptionsTypeChanged;
private void OnIsCaptionsTypeChanged(object sender, PropertyChangedEventArgs args)
{
// get captions
}
Lägg till lyssnare för mottagna textningsdata
communicationCaptions.CaptionsReceived += OnCaptionsReceived;
private void OnCaptionsReceived(object sender, CommunicationCaptionsReceivedEventArgs eventArgs)
{
// Information about the speaker.
// eventArgs.Speaker
// The original text with no transcribed.
// eventArgs.SpokenText
// language identifier for the speaker.
// eventArgs.SpokenLanguage
// Timestamp denoting the time when the corresponding speech was made.
// eventArgs.Timestamp
// CaptionsResultKind is Partial if text contains partially spoken sentence.
// It is set to Final once the sentence has been completely transcribed.
// eventArgs.ResultKind
}
Lägg till en lyssnare för att få statusen aktivt talat språk ändrat
communicationCaptions.ActiveSpokenLanguageChanged += OnIsActiveSpokenLanguageChanged;
private void OnIsActiveSpokenLanguageChanged(object sender, PropertyChangedEventArgs args)
{
// communicationCaptions.ActiveSpokenLanguage
}
Starttexter
När du har konfigurerat alla lyssnare kan du nu börja lägga till bildtexter.
private async void StartCaptions()
{
var options = new StartCaptionsOptions
{
SpokenLanguage = "en-us"
};
try
{
await communicationCaptions.StartCaptionsAsync(options);
}
catch (Exception ex)
{
}
}
Stoppa undertexter
private async void StopCaptions()
{
try
{
await communicationCaptions.StopCaptionsAsync();
}
catch (Exception ex)
{
}
}
Ta bort undertext mottagen lyssnare
communicationCaptions.CaptionsReceived -= OnCaptionsReceived;
Stöd för talat språk
Hämta en lista över talade språk som stöds
Hämta en lista över talade språk som stöds och som användarna kan välja mellan när de aktiverar undertexter.
// bcp 47 formatted language code
IReadOnlyList<string> sLanguages = communicationCaptions.SupportedSpokenLanguages;```
### Set spoken language
When the user selects the spoken language, your app can set the spoken language that it expects captions to be generated from.
``` cs
public async void SetSpokenLanguage()
{
try
{
await communicationCaptions.SetSpokenLanguageAsync("en-us");
}
catch (Exception ex)
{
}
}
Rensa
Läs mer om att rensa resurser här.
Förutsättningar
- Azure-konto med en aktiv prenumeration finns i Skapa ett konto kostnadsfritt.
- Azure Communication Services-resurs. Se Skapa en Azure Communication Services-resurs. Spara anslutningssträng för den här resursen.
- En app med röst- och videosamtal, se våra snabbstarter för röst - och videosamtal .
Kommentar
Observera att du måste ha en röstsamtalsapp med hjälp av Azure Communication Services som anropar SDK:er för att få åtkomst till funktionen för undertexter som beskrivs i den här guiden.
Modeller
Name | beskrivning |
---|---|
CaptionsCallFeature | API för anropsfunktion för undertexter |
CommunicationCaptions | API för kommunikationstexter |
StartCaptionOptions | Alternativ för dold bildtext som talat språk |
CommunicationCaptionsListener | Lyssnare för CommunicationCaptions addOnCaptionsReceivedListener |
CommunicationCaptionsReceivedEvent | Dataobjekt som tas emot för varje CommunicationCaptionsListener-händelse |
Hämta funktionen för undertexter
Du måste hämta och casta objektet Bildtexter för att använda specifika funktioner för bildtexter.
CaptionsCallFeature captionsCallFeature = call.feature(Features.CAPTIONS);
captionsCallFeature.getCaptions().whenComplete(
((captions, throwable) -> {
if (throwable == null) {
CallCaptions callCaptions = captions;
if (captions.getCaptionsType() == CaptionsType.COMMUNICATION_CAPTIONS) {
// communication captions
CommunicationCaptions communicationCaptions = (CommunicationCaptions) captions;
}
} else {
// get captions failed
// throwable is the exception/cause
}
}));
Prenumerera på lyssnare
Lägg till en lyssnare för att ta emot undertexter aktiverade/inaktiverade status
public void addOnIsCaptionsEnabledChangedListener() {
communicationCaptions.addOnCaptionsEnabledChangedListener( (PropertyChangedEvent args) -> {
if(communicationCaptions.isEnabled()) {
// captions enabled
}
});
}
Lägg till en lyssnare för att få textningstypen ändrad
Den här händelsen utlöses när textningstypen ändras från CommunicationCaptions
till TeamsCaptions
när Microsoft 365-användare bjuds in till ACS-anrop.
public void addOnIsCaptionsTypeChangedListener() {
captionsCallFeature.addOnActiveCaptionsTypeChangedListener( (PropertyChangedEvent args) -> {
if(communicationCaptions.isEnabled()) {
// captionsCallFeature.getCaptions();
}
});
}
Lägg till lyssnare för mottagna textningsdata
CommunicationCaptionsListener captionsListener = (CommunicationCaptionsReceivedEvent args) -> {
// Information about the speaker.
// CallerInfo participantInfo = args.getSpeaker();
// The original text with no transcribed.
// args.getSpokenText();
// language identifier for the speaker.
// args.getSpokenLanguage();
// Timestamp denoting the time when the corresponding speech was made.
// args.getTimestamp();
// CaptionsResultType is Partial if text contains partially spoken sentence.
// It is set to Final once the sentence has been completely transcribed.
// args.getResultType() == CaptionsResultType.FINAL;
};
public void addOnCaptionsReceivedListener() {
communicationCaptions.addOnCaptionsReceivedListener(captionsListener);
}
Lägg till en lyssnare för att få statusen aktivt talat språk ändrat
public void addOnActiveSpokenLanguageChangedListener() {
communicationCaptions.addOnActiveSpokenLanguageChangedListener( (PropertyChangedEvent args) -> {
// communicationCaptions.getActiveSpokenLanguage()
});
}
Starttexter
När du har konfigurerat alla lyssnare kan du nu börja lägga till bildtexter.
public void startCaptions() {
StartCaptionsOptions startCaptionsOptions = new StartCaptionsOptions();
startCaptionsOptions.setSpokenLanguage("en-us");
communicationCaptions.startCaptions(startCaptionsOptions).whenComplete((result, error) -> {
if (error != null) {
}
});
}
Stoppa undertexter
public void stopCaptions() {
communicationCaptions.stopCaptions().whenComplete((result, error) -> {
if (error != null) {
}
});
}
Ta bort undertext mottagen lyssnare
public void removeOnCaptionsReceivedListener() {
communicationCaptions.removeOnCaptionsReceivedListener(captionsListener);
}
Stöd för talat språk
Hämta en lista över talade språk som stöds
Hämta en lista över talade språk som stöds och som användarna kan välja mellan när de aktiverar undertexter.
// bcp 47 formatted language code
communicationCaptions.getSupportedSpokenLanguages();
Ange talat språk
När användaren väljer det talade språket kan appen ange det talade språk som den förväntar sig att undertexter ska genereras från.
public void setSpokenLanguage() {
communicationCaptions.setSpokenLanguage("en-us").whenComplete((result, error) -> {
if (error != null) {
}
});
}
Rensa
Läs mer om att rensa resurser här.
Förutsättningar
- Azure-konto med en aktiv prenumeration finns i Skapa ett konto kostnadsfritt.
- Azure Communication Services-resurs. Se Skapa en Azure Communication Services-resurs. Spara anslutningssträng för den här resursen.
- En app med röst- och videosamtal, se våra snabbstarter för röst - och videosamtal .
Kommentar
Observera att du måste ha en röstsamtalsapp med hjälp av Azure Communication Services som anropar SDK:er för att få åtkomst till funktionen för undertexter som beskrivs i den här guiden.
Modeller
Name | beskrivning |
---|---|
CaptionsCallFeature | API för anropsfunktion för undertexter |
CommunicationCaptions | API för kommunikationstexter |
StartCaptionOptions | Alternativ för dold bildtext som talat språk |
CommunicationCaptionsDelegate | Ombud för kommunikationstexter |
CommunicationCaptionsReceivedEventArgs | Dataobjekt som tagits emot för varje mottagen kommunikationstext |
Hämta funktionen för undertexter
Du måste hämta och casta objektet Bildtexter för att använda specifika funktioner för bildtexter.
if let call = self.call {
@State var captionsCallFeature = call.feature(Features.captions)
captionsCallFeature.getCaptions{(value, error) in
if let error = error {
// failed to get captions
} else {
if (value?.type == CaptionsType.communicationCaptions) {
// communication captions
@State var communicationCaptions = value as? CommunicationCaptions
}
}
}
}
Prenumerera på lyssnare
Lägg till en lyssnare för att ta emot undertexter aktiverade/inaktiverade, typ, talat språk, status för textningsspråk har ändrats och mottagna data
Händelsen didChangeActiveCaptionsType
utlöses när textningstypen ändras från CommunicationCaptions
till TeamsCaptions
när Microsoft 365-användare bjuds in till ACS-anrop.
extension CallObserver: CommunicationCaptionsDelegate {
// listener for receive captions enabled/disabled status
public func communicationCaptions(_ communicationCaptions: CommunicationCaptions, didChangeCaptionsEnabledState args: PropertyChangedEventArgs) {
// communicationCaptions.isEnabled
}
// listener for active spoken language state change
public func communicationCaptions(_ communicationCaptions: CommunicationCaptions, didChangeActiveSpokenLanguageState args: PropertyChangedEventArgs) {
// communicationCaptions.activeSpokenLanguage
}
// listener for captions data received
public func communicationCaptions(_ communicationCaptions: CommunicationCaptions, didReceiveCaptions:CommunicationCaptionsReceivedEventArgs) {
// Information about the speaker.
// didReceiveCaptions.speaker
// The original text with no transcribed.
// didReceiveCaptions.spokenText
// language identifier for the speaker.
// didReceiveCaptions.spokenLanguage
// Timestamp denoting the time when the corresponding speech was made.
// didReceiveCaptions.timestamp
// CaptionsResultType is Partial if text contains partially spoken sentence.
// It is set to Final once the sentence has been completely transcribed.
// didReceiveCaptions.resultType
}
}
communicationCaptions.delegate = self.callObserver
extension CallObserver: CaptionsCallFeatureDelegate {
// captions type changed
public func captionsCallFeature(_ captionsCallFeature: CaptionsCallFeature, didChangeActiveCaptionsType args: PropertyChangedEventArgs) {
// captionsCallFeature.getCaptions to get captions
}
}
captionsCallFeature.delegate = self.callObserver
Starttexter
När du har konfigurerat alla lyssnare kan du nu börja lägga till bildtexter.
func startCaptions() {
guard let communicationCaptions = communicationCaptions else {
return
}
let startCaptionsOptions = StartCaptionsOptions()
startCaptionsOptions.spokenLanguage = "en-us"
communicationCaptions.startCaptions(startCaptionsOptions: startCaptionsOptions, completionHandler: { (error) in
if error != nil {
}
})
}
Stoppa undertexter
func stopCaptions() {
communicationCaptions.stopCaptions(completionHandler: { (error) in
if error != nil {
}
})
}
Ta bort undertext mottagen lyssnare
communicationCaptions?.delegate = nil
Stöd för talat språk
Hämta en lista över talade språk som stöds
Hämta en lista över talade språk som stöds och som användarna kan välja mellan när de aktiverar undertexter.
// bcp 47 formatted language code
let spokenLanguage : String = "en-us"
for language in communicationCaptions?.supportedSpokenLanguages ?? [] {
// choose required language
spokenLanguage = language
}
Ange talat språk
När användaren väljer det talade språket kan appen ange det talade språk som den förväntar sig att undertexter ska genereras från.
func setSpokenLanguage() {
guard let communicationCaptions = self.communicationCaptions else {
return
}
communicationCaptions.set(spokenLanguage: spokenLanguage, completionHandler: { (error) in
if let error = error {
}
})
}
Rensa
Läs mer om att rensa resurser här.
Rensa resurser
Om du vill rensa och ta bort en Communication Services-prenumeration kan du ta bort resursen eller resursgruppen. Om du tar bort resursgruppen tas även alla andra resurser som är associerade med den bort. Läs mer om att rensa resurser.
Nästa steg
Mer information finns i följande artiklar:
- Läs mer om hur du använder undertexter i Teams interop-scenarier .
- Kolla in vårt webbsamtalsexempel
- Lär dig mer om funktioner för samtals-SDK
- Läs mer om hur samtal fungerar