음성 인식 추가

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

음성 인식 (STT)은 음성 소리로부터 자동으로 텍스트를 생성하는 기술의 한 형태입니다. STT를 사용하면 플레이어가 NPC와 대화할 수 있도록 하여 더 몰입감 있는 세계를 만들고, 특정 오디오를 미리 녹음할 필요 없이 텍스트를 생성하며, 운동 또는 시각적 제한이 있는 플레이어의 접근성을 개선하고, 인벤토리를 열거나 마법을 시전하는 등의 행동을 위한 음성 단축키를 통해 플레이어에게 핸즈프리 제어를 제공할 수 있습니다.

Gingerbread House - Start .rbxl 파일을 시작점으로 사용하여, 이 튜토리얼에서는 플레이어가 3D 세계의 객체와 상호작용할 수 있도록 STT를 구현하는 방법을 포함하여 음성으로부터 동적으로 생성된 텍스트를 게임에 추가하는 방법을 보여줍니다.

오디오 객체

STT 오디오를 생성하려면 이 튜토리얼 전반에 걸쳐 작업할 오디오 객체를 이해하는 것이 중요합니다. STT에는 세 가지 유형의 오디오 객체가 있습니다:

  • AudioDeviceInput 객체는 노트북, 전화기 또는 헤드셋의 마이크와 같은 실제 세계의 물리적 하드웨어 장치입니다.
  • AudioSpeechToText 객체는 음성 소리를 텍스트 문자열로 변환합니다.
  • Wires는 오디오 스트림을 한 객체에서 다른 객체로 전달합니다.

이 모든 오디오 객체는 플레이어의 행동에 대한 응답으로 STT 텍스트를 생성하기 위해 함께 작동합니다. 예를 들어, 플레이어가 노트북으로 게임을 하면서 헤드셋을 착용하고 있는 경우:

  • AudioDeviceInput은 플레이어의 음성을 마이크에 말한 대로 캡처하고 오디오 스트림으로 변환합니다.
  • WireAudioDeviceInput에서 AudioSpeechToText로 오디오 스트림을 전달합니다.
  • AudioSpeechToText는 플레이어의 음성을 텍스트로 변환합니다.
  • 게임은 이 텍스트를 읽고, 예를 들어 화면에 말한 텍스트를 표시하거나 플레이어의 명령에 따라 문을 여는 등의 행동을 수행합니다.

마이크 사용 활성화

게임에 STT를 추가하기 전에 먼저 마이크 사용을 활성화하고 게임을 게시해야 합니다.

  1. Studio에서 Gingerbread House - Start 파일을 엽니다.
  2. 로컬 복사본을 만듭니다.
  3. 게임의 로컬 복사본을 게시합니다.
  4. Studio로 돌아가서 파일경험 설정통신으로 이동합니다.
  5. 마이크 활성화를 켭니다.
  6. 변경 사항을 저장합니다.

간단한 음성 캡처 추가

Gingerbread House - Start 파일의 로컬 복사본에 간단한 음성 캡처를 추가하려면:

  1. 최신 음성 API 사용을 활성화합니다.

    1. 탐색기 창에서 VoiceChatService를 선택합니다.
    2. 속성 창에서 UseAudioApiEnabled로 설정합니다.
  2. 음성 단어를 캡처할 수 있는 기본 오디오 객체를 생성합니다.

    1. 탐색기 창에서 Workspace > DialogueVolume으로 이동합니다.
    2. DialogueVolume 폴더 내의 모든 객체를 삭제합니다.
    3. DialogueVolume 폴더에 다음 객체를 삽입합니다:
      • 음성을 캡처할 AudioDeviceInput.
      • 음성을 텍스트로 변환할 AudioSpeechToText.
      • 오디오 장치 입력에서 STT 인스턴스로 스트림을 전달할 Wire.
    4. AudioSpeechToText 객체의 속성 창에서 Enabled 상태를 켭니다.
    5. Wire 객체의 속성 창에서:
      1. SourceInstance를 새 AudioDeviceInput으로 설정하여 이 특정 오디오 인스턴스에서 오디오를 전달하도록 지정합니다.
      2. TargetInstance를 새 AudioSpeechToText로 설정하여 이 특정 오디오 인스턴스로 오디오를 전달하도록 지정합니다.
  3. 런타임 시 오디오 장치 입력의 Player 속성을 로컬 플레이어로 설정합니다. 이는 Roblox에 어떤 사용자의 마이크에서 오디오를 캡처할지를 알려줍니다.

    1. 탐색기 창에서 StarterPlayer > StarterCharacterScripts로 이동합니다.
    2. LocalScript를 삽입하고 이름을 ListenForMagicWord로 지정합니다.
    3. 새 로컬 스크립트에 다음 코드를 붙여넣습니다:
    local audioDeviceInput = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioDeviceInput')
    -- 로컬 플레이어의 마이크를 바인딩합니다
    audioDeviceInput.Player = game.Players.LocalPlayer

