Sprach-zu-Text (STT) ist eine Form von Technologie, die automatisch Text aus Sprachlauten generiert. Mit STT können Sie immersivere Welten schaffen, indem Sie es den Spielern ermöglichen, mit NPCs zu sprechen, Text ohne die Notwendigkeit vorab aufgezeichneter Audiodateien zu generieren, die Zugänglichkeit für Spieler mit motorischen oder visuellen Einschränkungen zu verbessern und den Spielern freihändige Steuerungen durch Sprachbefehle für Aktionen wie das Öffnen ihres Inventars oder das Wirken eines Zaubers zu bieten.
Anhand der Gingerbread House - Start .rbxl-Datei als Ausgangspunkt zeigt dieses Tutorial, wie Sie Text, der dynamisch aus Sprache generiert wird, zu Ihrem Spiel hinzufügen, einschließlich Anleitungen zur Implementierung von STT, damit der Spieler mit Objekten in Ihrer 3D-Welt interagieren kann.
Audioobjekte
Um STT-Audio zu erstellen, ist es wichtig, die Audioobjekte zu verstehen, mit denen Sie während dieses Tutorials arbeiten werden. Es gibt drei Arten von Audioobjekten für STT:
- Das AudioDeviceInput-Objekt ist ein physisches Hardwaregerät in der realen Welt, wie ein Mikrofon in einem Laptop, Telefon oder Headset.
- Das AudioSpeechToText-Objekt wandelt Sprachlaute in Textzeichenfolgen um.
- Wires übertragen Audiostreams von einem Objekt zu einem anderen.
Alle diese Audioobjekte arbeiten zusammen, um STT-Text als Reaktion auf Spieleraktionen zu generieren. Zum Beispiel, wenn der Spieler ein Headset trägt, während er ein Spiel mit seinem Laptop spielt:
- Das AudioDeviceInput erfasst die Sprache des Spielers, wie sie in sein Mikrofon gesprochen wird und als Audiostream.
- Ein Wire überträgt den Audiostream vom AudioDeviceInput zum AudioSpeechToText.
- Das AudioSpeechToText wandelt die Sprache des Spielers in Text um.
- Das Spiel liest diesen Text und führt eine Aktion aus, wie das Anzeigen des gesprochenen Textes auf dem Bildschirm oder das Öffnen einer Tür auf Befehl des Spielers.
Mikrofonbenutzung aktivieren
Bevor Sie STT zu einem Spiel hinzufügen, müssen Sie zuerst die Mikrofonbenutzung aktivieren und das Spiel veröffentlichen.
- Öffnen Sie die Gingerbread House - Start Datei in Studio.
- Erstellen Sie eine lokale Kopie.
- Veröffentlichen Sie Ihre lokale Kopie des Spiels.
- Gehen Sie zurück zu Studio und navigieren Sie zu Datei ⟩ Erfahrungs-Einstellungen ⟩ Kommunikation.
- Aktivieren Sie Mikrofon aktivieren.
- Speichern Sie Ihre Änderungen.
Einfache Sprachaufnahme hinzufügen
Um eine einfache Sprachaufnahme zu Ihrer lokalen Kopie der Gingerbread House - Start Datei hinzuzufügen:
Aktivieren Sie die Verwendung der neuesten API für Sprache.
- Wählen Sie im Explorer-Fenster den VoiceChatService aus.
- Setzen Sie im Eigenschaften-Fenster UseAudioApi auf Aktiviert.
Erstellen Sie die grundlegenden Audioobjekte, die es Ihnen ermöglichen, gesprochene Wörter aufzuzeichnen.
- Gehen Sie im Explorer-Fenster zu Workspace > DialogueVolume.
- Löschen Sie alle Objekte im DialogueVolume-Ordner.
- Fügen Sie die folgenden Objekte in den DialogueVolume-Ordner ein:
- Ein AudioDeviceInput, um Sprache aufzuzeichnen.
- Ein AudioSpeechToText, um die Sprache in Text umzuwandeln.
- Ein Wire, um den Stream vom Audio-Geräteeingang zur STT-Instanz zu übertragen.
- Setzen Sie im Eigenschaften-Fenster des AudioSpeechToText-Objekts den Status Aktiviert auf ein.
- Setzen Sie im Eigenschaften-Fenster des Wire-Objekts:
- Setzen Sie SourceInstance auf Ihr neues AudioDeviceInput, um anzugeben, dass Sie möchten, dass der Draht Audio von dieser spezifischen Audioinstanz überträgt.
- Setzen Sie TargetInstance auf Ihr neues AudioSpeechToText, um anzugeben, dass Sie möchten, dass der Draht Audio zu dieser spezifischen Audioinstanz überträgt.
Setzen Sie die Player-Eigenschaft des Audio-Geräteeingangs zur Laufzeit auf den lokalen Spieler. Dies sagt Roblox, von welchem Benutzer das Mikrofon Audio erfassen soll.
- Gehen Sie im Explorer-Fenster zu StarterPlayer > StarterCharacterScripts.
- Fügen Sie ein LocalScript ein und benennen Sie es ListenForMagicWord.
- Fügen Sie den folgenden Code in das neue lokale Skript ein:
local audioDeviceInput = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioDeviceInput')-- Bindet das Mikrofon an den lokalen SpieleraudioDeviceInput.Player = game.Players.LocalPlayer
Testen Sie Ihre Sprachaufnahme
Nachdem Sie eine einfache Sprachaufnahme hinzugefügt haben, können Sie das Spiel testen, um sicherzustellen, dass Ihre STT-Implementierung ordnungsgemäß funktioniert. Das Sprechen in Ihr Mikrofon sollte die AudioSpeechToText-Eigenschaft mit der Textversion Ihrer Sprache füllen.
Um Ihre Sprachaufnahme zu testen:
- Unter Test > Clients und Server wählen Sie Team-Test.
- Klicken Sie auf Start, um den Testserver zu starten.
- Entmutigen Sie in dem neuen Testserver Ihr Mikrofon und sprechen Sie ein paar Worte.
- Gehen Sie im Explorer-Fenster zu Workspace > DialogueVolume > AudioSpeechToText.
- Bestätigen Sie im Eigenschaften-Fenster von AudioSpeechToText, dass die Worte, die Sie in Ihr Mikrofon gesprochen haben, als Wert der Text-Eigenschaft erschienen sind.
Verwenden Sie STT mit Gameplay
Um STT mit dem Gameplay zu verbinden und die Tür des Lebkuchenhauses zu öffnen, wenn der Spieler "Öffne Sesam" in sein Mikrofon sagt:
Erstellen Sie ein Remote-Event, um den Client mit dem Server zu verbinden.
- Benennen Sie es OpenDoor.
Fügen Sie ein neues Skript hinzu, um das Öffnen der Tür des Lebkuchenhauses zu animieren.
- Fügen Sie unter ServerScriptService ein serverseitiges Script ein.
- Benennen Sie es DoorService.
- Fügen Sie den folgenden Code in das neue Skript ein:
-- Holt den ReplicatedStorage-Dienst für gemeinsamen Speicher zwischen Server und Client-- Holt den TweenService für das Tweening-Systemlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local TweenService = game:GetService("TweenService")-- Ermöglicht es dem Client, den Server zu bitten, die Tür zu öffnenlocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- Funktion, die die Tür animiert, um nach unten zu bewegen und sich zu öffnenlocal function openDoor()local doorPart = workspace:WaitForChild("Door")local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Linear)local tween = TweenService:Create(doorPart, tweenInfo, {Position = doorPart.Position + Vector3.new(0, -15, 0)})tween:Play()end-- Verbindet die Funktion mit dem EreignisremoteEvent.OnServerEvent:Connect(openDoor)Verbinden Sie die Tür mit Sprach-zu-Text, sodass eine Aktion ausgeführt wird, wenn der Spieler in sein Mikrofon spricht.
- Gehen Sie zu StarterPlayer > StarterCharacterScripts.
- Öffnen Sie das ListenForMagicWord-Skript, das Sie zuvor erstellt haben.
- Fügen Sie die folgenden Zeilen hinzu:
-- Holt den ReplicatedStorage-Dienst für gemeinsamen Speicher zwischen Server und Clientlocal ReplicatedStorage = game:GetService("ReplicatedStorage")-- Holt das RemoveEvent, das der Client an den Server senden wirdlocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- Findet den STT-Knoten im Szenengraphen-- Die Text-Eigenschaft des Knotens wird aktualisiert, während er Sprache erkenntlocal speechToText = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioSpeechToText')-- Funktion, die dem Server sagt, die Tür zu öffnen, wenn STT erfasst, dass der Spieler "Öffne Sesam" sagtspeechToText:GetPropertyChangedSignal('Text'):Connect(function()local text = speechToText.Textif text == '' thenreturnendprint(text)if (text.find(text, 'open sesame') ~= nil) thenremoteEvent:FireServer()endspeechToText.Text = ''end)Testen Sie Ihre STT-Implementierung.
- Unter Test > Clients und Server wählen Sie Team-Test.
- Klicken Sie auf Start, um den Testserver zu starten.
- Gehen Sie im neuen Testserver zur Tür, entmutigen Sie Ihr Mikrofon und sagen Sie "Öffne Sesam". Die Tür sollte sich öffnen und Ihnen den Zugang zum Lebkuchenhaus ermöglichen.