Roblox의 모듈형 오디오 객체는 경험 내에서 사운드 및 음성 채팅에 대한 동적 제어를 가능하게 합니다. 거의 모든 오디오 객체는 실제 오디오 장치에 해당하며, 이들은 모두 함께 작동하여 물리적 대응물처럼 오디오를 캡처하고 재생합니다.
예를 들어, 모든 오디오 객체는 개념적으로 다음과 같은 범주에 속합니다:
- 오디오 스트림을 생산하는 객체, 예를 들어 오디오 플레이어.
- 오디오 스트림을 소비하는 객체, 예를 들어 오디오 이미터.
- 오디오 스트림을 수정하는 객체, 예를 들어 오디오 효과.
- 한 오디오 객체에서 다른 오디오 객체로 오디오 스트림을 전송하는 객체, 예를 들어 와이어.
이 가이드를 읽고 이러한 모든 오디오 객체가 함께 작동하여 사운드를 방출하는 방법을 배우면서, 경험에서 플레이어로, 그리고 그 반대 방향으로 음악, 사운드 효과 및 인간의 목소리를 정확하게 캡처하고 전달하는 방법을 배우게 될 것입니다.
오디오 재생
경험 내에서 오디오를 재생하려면 사용 가능한 각 오디오 객체의 역할을 이해하는 것이 중요합니다:
- AudioPlayer는 설정된 오디오 자산 ID를 사용하여 오디오 파일을 로드하고 재생합니다.
- AudioEmitter는 3D 환경에 오디오를 방출하는 가상 스피커입니다.
- AudioListener는 3D 환경에서 오디오를 수집하는 가상 마이크입니다.
- AudioDeviceOutput은 실제 세계의 물리적 하드웨어 장치로, 스피커나 헤드폰과 같은 장치입니다.
- AudioDeviceInput은 실제 세계의 물리적 마이크입니다.
- AudioTextToSpeech 객체는 텍스트를 오디오로 변환합니다.
- AudioSpeechToText 객체는 음성 오디오를 텍스트로 변환합니다.
- Wire는 한 오디오 객체에서 다른 오디오 객체로 오디오 스트림을 전송합니다.
이러한 오디오 객체를 어떻게 조합하느냐는 플레이어의 스피커나 헤드폰으로 직접 오디오를 방출할 것인지, 아니면 3D 공간의 객체에서 방출할 것인지에 따라 다릅니다. 다음 섹션에서는 두 가지 시나리오를 자세히 설명합니다.
2D 오디오
2D 오디오는 특정 위치에서 재생되지 않는 비방향성 사운드로, 플레이어의 위치나 방향에 관계없이 동일한 볼륨으로 유지됩니다. 이 유형의 오디오에는 세 가지 오디오 객체가 필요합니다:
- 오디오 스트림을 생성하는 오디오 플레이어.
- 실제 세계에서 오디오 스트림을 재생하는 물리적 하드웨어 장치.
- 오디오 플레이어에서 출력 장치로 오디오 스트림을 전송하는 와이어.
Studio에서 2D 오디오를 위한 이러한 오디오 객체를 구성하는 방법을 보여주기 위해, 다음 다이어그램은 각 객체를 실제 오디오 장치의 대응물과 비교합니다. 요약하자면:
- AudioPlayer는 지정된 설정으로 오디오 자산을 로드하고 재생합니다.
- AudioDeviceOutput은 플레이어가 스피커나 헤드폰을 통해 오디오를 들을 수 있게 합니다.
- Wire는 오디오 플레이어의 SourceInstance 속성으로 오디오 플레이어에 연결되고, 물리적 하드웨어 장치의 TargetInstance 속성으로 연결됩니다. 그런 다음 오디오 스트림을 오디오 플레이어에서 플레이어의 출력 장치로 전송하는 다리 역할을 합니다.

