시작하기
중급 튜토리얼

음성 인식 추가하기

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

음성 인식(STT)은 음성 소리로부터 자동으로 텍스트를 생성하는 기술의 일종입니다. STT를 사용하면 플레이어가 NPC와 대화하고, 특정 오디오를 미리 녹음할 필요 없이 텍스트를 생성하며, 운동 능력이나 시각적 제한이 있는 플레이어를 위한 접근성을 향상시키고, 인벤토리 열기나 주문 시전과 같은 동작을 위한 음성 단축키를 통해 플레이어에게 핸즈프리 제어를 제공함으로써 더욱 몰입감 있는 세계를 창조할 수 있습니다.

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

오디오 객체

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. Explorer 창에서 VoiceChatService를 선택합니다.
    2. Properties 창에서 UseAudioApiEnabled로 설정합니다.
  2. 음성 단어를 캡처할 수 있는 기본 오디오 객체를 생성합니다.

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

    1. Explorer 창에서 StarterPlayer > StarterCharacterScripts로 이동합니다.
    2. LocalScript를 삽입하고 이름을 ListenForMagicWord로 지정합니다.
    3. 새 로컬 스크립트에 다음 코드를 붙여넣습니다:

    local audioDeviceInput = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioDeviceInput')
    -- 로컬 플레이어에 마이크를 바인딩합니다
    audioDeviceInput.Player = game.Players.LocalPlayer

음성 캡처 테스트하기

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

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

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

게임 플레이와 함께 STT 사용하기

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

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

    1. Explorer 창에서 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'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.