Fala para texto (STT) é uma forma de tecnologia que gera automaticamente texto a partir de sons de fala. Com STT, você pode criar mundos mais imersivos permitindo que os jogadores conversem com NPCs, gere texto sem a necessidade de pré-gravar áudios específicos, melhore a acessibilidade para jogadores com limitações motoras ou de visão e forneça controles sem as mãos através de atalhos de voz para ações como abrir seu inventário ou lançar um feitiço.
Usando o arquivo Gingerbread House - Start .rbxl como ponto de partida, este tutorial mostra como adicionar texto gerado dinamicamente a partir da fala à sua experiência, incluindo orientações sobre como implementar STT para que o jogador possa interagir com objetos em seu mundo 3D.
Objetos de áudio
Para criar áudio STT, é importante entender os objetos de áudio com os quais você trabalhará ao longo deste tutorial. Existem três tipos de objetos de áudio para STT:
- O objeto AudioDeviceInput é um dispositivo de hardware físico no mundo real, como um microfone em um laptop, telefone ou headset.
- O objeto AudioSpeechToText converte sons de fala em strings de texto.
- Wires transportam streams de áudio de um objeto para outro.
Todos esses objetos de áudio trabalham juntos para gerar texto STT em resposta às ações do jogador. Por exemplo, se o jogador estiver usando um headset enquanto joga uma experiência em seu laptop:
- O AudioDeviceInput captura a fala do jogador, conforme falada em seu microfone e como um stream de áudio.
- Um Wire transporta o stream de áudio do AudioDeviceInput para o AudioSpeechToText.
- O AudioSpeechToText converte a fala do jogador em texto.
- A experiência lê esse texto e realiza uma ação, como exibir o texto falado na tela ou abrir uma porta a comando do jogador.
Habilitar o uso do microfone
Antes de adicionar STT a uma experiência, você deve primeiro habilitar o uso do microfone e publicar a experiência.
- Abra o arquivo Gingerbread House - Start no Studio.
- Crie uma cópia local.
- Publique sua cópia local da experiência.
- De volta ao Studio, vá para Arquivo ⟩ Configurações da Experiência ⟩ Comunicação.
- Ative Habilitar Microfone.
- Salve suas alterações.
Adicionar captura de fala simples
Para adicionar captura de fala simples à sua cópia local do arquivo Gingerbread House - Start:
Ative o uso da API mais recente para voz.
- Na janela Explorer, selecione o VoiceChatService.
- Na janela Properties, defina UseAudioApi como Enabled.
Crie os objetos de áudio básicos que permitirão capturar palavras faladas.
- Na janela Explorer, vá para Workspace > DialogueVolume.
- Exclua todos os objetos dentro da pasta DialogueVolume.
- Insira os seguintes objetos na pasta DialogueVolume:
- Um AudioDeviceInput para capturar a fala.
- Um AudioSpeechToText para converter a fala em texto.
- Um Wire para transportar o stream do dispositivo de áudio para a instância STT.
- Na janela Properties do objeto AudioSpeechToText, defina o estado Enabled como ativado.
- Na janela Properties do objeto Wire:
- Defina SourceInstance para o seu novo AudioDeviceInput para especificar que você deseja que o fio transporte áudio desta instância de áudio específica.
- Defina TargetInstance para o seu novo AudioSpeechToText para especificar que você deseja que o fio transporte áudio para esta instância de áudio específica.
Defina a propriedade Player da entrada do dispositivo de áudio para o jogador local em tempo de execução. Isso informa ao Roblox de qual microfone de usuário capturar áudio.
- Na janela Explorer, vá para StarterPlayer > StarterCharacterScripts.
- Insira um LocalScript e nomeie-o como ListenForMagicWord.
- Cole o seguinte código no novo script local:
local audioDeviceInput = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioDeviceInput')-- Liga o microfone ao jogador localaudioDeviceInput.Player = game.Players.LocalPlayer
Teste sua captura de fala
Depois de adicionar captura de fala simples, você pode testar a experiência para garantir que sua implementação de STT funcione corretamente. Falar em seu microfone deve preencher a propriedade AudioSpeechToText com a versão em texto de sua fala.
Para testar sua captura de fala:
- Em Teste > Clientes e Servidores, selecione Teste em Equipe.
- Clique em Iniciar para iniciar o servidor de teste.
- No novo servidor de teste, desmute seu microfone e fale algumas palavras.
- Na janela Explorer, vá para Workspace > DialogueVolume > AudioSpeechToText.
- Na janela Properties do AudioSpeechToText, confirme que as palavras que você falou em seu microfone apareceram como o valor da propriedade Text.
Usar STT com a jogabilidade
Para conectar o STT à jogabilidade e fazer a porta da casa de gengibre abrir quando o jogador disser "Abra-se, Sésamo" em seu microfone:
Crie um evento remoto para conectar o cliente ao servidor.
- Nomeie-o como OpenDoor.
Adicione um novo script para animar a abertura da porta da casa de gengibre.
- Em ServerScriptService, insira um Script do lado do servidor.
- Nomeie-o como DoorService.
- Cole o seguinte código no novo script:
-- Obtém o serviço ReplicatedStorage para armazenamento compartilhado entre servidor e cliente-- Obtém o TweenService para o sistema de tweeninglocal ReplicatedStorage = game:GetService("ReplicatedStorage")local TweenService = game:GetService("TweenService")-- Permite que o cliente peça ao servidor para abrir a portalocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- Função que anima a porta para se mover para baixo e abrirlocal 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-- Conecta a função ao eventoremoteEvent.OnServerEvent:Connect(openDoor)Conecte a porta ao fala-para-texto para que uma ação aconteça quando o jogador falar em seu microfone.
- Vá para StarterPlayer > StarterCharacterScripts.
- Abra o script ListenForMagicWord que você criou anteriormente.
- Adicione as seguintes linhas:
-- Obtém o serviço ReplicatedStorage para armazenamento compartilhado entre servidor e clientelocal ReplicatedStorage = game:GetService("ReplicatedStorage")-- Obtém o RemoteEvent que o cliente enviará para o servidorlocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- Encontra o nó STT no gráfico de cena-- A propriedade Text do nó é atualizada à medida que reconhece a falalocal speechToText = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioSpeechToText')-- Função que informa ao servidor para abrir a porta se o STT capturar o jogador dizendo "Abra-se, Sésamo"speechToText:GetPropertyChangedSignal('Text'):Connect(function()local text = speechToText.Textif text == '' thenreturnendprint(text)if (text.find(text, 'abra-se, sésamo') ~= nil) thenremoteEvent:FireServer()endspeechToText.Text = ''end)Teste sua implementação de STT.
- Em Teste > Clientes e Servidores, selecione Teste em Equipe.
- Clique em Iniciar para iniciar o servidor de teste.
- No novo servidor de teste, aproxime-se da porta, desmute seu microfone e diga "Abra-se, Sésamo". A porta deve abrir e permitir que você entre na casa de gengibre.