Rozpoznawanie mowy (STT) to forma technologii, która automatycznie generuje tekst z dźwięków mowy. Dzięki STT możesz tworzyć bardziej immersyjne światy, pozwalając graczom rozmawiać z NPC-ami, generować tekst bez potrzeby wcześniejszego nagrywania konkretnego dźwięku, poprawić dostępność dla graczy z ograniczeniami ruchowymi lub wzrokowymi oraz zapewnić graczom sterowanie bez użycia rąk za pomocą skrótów głosowych do działań, takich jak otwieranie ekwipunku czy rzucanie zaklęcia.
Używając pliku Gingerbread House - Start .rbxl jako punktu wyjścia, ten samouczek pokazuje, jak dodać tekst generowany dynamicznie z mowy do swojej gry, w tym wskazówki dotyczące implementacji STT, aby gracz mógł wchodzić w interakcje z obiektami w swoim 3D świecie.
Obiekty audio
Aby stworzyć dźwięk STT, ważne jest, aby zrozumieć obiekty audio, z którymi będziesz pracować w tym samouczku. Istnieją trzy typy obiektów audio dla STT:
- Obiekt AudioDeviceInput to fizyczne urządzenie sprzętowe w rzeczywistym świecie, takie jak mikrofon w laptopie, telefonie lub słuchawkach.
- Obiekt AudioSpeechToText konwertuje dźwięki mowy na ciągi tekstowe.
- Wires przenoszą strumienie audio z jednego obiektu do drugiego.
Wszystkie te obiekty audio współpracują ze sobą, aby generować tekst STT w odpowiedzi na działania gracza. Na przykład, jeśli gracz nosi słuchawki podczas grania w grę na swoim laptopie:
- AudioDeviceInput przechwytuje mowę gracza, jak mówioną do mikrofonu i jako strumień audio.
- Wire przenosi strumień audio z AudioDeviceInput do AudioSpeechToText.
- AudioSpeechToText konwertuje mowę gracza na tekst.
- Gra odczytuje ten tekst i wykonuje akcję, taką jak wyświetlenie mówionego tekstu na ekranie lub otwarcie drzwi na polecenie gracza.
Włącz użycie mikrofonu
Zanim dodasz STT do gry, musisz najpierw włączyć użycie mikrofonu i opublikować grę.
- Otwórz plik Gingerbread House - Start w Studio.
- Utwórz lokalną kopię.
- Opublikuj swoją lokalną kopię gry.
- W Studio przejdź do Plik ⟩ Ustawienia doświadczenia ⟩ Komunikacja.
- Włącz Włącz mikrofon.
- Zapisz swoje zmiany.
Dodaj prostą rejestrację mowy
Aby dodać prostą rejestrację mowy do swojej lokalnej kopii pliku Gingerbread House - Start:
Włącz użycie najnowszego API do głosu.
- W oknie Eksplorator wybierz VoiceChatService.
- W oknie Właściwości ustaw UseAudioApi na Włączone.
Utwórz podstawowe obiekty audio, które pozwolą ci rejestrować mówione słowa.
- W oknie Eksplorator przejdź do Workspace > DialogueVolume.
- Usuń wszystkie obiekty wewnątrz folderu DialogueVolume.
- Wstaw następujące obiekty do folderu DialogueVolume:
- AudioDeviceInput do rejestrowania mowy.
- AudioSpeechToText do konwersji mowy na tekst.
- Wire do przenoszenia strumienia z wejścia audio do instancji STT.
- W oknie Właściwości obiektu AudioSpeechToText ustaw stan Enabled na włączony.
- W oknie Właściwości obiektu Wire:
- Ustaw SourceInstance na nowy AudioDeviceInput, aby określić, że chcesz, aby przewód przenosił dźwięk z tej konkretnej instancji audio.
- Ustaw TargetInstance na nowy AudioSpeechToText, aby określić, że chcesz, aby przewód przenosił dźwięk do tej konkretnej instancji audio.
Ustaw właściwość Player wejścia audio na lokalnego gracza w czasie wykonywania. To mówi Robloxowi, z mikrofonu którego użytkownika ma przechwytywać dźwięk.
- W oknie Eksplorator przejdź do StarterPlayer > StarterCharacterScripts.
- Wstaw LocalScript i nazwij go ListenForMagicWord.
- Wklej następujący kod do nowego lokalnego skryptu:
local audioDeviceInput = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioDeviceInput')-- Przypisuje mikrofon do lokalnego graczaaudioDeviceInput.Player = game.Players.LocalPlayer
Przetestuj swoją rejestrację mowy
Po dodaniu prostej rejestracji mowy możesz przetestować grę, aby upewnić się, że twoja implementacja STT działa poprawnie. Mówienie do mikrofonu powinno zapełnić właściwość AudioSpeechToText tekstową wersją twojej mowy.
Aby przetestować swoją rejestrację mowy:
- W sekcji Test > Klienci i serwery wybierz Test zespołowy.
- Kliknij Start, aby uruchomić serwer testowy.
- W nowym serwerze testowym, wycisz mikrofon i powiedz kilka słów.
- W oknie Eksplorator przejdź do Workspace > DialogueVolume > AudioSpeechToText.
- W oknie Właściwości AudioSpeechToText potwierdź, że słowa, które powiedziałeś do mikrofonu, pojawiły się jako wartość właściwości Text.
Użyj STT w rozgrywce
Aby połączyć STT z rozgrywką i otworzyć drzwi do domku z piernika, gdy gracz powie "Otwórz sezam" do swojego mikrofonu:
Utwórz zdalne zdarzenie, aby połączyć klienta z serwerem.
- Nazwij go OpenDoor.
Dodaj nowy skrypt do animacji otwierania drzwi domku z piernika.
- Pod ServerScriptService wstaw skrypt po stronie serwera Script.
- Nazwij go DoorService.
- Wklej następujący kod do nowego skryptu:
-- Pobiera usługę ReplicatedStorage do wspólnego przechowywania między serwerem a klientem-- Pobiera TweenService do systemu tweeningowegolocal ReplicatedStorage = game:GetService("ReplicatedStorage")local TweenService = game:GetService("TweenService")-- Pozwala klientowi poprosić serwer o otwarcie drzwilocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- Funkcja, która animuje drzwi, aby poruszały się w dół i otwierałylocal 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-- Łączy funkcję z wydarzeniemremoteEvent.OnServerEvent:Connect(openDoor)Połącz drzwi z rozpoznawaniem mowy, aby akcja miała miejsce, gdy gracz mówi do swojego mikrofonu.
- Przejdź do StarterPlayer > StarterCharacterScripts.
- Otwórz skrypt ListenForMagicWord, który stworzyłeś wcześniej.
- Dodaj następujące linie:
-- Pobiera usługę ReplicatedStorage do wspólnego przechowywania między serwerem a klientemlocal ReplicatedStorage = game:GetService("ReplicatedStorage")-- Pobiera RemoveEvent, który klient wyśle do serweralocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- Znajduje węzeł STT w grafie sceny-- Właściwość Text węzła aktualizuje się, gdy rozpoznaje mowęlocal speechToText = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioSpeechToText')-- Funkcja, która mówi serwerowi, aby otworzył drzwi, jeśli STT przechwyci gracza mówiącego "Otwórz sezam"speechToText:GetPropertyChangedSignal('Text'):Connect(function()local text = speechToText.Textif text == '' thenreturnendprint(text)if (text.find(text, 'otwórz sezam') ~= nil) thenremoteEvent:FireServer()endspeechToText.Text = ''end)Przetestuj swoją implementację STT.
- W sekcji Test > Klienci i serwery wybierz Test zespołowy.
- Kliknij Start, aby uruchomić serwer testowy.
- W nowym serwerze testowym podejdź do drzwi, wycisz mikrofon i powiedz "Otwórz sezam". Drzwi powinny się otworzyć i umożliwić ci wejście do domku z piernika.