SoundService

소리 관련 기능을 제공합니다.

# Methods

[{"index":"boolean IsPlayBGM() (ClientOnly)","0":"배경음악이 재생 중인지를 반환합니다."}]

[{"index":"void LoadSound(string id) (ClientOnly)","0":"음원을 불러옵니다."}]

[{"index":"void PauseBGM() (Client)","0":"재생 중인 배경음악을 일시 정지합니다."}]

[{"index":"void PauseBGM(Entity messageOwnerEntity = nil) (Client)","0":"재생 중인 배경음악을 일시 정지합니다."}]

[{"index":"void PauseBGM(string targetUserId = nil) (Client)","0":"재생 중인 배경음악을 일시 정지합니다."}]

[{"index":"void PauseSound(string id) (Client)","0":"SoundService를 통해 재생 중인 음원 중 매개 변수로 전달받은 id에 해당하는 모든 음원을 일시 정지합니다. 배경음악은 포함하지 않습니다."}]

[{"index":"void PauseSound(string id, Entity messageOwnerEntity = nil) (Client)","0":"SoundService를 통해 재생 중인 음원 중 매개 변수로 전달받은 id에 해당하는 모든 음원을 일시 정지합니다. 배경음악은 포함하지 않습니다."}]

[{"index":"void PauseSound(string id, string targetUserId = nil) (Client)","0":"SoundService를 통해 재생 중인 음원 중 매개 변수로 전달받은 id에 해당하는 모든 음원을 일시 정지합니다. 배경음악은 포함하지 않습니다."}]

[{"index":"void PlayBGM(string id, float volume) (Client)","0":"배경음악을 재생합니다."}]

[{"index":"void PlayBGM(string id, float volume, Entity messageOwnerEntity = nil) (Client)","0":"배경음악을 재생합니다."}]

[{"index":"void PlayBGM(string id, float volume, string targetUserId = nil) (Client)","0":"배경음악을 재생합니다."}]

[{"index":"void PlayLoopSound(string id, float volume) (Client)","0":"음원을 반복 재생합니다."}]

[{"index":"void PlayLoopSound(string id, float volume, Entity messageOwnerEntity = nil) (Client)","0":"음원을 반복 재생합니다."}]

[{"index":"void PlayLoopSound(string id, float volume, string targetUserId = nil) (Client)","0":"음원을 반복 재생합니다."}]

[{"index":"void PlayLoopSoundAtPos(string id, Vector3 pos, Entity listener, float volume) (Client)","0":"음원을 대상 위치에서 반복 재생합니다."}]

[{"index":"void PlayLoopSoundAtPos(string id, Vector3 pos, Entity listener, float volume, Entity messageOwnerEntity = nil) (Client)","0":"음원을 대상 위치에서 반복 재생합니다."}]

[{"index":"void PlayLoopSoundAtPos(string id, Vector3 pos, Entity listener, float volume, string targetUserId = nil) (Client)","0":"음원을 대상 위치에서 반복 재생합니다."}]

[{"index":"void PlaySound(string id, float volume) (Client)","0":"음원을 재생합니다."}]

[{"index":"void PlaySound(string id, float volume, Entity messageOwnerEntity = nil) (Client)","0":"음원을 재생합니다."}]

[{"index":"void PlaySound(string id, float volume, string targetUserId = nil) (Client)","0":"음원을 재생합니다."}]

[{"index":"void PlaySoundAtPos(string id, Vector3 pos, Entity listener, float volume) (Client)","0":"음원을 대상 위치에서 재생합니다."}]

[{"index":"void PlaySoundAtPos(string id, Vector3 pos, Entity listener, float volume, Entity messageOwnerEntity = nil) (Client)","0":"음원을 대상 위치에서 재생합니다."}]

[{"index":"void PlaySoundAtPos(string id, Vector3 pos, Entity listener, float volume, string targetUserId = nil) (Client)","0":"음원을 대상 위치에서 재생합니다."}]

