Schnellstart: Konversation mit mehreren Geräten
In dieser Schnellstartanleitung erfahren Sie, wie Sie mit dem Speech SDK eine neue Konversation mit mehreren Geräten mit Übersetzungsunterstützung erstellen und einer vorhandenen Konversation beitreten.
Hinweis
Das Speech SDK für Java, JavaScript, Objective-C und Swift unterstützt die Konversation mit mehreren Geräten, wir haben hier jedoch noch keine Führungslinie bereitgestellt.
Sie können sich alle Speech SDK-C#-Beispiele auf GitHub ansehen oder diese herunterladen.
Voraussetzungen
Führen Sie die folgenden Schritte aus, bevor Sie beginnen:
Hinzufügen von Beispielcode
Öffnen Sie die Datei Program.cs, und ersetzen Sie den gesamten vorhandenen Code durch Folgendes:
using Microsoft.CognitiveServices.Speech; using Microsoft.CognitiveServices.Speech.Audio; using Microsoft.CognitiveServices.Speech.Transcription; using System; using System.Threading.Tasks; namespace HelloWorld { class Program { static async Task Main(string[] args) { await CreateConversationAsync(); } static async Task CreateConversationAsync() { // Replace these values with the details of your Cognitive Speech subscription string subscriptionKey = "YourSubscriptionKey"; // Replace below with your region identifier from here: https://aka.ms/speech/sdkregion string region = "YourServiceRegion"; // Sets source and target languages. // Replace with the languages of your choice, from list found here: https://aka.ms/speech/sttt-languages string fromLanguage = "en-US"; string toLanguage = "de"; // Set this to the display name you want for the conversation host string displayName = "The host"; // Create the task completion source that will be used to wait until the user presses Ctrl + C var completionSource = new TaskCompletionSource<bool>(); // Register to listen for Ctrl + C Console.CancelKeyPress += (s, e) => { completionSource.TrySetResult(true); e.Cancel = true; // don't terminate the current process }; // Create an instance of the speech translation config var config = SpeechTranslationConfig.FromSubscription(subscriptionKey, region); config.SpeechRecognitionLanguage = fromLanguage; config.AddTargetLanguage(toLanguage); // Create the conversation using (var conversation = await Conversation.CreateConversationAsync(config).ConfigureAwait(false)) { // Start the conversation so the host user and others can join await conversation.StartConversationAsync().ConfigureAwait(false); // Get the conversation ID. It will be up to your scenario to determine how this is shared with other participants. string conversationId = conversation.ConversationId; Console.WriteLine($"Created '{conversationId}' conversation"); // At this point, you can use the conversation object to manage the conversation. // For example, to mute everyone else in the room you can call this method: await conversation.MuteAllParticipantsAsync().ConfigureAwait(false); // Configure which audio source you want to use. If you are using a text only language, you // can use the other overload of the constructor that takes no arguments var audioConfig = AudioConfig.FromDefaultMicrophoneInput(); using (var conversationTranslator = new ConversationTranslator(audioConfig)) { // You should connect all the event handlers you need at this point conversationTranslator.SessionStarted += (s, e) => { Console.WriteLine($"Session started: {e.SessionId}"); }; conversationTranslator.SessionStopped += (s, e) => { Console.WriteLine($"Session stopped: {e.SessionId}"); }; conversationTranslator.Canceled += (s, e) => { switch (e.Reason) { case CancellationReason.EndOfStream: Console.WriteLine($"End of audio reached"); break; case CancellationReason.Error: Console.WriteLine($"Canceled due to error. {e.ErrorCode}: {e.ErrorDetails}"); break; } }; conversationTranslator.ConversationExpiration += (s, e) => { Console.WriteLine($"Conversation will expire in {e.ExpirationTime.TotalMinutes} minutes"); }; conversationTranslator.ParticipantsChanged += (s, e) => { Console.Write("The following participant(s) have "); switch (e.Reason) { case ParticipantChangedReason.JoinedConversation: Console.Write("joined"); break; case ParticipantChangedReason.LeftConversation: Console.Write("left"); break; case ParticipantChangedReason.Updated: Console.Write("been updated"); break; } Console.WriteLine(":"); foreach (var participant in e.Participants) { Console.WriteLine($"\t{participant.DisplayName}"); } }; conversationTranslator.TextMessageReceived += (s, e) => { Console.WriteLine($"Received an instant message from '{e.Result.ParticipantId}': '{e.Result.Text}'"); foreach (var entry in e.Result.Translations) { Console.WriteLine($"\tTranslated into '{entry.Key}': '{entry.Value}'"); } }; conversationTranslator.Transcribed += (s, e) => { Console.WriteLine($"Received a transcription from '{e.Result.ParticipantId}': '{e.Result.Text}'"); foreach (var entry in e.Result.Translations) { Console.WriteLine($"\tTranslated into '{entry.Key}': '{entry.Value}'"); } }; conversationTranslator.Transcribing += (s, e) => { Console.WriteLine($"Received a partial transcription from '{e.Result.ParticipantId}': '{e.Result.Text}'"); foreach (var entry in e.Result.Translations) { Console.WriteLine($"\tTranslated into '{entry.Key}': '{entry.Value}'"); } }; // Enter the conversation to start receiving events await conversationTranslator.JoinConversationAsync(conversation, displayName).ConfigureAwait(false); // You can now send an instant message to all other participants in the room await conversationTranslator.SendTextMessageAsync("The instant message to send").ConfigureAwait(false); // If specified a speech to text language, you can start capturing audio await conversationTranslator.StartTranscribingAsync().ConfigureAwait(false); Console.WriteLine("Started transcribing. Press Ctrl + c to stop"); // At this point, you should start receiving transcriptions for what you are saying using the default microphone. Press Ctrl+c to stop audio capture await completionSource.Task.ConfigureAwait(false); // Stop audio capture await conversationTranslator.StopTranscribingAsync().ConfigureAwait(false); // Leave the conversation. After this you will no longer receive events await conversationTranslator.LeaveConversationAsync().ConfigureAwait(false); } // End the conversation await conversation.EndConversationAsync().ConfigureAwait(false); // Delete the conversation. Any other participants that are still in the conversation will be removed await conversation.DeleteConversationAsync().ConfigureAwait(false); } } } }
Ersetzen Sie in der gleichen Datei die Zeichenfolge
YourSubscriptionKey
durch Ihren Abonnementschlüssel für Cognitive Speech.Ersetzen Sie die Zeichenfolge
YourServiceRegion
durch die mit Ihrem Abonnement verknüpfte Region.Wählen Sie auf der Menüleiste Datei>Alle speichern aus.
Erstellen und Ausführen der Anwendung, um eine neue Unterhaltung zu erstellen
Wählen Sie auf der Menüleiste Erstellen>Projektmappe erstellen aus, um die Anwendung zu erstellen. Der Code sollte nun ohne Fehler kompiliert werden.
Wählen Sie Debuggen>Debuggen starten aus (oder drücken SieF5), um die Anwendung helloworld zu starten.
Wenn die Meldung
Started transcribing
angezeigt wird, können Sie anfangen zu sprechen. Die Transkriptionen werden angezeigt, während Sie sprechen.- Wenn Sie den Unterhaltungscode an die anderen Teilnehmer weitergeben und diese der Unterhaltung beitreten, werden auch deren Transkriptionen angezeigt.
Wenn Sie alles gesagt haben, drücken Sie STRG+C, um die Audioaufnahme zu beenden, und beenden Sie die Unterhaltung.
Erstellen und Ausführen der Anwendung, um einer bereits vorhandenen Unterhaltung beizutreten
Kopieren Sie die folgende Funktion, und fügen Sie sie in die Datei Program.cs ein:
static async Task JoinConversationAsync(string conversationId) { // Set this to the display name you want for the participant string displayName = "participant"; // Set the speech to text, or text language you want to use string language = "en-US"; // Create the task completion source that will be used to wait until the user presses Ctrl + c var completionSource = new TaskCompletionSource<bool>(); // Register to listen for Ctrl+C Console.CancelKeyPress += (s, e) => { completionSource.TrySetResult(true); e.Cancel = true; // don't terminate the current process }; // As a participant, you don't need to specify any subscription key, or region. You can directly create // the conversation translator object var audioConfig = AudioConfig.FromDefaultMicrophoneInput(); using (var conversationTranslator = new ConversationTranslator(audioConfig)) { // Register for any events you are interested here. For now let's just register for // transcription, and instant message events conversationTranslator.TextMessageReceived += (s, e) => { Console.WriteLine($"Received an instant message from '{e.Result.ParticipantId}': '{e.Result.Text}'"); foreach (var entry in e.Result.Translations) { Console.WriteLine($"\tTranslated into '{entry.Key}': '{entry.Value}'"); } }; conversationTranslator.Transcribed += (s, e) => { Console.WriteLine($"Received a transcription from '{e.Result.ParticipantId}': '{e.Result.Text}'"); foreach (var entry in e.Result.Translations) { Console.WriteLine($"\tTranslated into '{entry.Key}': '{entry.Value}'"); } }; conversationTranslator.Transcribing += (s, e) => { Console.WriteLine($"Received a partial transcription from '{e.Result.ParticipantId}': '{e.Result.Text}'"); foreach (var entry in e.Result.Translations) { Console.WriteLine($"\tTranslated into '{entry.Key}': '{entry.Value}'"); } }; // To start receiving events, you will need to join the conversation await conversationTranslator.JoinConversationAsync(conversationId, displayName, language).ConfigureAwait(false); // You can now send an instant message await conversationTranslator.SendTextMessageAsync("Message from participant").ConfigureAwait(false); // Start capturing audio if you specified a speech to text language await conversationTranslator.StartTranscribingAsync().ConfigureAwait(false); Console.WriteLine("Started transcribing. Press Ctrl-C to stop"); // At this point, you should start receiving transcriptions for what you are saying using // the default microphone. Press Ctrl+C to stop audio capture await completionSource.Task.ConfigureAwait(false); // Stop audio capture await conversationTranslator.StopTranscribingAsync().ConfigureAwait(false); // Leave the conversation. You will stop receiving events after this await conversationTranslator.LeaveConversationAsync().ConfigureAwait(false); } }
Ersetzen Sie
CreateConversationAsync();
in der Funktionpublic static async Task Main(string[] args)
durch Folgendes:// Set this to the conversation you want to join JoinConversationAsync("YourConversationId");
Sie müssen eine Konversation erstellen, der Sie beitreten können:
- Navigieren Sie in Ihrem Browser zu https://translator.microsoft.com.
- Wählen Sie „Unterhaltung starten“ aus.
- Melden Sie sich mit einer der verfügbaren Optionen an.
- Geben Sie einen Namen ein (z. B. den Host).
- Wählen Sie eine Sprache aus (z. B. Englisch).
- Wählen Sie die Schaltfläche Eingeben aus.
- Notieren Sie sich den Konversationscode am oberen Seitenrand.
Tipp
Entfernen Sie bei Verwendung der Schaltfläche „Kopieren“ auf der Webseite unbedingt
translate.it/
am Anfang. Sie benötigen nur die fünfstellige Konversations-ID (Beispiel: ABCDE).
Kehren Sie zu Visual Studio zurück, und ersetzen Sie die Zeichenfolge
YourConversationId
durch die Unterhaltungs-ID, die Sie im vorherigen Schritt erstellt haben.Wählen Sie auf der Menüleiste Erstellen>Projektmappe erstellen aus, um die Anwendung zu erstellen. Der Code sollte nun ohne Fehler kompiliert werden.
Wählen Sie Debuggen>Debuggen starten aus (oder drücken SieF5), um die Anwendung helloworld zu starten.
Wenn die Meldung
Started transcribing
angezeigt wird, können Sie anfangen zu sprechen. Die Transkriptionen werden angezeigt, während Sie sprechen.- Wenn Sie zu Ihrem Browser zurückkehren, sollten Ihre Transkriptionen auch dort angezeigt werden, während Sie sprechen.
Wenn Sie alles gesagt haben, drücken Sie STRG+C, um die Audioaufnahme zu beenden, und beenden Sie die Unterhaltung.
Kehren Sie zu Ihrem Browser zurück, und verlassen Sie die Unterhaltung mithilfe der entsprechenden Schaltfläche in der rechten oberen Ecke.
Nächste Schritte
Sie können sich alle Speech SDK-C++-Beispiele auf GitHub ansehen oder diese herunterladen.
Voraussetzungen
Führen Sie die folgenden Schritte aus, bevor Sie beginnen:
Hinzufügen von Beispielcode
Öffnen Sie in Visual Studio die Quelldatei helloworld.cpp.
Ersetzen Sie den gesamten Code durch den folgenden Codeausschnitt:
#include "pch.h" #define WIN32_LEAN_AND_MEAN #include <Windows.h> #include <iostream> #include <thread> #include <future> #include <string> #include <speechapi_cxx.h> using namespace std::chrono_literals; using namespace Microsoft::CognitiveServices::Speech; using namespace Microsoft::CognitiveServices::Speech::Audio; using namespace Microsoft::CognitiveServices::Speech::Transcription; // Create a promise we will set when the user presses Ctrl-C std::promise<bool> promise; // Create the future we will use to wait for the promise to be fulfilled std::future<bool> future = promise.get_future(); void StartNewConversation() { // Set these std::string subscriptionKey("YourSubscriptionKey"); // Replace below with your own region identifier from here: https://aka.ms/speech/sdkregion std::string region("YourServiceRegion"); std::string speechLanguage("en-US"); // Create the conversation object you'll need to manage the conversation auto speechConfig = SpeechConfig::FromSubscription(subscriptionKey, region); speechConfig->SetSpeechRecognitionLanguage(speechLanguage); auto conversation = Conversation::CreateConversationAsync(speechConfig).get(); // Start the conversation so you and others can join conversation->StartConversationAsync().get(); // Get the conversation ID. It will be up to your scenario to determine how this is shared with other participants. std::cout << "Created conversation: " << conversation->GetConversationId() << std::endl; // You can now call various commands to manage the room. For example: conversation->MuteAllParticipantsAsync().get(); // Create the conversation translator you'll need to send audio, send IMs, and receive conversation events auto audioConfig = AudioConfig::FromDefaultMicrophoneInput(); auto conversationTranslator = ConversationTranslator::FromConfig(audioConfig); // Add any event handlers conversationTranslator->SessionStarted += [](const SessionEventArgs& args) { std::cout << "Session started " << args.SessionId << std::endl; }; conversationTranslator->SessionStopped += [](const SessionEventArgs& args) { std::cout << "Session stopped " << args.SessionId << std::endl; }; conversationTranslator->Canceled += [](const ConversationTranslationCanceledEventArgs& args) { switch (args.Reason) { case CancellationReason::EndOfStream: std::cout << "End of audio reached" << std::endl; break; case CancellationReason::Error: std::cout << "Canceled due to error. " << (long)args.ErrorCode << ": " << args.ErrorDetails << std::endl; break; } }; conversationTranslator->ConversationExpiration += [](const ConversationExpirationEventArgs& args) { std::cout << "Conversation will expire in " << args.ExpirationTime.count() << " minutes" << std::endl; }; conversationTranslator->ParticipantsChanged += [](const ConversationParticipantsChangedEventArgs& args) { std::cout << "The following participant(s) have "; switch (args.Reason) { case ParticipantChangedReason::JoinedConversation: std::cout << "joined"; break; case ParticipantChangedReason::LeftConversation: std::cout << "left"; break; case ParticipantChangedReason::Updated: std::cout << "been updated"; break; } std::cout << ":" << std::endl; for(std::shared_ptr<Participant> participant : args.Participants) { std::cout << "\t" << participant->DisplayName << std::endl; } }; conversationTranslator->Transcribing += [](const ConversationTranslationEventArgs& args) { std::cout << "Received a partial transcription from " << args.Result->ParticipantId << ": " << args.Result->Text << std::endl; for (const auto& entry : args.Result->Translations) { std::cout << "\t" << entry.first << ": " << entry.second << std::endl; } }; conversationTranslator->Transcribed += [](const ConversationTranslationEventArgs& args) { std::cout << "Received a transcription from " << args.Result->ParticipantId << ": " << args.Result->Text << std::endl; for (const auto& entry : args.Result->Translations) { std::cout << "\t" << entry.first << ": " << entry.second << std::endl; } }; conversationTranslator->TextMessageReceived += [](const ConversationTranslationEventArgs& args) { std::cout << "Received an instant message from " << args.Result->ParticipantId << ": " << args.Result->Text << std::endl; for (const auto& entry : args.Result->Translations) { std::cout << "\t" << entry.first << ": " << entry.second << std::endl; } }; // Join the conversation so you can start receiving events conversationTranslator->JoinConversationAsync(conversation, "Test Host").get(); // Send an instant message conversationTranslator->SendTextMessageAsync("This is a short test message").get(); // Start sending audio conversationTranslator->StartTranscribingAsync().get(); std::cout << "Started transcribing. Press Ctrl + C to stop" << std::endl; future.get(); // wait for Ctrl - C to be pressed // Stop audio capture conversationTranslator->StopTranscribingAsync().get(); // Leave the conversation. You will stop receiving events conversationTranslator->LeaveConversationAsync().get(); // Once you are done, remember to delete the conversation. conversation->EndConversationAsync().get(); // You will not be able to rejoin after this conversation->DeleteConversationAsync().get(); // All participants still in the room will be ejected } int main() { // Register a handler for the Ctrl - C callback SetConsoleCtrlHandler( [](DWORD dwCtrlType) -> BOOL { if (dwCtrlType == CTRL_C_EVENT) { // Signal that the user has pressed ctrl + C promise.set_value(true); return TRUE; } return FALSE; }, TRUE); StartNewConversation(); }
Ersetzen Sie in der gleichen Datei die Zeichenfolge
YourSubscriptionKey
durch Ihren Abonnementschlüssel.Ersetzen Sie die Zeichenfolge
YourServiceRegion
durch die mit Ihrem Abonnement verknüpfte Region.Wählen Sie auf der Menüleiste Datei>Alle speichern aus.
Erstellen und Ausführen der Anwendung, um eine neue Unterhaltung zu erstellen
Wählen Sie auf der Menüleiste Erstellen>Projektmappe erstellen aus, um die Anwendung zu erstellen. Der Code sollte nun ohne Fehler kompiliert werden.
Wählen Sie Debuggen>Debuggen starten aus (oder drücken SieF5), um die Anwendung helloworld zu starten.
Wenn die Meldung
Started transcribing
angezeigt wird, können Sie anfangen zu sprechen. Die Transkriptionen werden angezeigt, während Sie sprechen.- Wenn Sie den Unterhaltungscode an die anderen Teilnehmer weitergeben und diese der Unterhaltung beitreten, werden auch deren Transkriptionen angezeigt.
Wenn Sie die Spracheingabe beenden möchten, drücken Sie STRG+C auf der Tastatur, um die Audioaufnahme zu beenden.
Hinweis
Von Visual Studio wird unter Umständen eine Ausnahmemeldung wie die folgende angezeigt:
Exception thrown at 0x76EB90BF (KernelBase.dll) in helloworld.exe: 0x40010005: Control-C.
Diese kann gefahrlos ignoriert werden.
Drücken Sie F5, um fortzufahren.
Erstellen und Ausführen der Anwendung, um einer bereits vorhandenen Unterhaltung beizutreten
Kopieren Sie die folgende Funktion, und fügen Sie sie in der Datei helloworld.cpp direkt vor der Funktion
int main()
ein:void JoinExistingConversation(const std::string& conversationId) { std::string speechLanguage("en-US"); // You'll now need to create a ConversationTranslator to send audio, send IMs, and receive conversation events auto audioConfig = AudioConfig::FromDefaultMicrophoneInput(); auto conversationTranslator = ConversationTranslator::FromConfig(audioConfig); // Attach event handlers here. For example: conversationTranslator->Transcribing += [](const ConversationTranslationEventArgs& args) { std::cout << "Received a partial transcription from " << args.Result->ParticipantId << ": " << args.Result->Text << std::endl; for (const auto& entry : args.Result->Translations) { std::cout << "\t" << entry.first << ": " << entry.second << std::endl; } }; conversationTranslator->Transcribed += [](const ConversationTranslationEventArgs& args) { std::cout << "Received a transcription from " << args.Result->ParticipantId << ": " << args.Result->Text << std::endl; for (const auto& entry : args.Result->Translations) { std::cout << "\t" << entry.first << ": " << entry.second << std::endl; } }; conversationTranslator->TextMessageReceived += [](const ConversationTranslationEventArgs& args) { std::cout << "Received an instant message from " << args.Result->ParticipantId << ": " << args.Result->Text << std::endl; for (const auto& entry : args.Result->Translations) { std::cout << "\t" << entry.first << ": " << entry.second << std::endl; } }; // Join the conversation conversationTranslator->JoinConversationAsync(conversationId, "participant", speechLanguage).get(); // Start sending audio conversationTranslator->StartTranscribingAsync().get(); std::cout << "Started transcribing. Press Ctrl + C to stop" << std::endl; future.get(); // wait for Ctrl - C to be pressed // Stop audio capture conversationTranslator->StopTranscribingAsync().get(); // Once you are done, leave the conversation conversationTranslator->LeaveConversationAsync().get(); }
Ersetzen Sie
StartNewConversation();
in der Funktionint main()
durch Folgendes:// Set this to the conversation you want to join JoinExistingConversation("YourConversationId");
Sie müssen eine Konversation erstellen, der Sie beitreten können:
- Navigieren Sie in Ihrem Browser zu https://translator.microsoft.com.
- Wählen Sie „Unterhaltung starten“ aus.
- Melden Sie sich mit einer der verfügbaren Optionen an.
- Geben Sie einen Namen ein (z. B. den Host).
- Wählen Sie eine Sprache aus (z. B. Englisch).
- Wählen Sie die Schaltfläche Eingeben aus.
- Notieren Sie sich den Konversationscode am oberen Seitenrand.
Tipp
Entfernen Sie bei Verwendung der Schaltfläche „Kopieren“ auf der Webseite unbedingt
translate.it/
am Anfang. Sie benötigen nur die fünfstellige Konversations-ID (Beispiel: ABCDE).
Kehren Sie zu Visual Studio zurück, und ersetzen Sie
YourConversationId
in der Funktionint main()
durch die Unterhaltungs-ID aus dem vorherigen Schritt.Wählen Sie auf der Menüleiste Erstellen>Projektmappe erstellen aus, um die Anwendung zu erstellen. Der Code sollte ohne Fehler kompiliert werden.
Wählen Sie Debuggen>Debuggen starten aus (oder drücken SieF5), um die Anwendung helloworld zu starten.
Wenn die Meldung
Started transcribing
angezeigt wird, können Sie anfangen zu sprechen. Die Transkriptionen werden angezeigt, während Sie sprechen.- Wenn Sie zu Ihrem Browser zurückkehren, sollten Ihre Transkriptionen auch dort angezeigt werden, während Sie sprechen.
Wenn Sie alles gesagt haben, drücken Sie STRG+C, um die Audioaufnahme zu beenden, und beenden Sie die Unterhaltung.
Hinweis
Von Visual Studio wird unter Umständen eine Ausnahmemeldung wie die folgende angezeigt:
Exception thrown at 0x76EB90BF (KernelBase.dll) in helloworld.exe: 0x40010005: Control-C.
Diese kann gefahrlos ignoriert werden.
Drücken Sie F5, um fortzufahren.Kehren Sie zu Ihrem Browser zurück, und verlassen Sie die Unterhaltung mithilfe der entsprechenden Schaltfläche in der rechten oberen Ecke.