Reconocimiento de voz (STT) es una forma de tecnología que genera automáticamente texto a partir de sonidos de voz. Con STT, puedes crear mundos más inmersivos al permitir que los jugadores hablen con NPCs, generar texto sin necesidad de grabar audio específico por adelantado, mejorar la accesibilidad para jugadores con limitaciones motoras o visuales, y proporcionar a los jugadores controles manos libres a través de accesos directos de voz para acciones como abrir su inventario o lanzar un hechizo.
Utilizando el archivo Gingerbread House - Start .rbxl como punto de partida, este tutorial te muestra cómo agregar texto generado dinámicamente a partir del habla a tu experiencia, incluyendo orientación sobre cómo implementar STT para que el jugador pueda interactuar con objetos en tu mundo 3D.
Objetos de audio
Para crear audio STT, es importante entender los objetos de audio con los que estarás trabajando a lo largo de este tutorial. Hay tres tipos de objetos de audio para STT:
- El objeto AudioDeviceInput es un dispositivo de hardware físico en el mundo real, como un micrófono en una laptop, teléfono o auriculares.
- El objeto AudioSpeechToText convierte los sonidos del habla en cadenas de texto.
- Wires transporta flujos de audio de un objeto a otro.
Todos estos objetos de audio trabajan juntos para generar texto STT en respuesta a las acciones del jugador. Por ejemplo, si el jugador está usando auriculares mientras juega en su laptop:
- El AudioDeviceInput captura el habla del jugador, tal como se habla en su micrófono y como un flujo de audio.
- Un Wire transporta el flujo de audio desde el AudioDeviceInput al AudioSpeechToText.
- El AudioSpeechToText convierte el habla del jugador en texto.
- La experiencia lee este texto y realiza una acción, como mostrar el texto hablado en la pantalla o abrir una puerta a la orden del jugador.
Habilitar el uso del micrófono
Antes de agregar STT a una experiencia, primero debes habilitar el uso del micrófono y publicar la experiencia.
- Abre el archivo Gingerbread House - Start en Studio.
- Crea una copia local.
- Publica tu copia local de la experiencia.
- De vuelta en Studio, ve a Archivo ⟩ Configuración de la experiencia ⟩ Comunicación.
- Activa Habilitar micrófono.
- Guarda tus cambios.
Agregar captura de voz simple
Para agregar captura de voz simple a tu copia local del archivo Gingerbread House - Start:
Habilita el uso de la última API para voz.
- En la ventana Explorer, selecciona VoiceChatService.
- En la ventana Properties, establece UseAudioApi en Enabled.
Crea los objetos de audio básicos que te permitirán capturar palabras habladas.
- En la ventana Explorer, ve a Workspace > DialogueVolume.
- Elimina todos los objetos dentro de la carpeta DialogueVolume.
- Inserta los siguientes objetos en la carpeta DialogueVolume:
- Un AudioDeviceInput para capturar la voz.
- Un AudioSpeechToText para convertir la voz en texto.
- Un Wire para transportar el flujo desde la entrada del dispositivo de audio a la instancia de STT.
- En la ventana Properties del objeto AudioSpeechToText, establece el estado Enabled en activado.
- En la ventana Properties del objeto Wire:
- Establece SourceInstance en tu nuevo AudioDeviceInput para especificar que quieres que el cable transporte audio desde esta instancia de audio específica.
- Establece TargetInstance en tu nuevo AudioSpeechToText para especificar que quieres que el cable transporte audio a esta instancia de audio específica.
Establece la propiedad Player de la entrada de dispositivo de audio al jugador local en tiempo de ejecución. Esto le dice a Roblox de qué usuario capturar audio desde el micrófono.
- En la ventana Explorer, ve a StarterPlayer > StarterCharacterScripts.
- Inserta un LocalScript y nómbralo ListenForMagicWord.
- Pega el siguiente código en el nuevo script local:
local audioDeviceInput = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioDeviceInput')-- Asocia el micrófono al jugador localaudioDeviceInput.Player = game.Players.LocalPlayer
Probar tu captura de voz
Después de agregar la captura de voz simple, puedes probar la experiencia para asegurarte de que tu implementación de STT funcione correctamente. Hablar en tu micrófono debería llenar la propiedad AudioSpeechToText con la versión de texto de tu habla.
Para probar tu captura de voz:
- En Prueba > Clientes y Servidores, selecciona Prueba de equipo.
- Haz clic en Iniciar para comenzar el servidor de prueba.
- En el nuevo servidor de prueba, desactiva el silencio de tu micrófono y habla algunas palabras.
- En la ventana Explorer, ve a Workspace > DialogueVolume > AudioSpeechToText.
- En la ventana Properties de AudioSpeechToText, confirma que las palabras que hablaste en tu micrófono han aparecido como el valor de la propiedad Text.
Usar STT con la jugabilidad
Para conectar STT con la jugabilidad y hacer que la puerta de la casa de jengibre se abra cuando el jugador diga "Open Sesame" en su micrófono:
Crea un evento remoto para conectar el cliente al servidor.
- Nómbralo OpenDoor.
Agrega un nuevo script para animar la apertura de la puerta de la casa de jengibre.
- Bajo ServerScriptService, inserta un Script del lado del servidor.
- Nómbralo DoorService.
- Pega el siguiente código en el nuevo script:
-- Obtiene el servicio ReplicatedStorage para almacenamiento compartido entre el servidor y el cliente-- Obtiene el TweenService para el sistema de tweeninglocal ReplicatedStorage = game:GetService("ReplicatedStorage")local TweenService = game:GetService("TweenService")-- Permite que el cliente le pida al servidor que abra la puertalocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- Función que anima la puerta para moverse hacia abajo y abrirselocal 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 la función al eventoremoteEvent.OnServerEvent:Connect(openDoor)Conecta la puerta al reconocimiento de voz para que ocurra una acción cuando el jugador hable en su micrófono.
- Ve a StarterPlayer > StarterCharacterScripts.
- Abre el script ListenForMagicWord que creaste anteriormente.
- Agrega las siguientes líneas:
-- Obtiene el servicio ReplicatedStorage para almacenamiento compartido entre el servidor y el clientelocal ReplicatedStorage = game:GetService("ReplicatedStorage")-- Obtiene el RemoveEvent que el cliente disparará al servidorlocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- Encuentra el nodo STT en el gráfico de escena-- La propiedad Text del nodo se actualiza a medida que reconoce el hablalocal speechToText = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioSpeechToText')-- Función que le dice al servidor que abra la puerta si el STT captura al jugador diciendo "Open Sesame"speechToText:GetPropertyChangedSignal('Text'):Connect(function()local text = speechToText.Textif text == '' thenreturnendprint(text)if (text.find(text, 'open sesame') ~= nil) thenremoteEvent:FireServer()endspeechToText.Text = ''end)Prueba tu implementación de STT.
- En Prueba > Clientes y Servidores, selecciona Prueba de equipo.
- Haz clic en Iniciar para comenzar el servidor de prueba.
- En el nuevo servidor de prueba, camina hacia la puerta, desactiva el silencio de tu micrófono y di "Open Sesame". La puerta debería abrirse y permitirte entrar en la casa de jengibre.