비방향성 오디오를 재생하려면:
- Explorer 창에서 SoundService로 이동하여 다음을 삽입합니다:
- 오디오 소스를 생성하기 위한 AudioPlayer 객체.
- 경험 전반에 걸쳐 재생되는 스피커를 생성하기 위한 AudioDeviceOutput 객체.
- 오디오 플레이어에서 스피커로 스트림을 연결하기 위한 Wire 객체.
- AudioPlayer 객체의 Properties 창에서:
- AssetID를 유효한 오디오 자산 ID로 설정합니다. 사용자 정의 오디오가 없는 경우, Creator Store에서 무료로 사용할 수 있는 오디오 자산을 찾을 수 있습니다.
- 오디오가 지속적으로 반복되기를 원하면 Looping을 활성화합니다.
- 오디오를 재생할 진폭의 단위로 Volume을 설정합니다.
- Wire 객체의 Properties 창에서:
- SourceInstance를 AudioPlayer로 설정하여 이 특정 오디오 플레이어 내에서 오디오를 재생하도록 지정합니다.
- TargetInstance를 AudioDeviceOutput으로 설정하여 이 특정 스피커에서 오디오를 재생하도록 지정합니다.
이제 플레이어가 경험에 참여할 때 또는 게임 이벤트나 UI 상호작용의 결과로 비방향성 오디오를 트리거할 수 있습니다. 이러한 사용 사례에 대한 코드 샘플 참조는 2D 오디오 추가 튜토리얼을 참조하세요.
3D 오디오
3D 오디오는 3D 공간의 특정 위치에서 재생되는 방향성 사운드로, 플레이어의 위치와 사운드에 대한 방향에 따라 볼륨이 증가하거나 감소합니다. 이 유형의 오디오에는 여섯 가지 오디오 객체가 필요합니다:
- 오디오 스트림을 생성하는 오디오 플레이어.
- 환경 내에서 오디오 스트림을 방출하는 오디오 이미터.
- 환경에서 오디오 스트림을 수집하는 리스너.
- 실제 세계에서 오디오 스트림을 재생하는 물리적 하드웨어 장치.
- 오디오 플레이어에서 이미터로 오디오 스트림을 전송하는 와이어 하나와 리스너에서 출력 장치로 오디오 스트림을 전송하는 와이어 하나.
Studio에서 3D 오디오를 위한 이러한 오디오 객체를 구성하는 방법을 보여주기 위해, 다음 다이어그램은 각 객체를 실제 오디오 장치의 대응물과 비교합니다. 요약하자면:
- AudioPlayer는 지정된 설정으로 오디오 자산을 로드하고 재생합니다.
- AudioEmitter의 부모 위치는 3D 공간 내에서 오디오가 방출되는 위치를 결정합니다.
- AudioListener는 기본 리스너 위치를 설정한 위치에 따라 로컬 카메라 또는 플레이어 캐릭터의 Humanoid.RootPart에서 이미터의 오디오를 수집합니다.
- AudioDeviceOutput은 플레이어가 스피커나 헤드폰을 통해 오디오를 들을 수 있게 합니다.
- 첫 번째 Wire는 오디오 플레이어의 SourceInstance 속성으로 오디오 플레이어에 연결되고, 이미터의 TargetInstance 속성으로 연결됩니다. 그런 다음 오디오 스트림을 오디오 플레이어에서 이미터로 전송하는 다리 역할을 합니다.
- 두 번째 Wire는 리스너의 SourceInstance 속성으로 리스너에 연결되고, 물리적 하드웨어 장치의 TargetInstance 속성으로 연결됩니다. 그런 다음 오디오 스트림을 리스너에서 플레이어의 출력 장치로 전송하는 다리 역할을 합니다.

위치 기반 오디오를 재생하려면:
플레이어가 경험에 스폰될 때 AudioListener를 생성할 위치를 선택합니다.
- Explorer 창에서 SoundService를 선택합니다.
- Properties 창에서 ListenerLocation을 다음 중 하나로 설정합니다:
- Default - 음성 채팅을 활성화한 경험에서 리스너를 Workspace.CurrentCamera에 생성하고 부모로 설정합니다.
- None - 리스너를 생성하지 않습니다. 이 옵션은 스크립트를 통해 리스너를 생성하려는 경우 유용합니다.
- Character - 로컬 플레이어의 캐릭터에 리스너를 생성하고 부모로 설정합니다.
- Camera - 리스너를 Workspace.CurrentCamera에 생성하고 부모로 설정합니다.
Explorer 창에서 오디오를 방출할 3D 객체로 이동하여 다음을 삽입합니다:
- 오디오 소스를 생성하기 위한 AudioPlayer 객체.
- 3D 객체에서 위치 기반 스트림을 방출하기 위한 AudioEmitter 객체.
- 오디오 플레이어에서 오디오 이미터로 스트림을 연결하기 위한 Wire 객체.
AudioPlayer 객체의 Properties 창에서:
- AssetID를 유효한 오디오 자산 ID로 설정합니다. 사용자 정의 오디오가 없는 경우, Creator Store에서 무료로 사용할 수 있는 오디오 자산을 찾을 수 있습니다.
- 오디오가 지속적으로 반복되기를 원하면 Looping을 활성화합니다.
- 오디오를 재생할 진폭의 단위로 Volume을 설정합니다.
AudioEmitter 객체의 Properties 창에서 DistanceAttenuation을 설정하여 리스너가 이미터를 듣는 볼륨을 결정하는 거리 기반 곡선을 설정합니다.
예를 들어, 다음 곡선은 리스너가 이미터에서 50 스터드 떨어져 있을 때 오디오의 볼륨을 절반으로 줄이고, 리스너가 70 스터드 떨어져 있을 때 볼륨을 0으로 급격히 줄입니다.