음성 캡처 테스트

간단한 음성 캡처를 추가한 후, 게임을 플레이 테스트하여 STT 구현이 제대로 작동하는지 확인할 수 있습니다. 마이크에 대고 말하면 AudioSpeechToText 속성이 음성의 텍스트 버전으로 채워져야 합니다.

음성 캡처를 테스트하려면:

  1. 테스트 > 클라이언트 및 서버에서 팀 테스트를 선택합니다.
  2. 시작을 클릭하여 테스트 서버를 시작합니다.
  3. 새 테스트 서버에서 마이크의 음소거를 해제하고 몇 마디를 말합니다.
  4. 탐색기 창에서 Workspace > DialogueVolume > AudioSpeechToText로 이동합니다.
  5. AudioSpeechToText속성 창에서 마이크에 말한 단어가 Text 속성의 값으로 나타났는지 확인합니다.

게임 플레이와 STT 사용

STT를 게임 플레이와 연결하여 플레이어가 마이크에 "Open Sesame"라고 말할 때 생강빵 집의 문이 열리도록 하려면:

  1. 클라이언트를 서버에 연결하는 원격 이벤트를 생성합니다.

    1. 탐색기 창에서 ReplicatedStorage 아래에 RemoteEvent를 삽입합니다.
    2. 이름을 OpenDoor로 지정합니다.
  2. 생강빵 집 문을 여는 애니메이션을 추가하는 새 스크립트를 추가합니다.

    1. ServerScriptService 아래에 서버 측 Script를 삽입합니다.
    2. 이름을 DoorService로 지정합니다.
    3. 새 스크립트에 다음 코드를 붙여넣습니다:
    -- 서버와 클라이언트 간의 공유 저장소를 위한 ReplicatedStorage 서비스 가져오기
    -- 트윈 시스템을 위한 TweenService 가져오기
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local TweenService = game:GetService("TweenService")
    -- 클라이언트가 서버에 문을 열도록 요청할 수 있게 합니다
    local remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")
    -- 문이 아래로 이동하고 열리도록 애니메이션하는 함수
    local 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
    -- 이벤트에 함수를 연결합니다
    remoteEvent.OnServerEvent:Connect(openDoor)
  3. 음성 인식과 문을 연결하여 플레이어가 마이크에 말할 때 행동이 발생하도록 합니다.

    1. StarterPlayer > StarterCharacterScripts로 이동합니다.
    2. 이전에 생성한 ListenForMagicWord 스크립트를 엽니다.
    3. 다음 줄을 추가합니다:
    -- 서버와 클라이언트 간의 공유 저장소를 위한 ReplicatedStorage 서비스 가져오기
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    -- 클라이언트가 서버에 발사할 RemoveEvent 가져오기
    local remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")
    -- 장면 그래프에서 STT 노드를 찾습니다
    -- 노드의 Text 속성은 음성을 인식할 때 업데이트됩니다
    local speechToText = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioSpeechToText')
    -- STT가 플레이어가 "Open Sesame"라고 말하는 것을 캡처하면 서버에 문을 열도록 지시하는 함수
    speechToText:GetPropertyChangedSignal('Text'):Connect(function()
    local text = speechToText.Text
    if text == '' then
    return
    end
    print(text)
    if (text.find(text, 'open sesame') ~= nil) then
    remoteEvent:FireServer()
    end
    speechToText.Text = ''
    end)
  4. STT 구현을 테스트합니다.

    1. 테스트 > 클라이언트 및 서버에서 팀 테스트를 선택합니다.
    2. 시작을 클릭하여 테스트 서버를 시작합니다.
    3. 새 테스트 서버에서 문에 다가가 마이크의 음소거를 해제하고 "Open Sesame"라고 말합니다. 문이 열리고 생강빵 집으로 들어갈 수 있어야 합니다.
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.