[{"index":"void ResumeBGM() (Client)","0":"일시 정지된 배경음악 재생을 재개합니다."}]

[{"index":"void ResumeBGM(Entity messageOwnerEntity = nil) (Client)","0":"일시 정지된 배경음악 재생을 재개합니다."}]

[{"index":"void ResumeBGM(string targetUserId = nil) (Client)","0":"일시 정지된 배경음악 재생을 재개합니다."}]

[{"index":"void ResumeSound(string id) (Client)","0":"SoundService를 통해 일시 정지된 음원 중 매개 변수로 전달받은 id에 해당하는 모든 음원 재생을 재개합니다. 배경음악은 포함하지 않습니다."}]

[{"index":"void ResumeSound(string id, Entity messageOwnerEntity = nil) (Client)","0":"SoundService를 통해 일시 정지된 음원 중 매개 변수로 전달받은 id에 해당하는 모든 음원 재생을 재개합니다. 배경음악은 포함하지 않습니다."}]

[{"index":"void ResumeSound(string id, string targetUserId = nil) (Client)","0":"SoundService를 통해 일시 정지된 음원 중 매개 변수로 전달받은 id에 해당하는 모든 음원 재생을 재개합니다. 배경음악은 포함하지 않습니다."}]

[{"index":"void SetBGMVolume(float volume) (Client)","0":"배경음악의 음량을 설정합니다."}]

[{"index":"void SetBGMVolume(float volume, Entity messageOwnerEntity = nil) (Client)","0":"배경음악의 음량을 설정합니다."}]

[{"index":"void SetBGMVolume(float volume, string targetUserId = nil) (Client)","0":"배경음악의 음량을 설정합니다."}]

[{"index":"void StopBGM(boolean immediately) (Client)","0":"배경음악 재생을 중지합니다."}]

[{"index":"void StopBGM(boolean immediately, Entity messageOwnerEntity = nil) (Client)","0":"배경음악 재생을 중지합니다."}]

[{"index":"void StopBGM(boolean immediately, string targetUserId = nil) (Client)","0":"배경음악 재생을 중지합니다."}]

[{"index":"void StopSound(string id) (Client)","0":"SoundService를 통해 재생 중인 음원 중 매개 변수로 전달받은 id에 해당하는 모든 음원 재생을 중지합니다. 배경음악은 포함하지 않습니다."}]

[{"index":"void StopSound(string id, Entity messageOwnerEntity = nil) (Client)","0":"SoundService를 통해 재생 중인 음원 중 매개 변수로 전달받은 id에 해당하는 모든 음원 재생을 중지합니다. 배경음악은 포함하지 않습니다."}]

[{"index":"void StopSound(string id, string targetUserId = nil) (Client)","0":"SoundService를 통해 재생 중인 음원 중 매개 변수로 전달받은 id에 해당하는 모든 음원 재생을 중지합니다. 배경음악은 포함하지 않습니다."}]

##### inherited from Service:

[{"index":"EventHandlerBase ConnectEvent(string key, IScriptFunction eventHandler)","0":"이벤트를 연결합니다. 이 서비스에서 타입의 이름이 key인 이벤트가 발생하면, 핸들러로 통지받습니다. 핸들러는 event 매개 변수를 전달받습니다."}]

[{"index":"EventHandlerBase ConnectEvent(Type eventType, IScriptFunction eventHandler)","0":"이벤트를 연결합니다. 이 서비스에서 타입이 eventType인 이벤트가 발생하면, 핸들러로 통지받습니다. 핸들러는 event 매개 변수를 전달받습니다."}]

[{"index":"boolean DisconnectEvent(string key, EventHandlerBase eventHandler)","0":"타입의 이름이 key인 이벤트와 핸들러와의 이벤트 연결을 끊습니다."}]

[{"index":"boolean DisconnectEvent(Type eventType, EventHandlerBase eventHandler)","0":"타입이 eventType인 이벤트와 핸들러와의 연결을 끊습니다."}]