Wire 객체의 Properties 창에서:
- SourceInstance를 AudioPlayer로 설정하여 이 특정 오디오 플레이어 내에서 오디오를 재생하도록 지정합니다.
- TargetInstance를 AudioEmitter로 설정하여 이 특정 오디오 이미터에서 오디오를 재생하도록 지정합니다.
이제 플레이어가 경험에 참여할 때 또는 게임 이벤트나 UI 상호작용의 결과로 방향성 오디오를 트리거할 수 있습니다. 이러한 사용 사례에 대한 코드 샘플 참조는 3D 오디오 추가 튜토리얼을 참조하세요.
텍스트 음성 변환
텍스트 음성 변환 (TTS)는 텍스트 문자열을 인공 음성을 사용하여 음성 사운드로 변환하는 보조 기술의 한 형태입니다. 이 유형의 오디오에는 다섯 가지 오디오 객체가 필요합니다:
- 텍스트를 오디오로 로드하고 변환하는 오디오 음성 생성기.
- 환경 내에서 오디오 스트림을 방출하는 오디오 이미터.
- 환경에서 오디오 스트림을 수집하는 리스너.
- 실제 세계에서 오디오 스트림을 재생하는 물리적 하드웨어 장치.
- 2D 오디오의 경우 - 오디오 음성 생성기에서 출력 장치로 오디오 스트림을 전송하는 와이어.
- 3D 오디오의 경우 - 두 개의 와이어: 하나는 오디오 음성 생성기에서 이미터로 오디오 스트림을 전송하고, 다른 하나는 리스너에서 출력 장치로 오디오 스트림을 전송합니다.
이 객체들을 구성하는 방법은 2D TTS 오디오를 생성할 것인지, 3D TTS 오디오를 생성할 것인지에 따라 다릅니다. 각 프로세스에 대한 자세한 내용은 다음 탭을 클릭하세요.
Studio에서 2D TTS 오디오를 위한 이러한 오디오 객체를 구성하는 방법을 보여주기 위해, 다음 다이어그램은 각 객체를 실제 오디오 장치의 대응물과 비교합니다. 요약하자면:
- AudioTextToSpeech 객체는 텍스트 문자열을 음성 사운드로 로드하고 변환합니다.
- AudioDeviceOutput은 플레이어가 스피커나 헤드폰을 통해 오디오를 들을 수 있게 합니다.
- Wire는 오디오 음성 생성기와 SourceInstance 속성으로 연결되고, 물리적 하드웨어 장치와 TargetInstance 속성으로 연결됩니다. 그런 다음 오디오 스트림을 오디오 음성 생성기에서 플레이어의 출력 장치로 전송하는 다리 역할을 합니다.