[{"index":"void SendEvent(EventType sendEvent)","0":"이벤트를 발생시킵니다."}]

# Events

[{"index":"SoundPlayStateChangedEvent","0":"SoundService의 BGM, SoundComponent의 효과음 재생 상태가 변경될 때 발생하는 이벤트입니다."}]

# Examples

#### PlayBGM

시작 시 BGM을 재생하고, BGM을 일시정지하거나 재생을 재개 할 수 있는 버튼을 만드는 예제입니다.
    
    
    @Component
    script BGMController extends Component
        @ExecSpace("ClientOnly")
        method void OnBeginPlay()
        	local defaultUIGroup = _EntityService:GetEntityByPath("/ui/DefaultGroup")
        	if defaultUIGroup == nil then
        		return
        	end
    
        	_SoundService:PlayBGM("92dc353287df4b7894dfcec950edea49", 1)
    
        	local buttonClickCallback = function()
        		if _SoundService:IsPlayBGM() then
        			 _SoundService:PauseBGM()
        		else
        			_SoundService:ResumeBGM()
        		end
        	end
    
        	local bgmToggleButton = _SpawnService:SpawnByModelId("Model Entry ID", "BGMToggleButton", Vector3.zero, defaultUIGroup)
        	bgmToggleButton.UITransformComponent.Position.y = 350
        -- 	bgmToggleButton:ConnectEvent(ButtonClickEvent, buttonClickCallback)  -- [Commented: MLUA requires handler pattern]
    
        	local bgmToggleText = _SpawnService:SpawnByModelId("Model Entry ID", "BGMToggleText", Vector3.zero, bgmToggleButton).TextComponent
        	bgmToggleText.Text = "TOGGLE BGM"
        	bgmToggleText.Bold = true
        	bgmToggleText.FontColor = Color.white
        	bgmToggleText.UseOutLine = true
        end
    end
    

#### StopSound

`SoundService`를 통해 재생한 음원를 일괄 정지하는 예제입니다. 게임 시작 후 5초에 걸쳐 5번 불꽃놀이 음원를 재생하고, "STOP FIREWORK" 버튼을 누르면 불꽃놀이 사운드가 일괄 정지됩니다.
    
    
    @Component
    script FireworkSoundController extends Component
        @ExecSpace("ClientOnly")
        method void OnBeginPlay()
        	local defaultUIGroup = _EntityService:GetEntityByPath("/ui/DefaultGroup")
        	if defaultUIGroup == nil then
        		return
        	end
    
        	-- 5초 동안 음원을 다섯번 재생합니다.
        	for i=1, 5 do
        		_SoundService:PlayLoopSound("0b52c64808f149e18532ec75417d27e1", 1)
        		wait(1)
        	end
    
        	local buttonClickCallback = function()
        		_SoundService:StopSound("0b52c64808f149e18532ec75417d27e1")
        	end
    
        	local stopFireworkSoundButton = _SpawnService:SpawnByModelId("Model Entry ID", "BGMToggleButton", Vector3.zero, defaultUIGroup)
        	stopFireworkSoundButton.UITransformComponent.Position.y = 250
        -- 	stopFireworkSoundButton:ConnectEvent(ButtonClickEvent, buttonClickCallback)  -- [Commented: MLUA requires handler pattern]
    
        	local stopFireworkSoundText = _SpawnService:SpawnByModelId("Model Entry ID", "BGMToggleText", Vector3.zero, stopFireworkSoundButton).TextComponent
        	stopFireworkSoundText.Text = "STOP FIREWORK"
        	stopFireworkSoundText.Bold = true
        	stopFireworkSoundText.FontColor = Color.white
        	stopFireworkSoundText.UseOutLine = true
        end
    end
    

# SeeAlso

  * UITransformComponent
  * Vector3
  * EntityService
  * SpawnService
  * [효과음 만들기](/docs?postId=578)