2D 텍스트 음성 변환 오디오를 재생하려면:
- Explorer 창에서 SoundService로 이동하여 다음을 삽입합니다:
- 오디오 음성 생성기를 생성하기 위한 AudioTextToSpeech 객체.
- 경험 전반에 걸쳐 재생되는 스피커를 생성하기 위한 AudioDeviceOutput 객체.
- 오디오 음성 생성기에서 스피커로 스트림을 연결하기 위한 Wire 객체.
- AudioTextToSpeech 객체의 Properties 창에서:
- Text를 음성이 말할 내용을 원하는 대로 설정합니다. 요청당 300자 제한이 있습니다.
- 사용할 인공 음성의 번호로 VoiceId를 설정합니다. 사용 가능한 음성의 전체 목록은 인공 음성 목록을 참조하세요.
- 오디오를 재생할 진폭의 단위로 Volume을 설정합니다.
- Wire 객체의 Properties 창에서:
- SourceInstance를 AudioTextToSpeech로 설정하여 이 특정 오디오 음성 생성기 내에서 오디오를 재생하도록 지정합니다.
- TargetInstance를 AudioDeviceOutput으로 설정하여 이 특정 스피커에서 오디오를 재생하도록 지정합니다.
이제 스크립트를 사용하여 TTS 오디오를 트리거할 수 있습니다. TTS 오디오에 대한 코드 샘플 참조, 플레이어, 환경 상태 또는 게임 플레이 상태에 따라 적응하는 컨텍스트 인식 TTS를 구성하는 방법은 텍스트 음성 변환 추가 튜토리얼을 참조하세요.
인공 음성 목록
| VoiceID | 음성 설명 | 오디오 예제 |
|---|---|---|
| 1 | 영국 남성 | |
| 2 | 영국 여성 | |
| 3 | 미국 남성 #1 | |
| 4 | 미국 여성 #1 | |
| 5 | 미국 남성 #2 | |
| 6 | 미국 여성 #2 | |
| 7 | 호주 남성 | |
| 8 | 호주 여성 | |
| 9 | 레트로 음성 #1 | |
| 10 | 레트로 음성 #2 | |
| 11 | 호스트 음성 | |
| 101 | 스페인 남성 | |
| 102 | 스페인 여성 | |
| 201 | 독일 남성 | |
| 202 | 독일 여성 | |
| 301 | 이탈리아 남성 | |
| 302 | 이탈리아 여성 | |
| 401 | 프랑스 남성 | |
| 402 | 프랑스 여성 | |
| 501 | 중국 남성 | |
| 502 | 중국 여성 | |
| 601 | 힌디어 남성 | |
| 602 | 힌디어 여성 | |
| 701 | 일본 남성 | |
| 702 | 일본 여성 | |
| 801 | 아랍어 남성 | |
| 802 | 아랍어 여성 | |
| 901 | 한국어 남성 | |
| 902 | 한국어 여성 | |
| 1001 | 포르투갈 남성 | |
| 1002 | 포르투갈 여성 |
음성 인식
음성 인식 (STT)는 음성 사운드에서 자동으로 텍스트 문자열을 생성하는 기술의 한 형태입니다. 이 유형의 오디오에는 세 가지 오디오 객체가 필요합니다:
- 오디오를 텍스트로 로드하고 변환하는 텍스트 생성기.
- 오디오 입력을 캡처하는 마이크와 같은 물리적 하드웨어 장치.
- 입력 장치에서 텍스트 생성기로 오디오 스트림을 전송하는 와이어.
이 모든 오디오 객체는 플레이어의 행동에 대한 응답으로 STT 텍스트를 생성하기 위해 함께 작동합니다. 예를 들어, 플레이어가 노트북으로 경험을 플레이하는 동안 헤드셋을 착용하고 있는 경우:
- AudioDeviceInput은 플레이어의 음성을 캡처하여 마이크에 말한 내용을 오디오 스트림으로 변환합니다.
- AudioSpeechToText는 플레이어의 음성을 텍스트로 변환합니다.
- 경험은 이 텍스트를 읽고, 화면에 음성 텍스트를 표시하거나 플레이어의 명령에 따라 문을 여는 등의 작업을 수행합니다.

경험에서 음성 인식을 구현하려면:
- 최신 음성 API 사용을 활성화합니다.
- Explorer 창에서 VoiceChatService를 선택합니다.
- Properties 창에서 UseAudioApi를 Enabled로 설정합니다.
- Explorer 창에서 SoundService로 이동하여 다음을 삽입합니다:
- 음성을 캡처하기 위한 AudioDeviceInput.
- 음성을 텍스트로 변환하기 위한 AudioSpeechToText.
- 오디오 장치 입력에서 STT 인스턴스로 스트림을 전송하는 Wire.
- AudioSpeechToText 객체의 Properties 창에서 Enabled 상태를 켭니다.
- Wire 객체의 Properties 창에서:
- SourceInstance를 새 AudioDeviceInput으로 설정하여 이 특정 오디오 인스턴스에서 오디오를 전송하도록 지정합니다.
- TargetInstance를 새 AudioSpeechToText로 설정하여 이 특정 오디오 인스턴스로 오디오를 전송하도록 지정합니다.
- 런타임에서 오디오 장치 입력의 Player 속성을 로컬 플레이어로 설정합니다: audioDeviceInput.Player = game.Players.LocalPlayer. 이는 Roblox에 어떤 사용자의 마이크에서 오디오를 캡처할지를 알려줍니다.
경험에서 STT를 설정한 후, 스크립트를 사용하여 이를 트리거할 수 있습니다. 코드 샘플 참조는 음성 인식 추가 튜토리얼을 참조하세요.
지원되는 언어
지원되는 언어를 활성화하기 위해 구성할 필요는 없습니다. Roblox는 오디오에서 말하는 언어를 자동으로 감지하고 이를 전사합니다.
STT는 다음 언어를 지원합니다:
- 아랍어
- 중국어 (간체)
- 중국어 (번체)
- 영어
- 프랑스어
- 독일어
- 인도네시아어
- 이탈리아어
- 일본어
- 한국어
- 폴란드어
- 포르투갈어
- 스페인어
- 러시아어
- 터키어
- 태국어
- 베트남어
유사한 단어 필터링
경험에서 STT를 구현할 때, 플레이어가 실제로 말하기를 원하는 단어와 유사한 단어를 필터링하여 일치 정확도를 개선하고 싶을 수 있습니다. 이를 위해 AudioSpeechToText에서 인식된 단어를 알려진 단어 목록과 비교할 수 있습니다:
- AudioSpeechToText의 Text 출력을 정리하고 토큰화하여 구문 분석 및 비교할 수 있는 소문자 문자열 테이블을 생성합니다.
- 구두점 문자를 제거합니다.
- 전체 문자열을 소문자로 변환합니다.
- 공백으로 문자열을 나누어 단어 테이블을 생성합니다.
- 비교를 위해 문자열을 준비하기 위해 후보 테이블을 생성합니다.
- 각 참조 문자열을 정리하고 토큰화합니다.
- 이러한 처리된 단어를 별도의 테이블에 저장합니다.
- 두 테이블의 단어를 비교하고 일치시켜 목표 구문에 가까운 음성 입력을 인식합니다. 작은 변형이 포함되어도 괜찮습니다.
- 간단한 확인을 위해 문자열이 정확히 동일한지 확인합니다.
- 더 유연한 일치를 위해 "colour" 대신 "color"와 같은 대체를 허용하거나 단어의 하위 집합을 일치시키고 유사성 점수를 계산하는 사용자 정의 로직을 작성할 수 있습니다.
오디오 사용자 정의
오디오 효과를 사용하면 플레이어의 귀에 도달하기 전에 오디오 스트림을 비파괴적으로 수정하거나 향상시킬 수 있습니다. 이러한 효과를 적용하여 경험 내에서 오디오를 더욱 몰입감 있게 만들 수 있습니다. 예를 들어, AudioEqualizer 객체를 사용하여 비가 소음처럼 들리게 하거나, AudioCompressor 객체를 사용하여 사운드의 최대 볼륨을 제어하거나, AudioReverb를 사용하여 실내 공간에서 소리의 더 현실적인 반사를 추가할 수 있습니다.
오디오 효과를 구성하는 방법과 오디오를 사용자 정의하기 전후의 나란히 비교를 보려면 오디오 효과를 참조하세요.


오디오 트리거
스크립트에서 Play()를 호출하여 올바르게 연결된 AudioPlayer 객체에서 오디오를 상황에 맞게 트리거할 수 있습니다. 예를 들어, 스크립트를 오디오 플레이어에 부모로 설정하면 다음과 같이 오디오 자산을 트리거할 수 있습니다:
local audio = script.Parent
local something = ...
something.SomeEvent:Connect(function()
audio:Play()
end)게임 플레이 피드백, UI 상호작용 및 반복 배경 소음과 같은 오디오를 트리거하기 위한 더 복잡한 코드 샘플은 2D 오디오 추가, 3D 오디오 추가, 및 텍스트 음성 변환 추가 튜토리얼을 참조하세요.