Unity 오디오 믹서를 활용해 볼륨 조절하기

삐얅·2024년 7월 10일
0

유니티

목록 보기
8/20

1. 개요

UI를 작업하던 중에 사운드 관련 환경설정을 구현해야 하는 일이 생겼다. 관리하고 있는 Audio Source에 BGM과 SFX의 수가 많아서(20개가 넘는다) 하나하나 Volume에 접근하기도 애매한 부분이 있었다. 추가로 팀 프로젝트로 작업하다 보니 다른 사람이 작업했던 스크립트인 오디오 매니저를 선뜻 건들이기도 애매했다.(불과 며칠 전 충돌로 롤백한 일이 있었다.) 이러한 요소들을 생각하고 방법을 찾고 있을 때 오디오 믹서를 활용해 볼륨을 조절할 수 있다는 것을 알게 되었다.

2. Audio Mixer

오디오 믹서는 유니티에서 제공하는 도구로 오디오를 조작하고 관리하는 기능을 가지고 있다.

  • 오디오 그룹 관리 : 오디오 믹서를 사용해봐야겠다고 마음 먹은 부분이다. 앞서 말했 듯 BGM과 SFX의 수가 많아 이들을 하나하나 관리하기 번거로웠는데 BGM, SFX로 분류를 나눠 구분해서 넣어 줄 수 있어 오디오 소스들이 많아져도 분류만 해주면 되어 편리할 것 같다고 생각했다.

  • 오디오 조절 : 실행 중에 실시간으로 조절이 가능하다.

  • 효과 추가 : 효과를 추가할 수 있다는 부분도 오디오 믹서를 사용해 봐야겠다고 마음먹게 되었다. 영상 편집 경험이 있어 사운드 효과를 원하는대로 설정할 수 있다는 점이 보다 다양한 효과음들을 연출할 수 있을 것 같았다. 특히 어색하게 끊기는 효과음 같은 경우 리버브 같은 기능을 추가해 보다 자연스러운 효과음으로 표현 가능할 것 같았다.

  • 리소스 관리 : 다수의 오디오 트랙을 하나의 믹서로 관리 가능해 리소스 사용을 효율적으로 할 수 있다. 여러 오디오들을 하나의 인터페이스로 관리가 가능해 일관된 오디오 품질을 유지 및 관리하기 편리하다.

단점으로는 초기 설정이나 오디오 효과에 대한 이해가 필요하다는 것이고 오디오 설정을 건들려면 오디오 믹서의 설정 옵션이 처음 사용자에게는 복잡할 수 있다. 덧붙여서 잘못 건들면 오디오 품질이 오히려 떨어질 수 있으니 주의가 필요하다.

3. 볼륨 조절 만들기

오디오 믹서는 유니티 Project에서 만들 수 있다.

처음 오디오 믹서를 만들고 열어보면 이렇게 나온다.

이번에는 오디오 효과를 넣는게 아니라 단순 효과음과 배경음의 볼륨을 조절하기 위한 옵션창을 만들거기 때문에 복잡한 내용은 없었다.


효과음과 배경음 볼륨 조절을 위해 Group 부분에 SFX와 BGM을 만들어 줬다.
이렇게 만들고 나면 이걸 스크립트에서 불러오려면 추가적인 작업이 필요하다.

우측 상단을 보면 파라미터가 있는데 이 부분이 있어야 볼륨을 조절했을 때 값을 전달할 수 있다.

다시 Project 창으로 돌아와서 Inspector 창을 보면 이렇게 되어 있다.

볼륨만 필요하니 볼륨의 파라미터를 만들기 위해 볼륨에 마우스를 올리고 우클릭을 해주고 Expose...을 눌러준다.
이렇게 하면 스크립트로 값을 주고 받을 수 있다.

코드

using System.Collections;
using System.Collections.Generic;
using UnityEditor.ShaderGraph.Internal;
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.UI;

public class AudioSetting : MonoBehaviour
{
	// 오디오 믹서와 볼륨을 조절할 슬라이더들을 넣어준다.
    public AudioMixer audioMixer;
    public Slider volumeSlider;
    public Slider bgmSlider;
    public Slider sfxSlider;


    private void Start()
    {
    	// 초기 볼륨 상태를 반영해주는 메서드
        SetInitialSlider();
    }

    private void SetInitialSlider()
    {
        float bgmVolume;
        float sfxVolume;

		// 오디오 믹서의 해당 이름ㅇ으로 되어있는 Group의 float를 가져온다.
        audioMixer.GetFloat("BGM", out bgmVolume);
        audioMixer.GetFloat("SFX", out sfxVolume);

		// 여기서 주의할 점은 오디오 믹서의 볼륨은 -80dB부터 0까지라는 점이다.
        // slider는 0 ~ 1까지의 값을 가지므로 dB를 변환해준다.
        // dB 값을 선형 스케일로 변환하려면 10의 제곱근을 사용하고, dB값을 20으로 나눈 후 10의 지수로 변환하면 오디오 믹서의 볼륨을 slider 값으로 바꿀 수 있다.
        bgmSlider.value = Mathf.Pow(10, bgmVolume / 20);
        sfxSlider.value = Mathf.Pow(10, sfxVolume / 20);
    }

	// 전체 볼륨을 담당하는 부분을 만들고 싶었는데 아직 이부분은 구현되었다고 하기에 애매하다.
    public void SetMasterVolume(float sliderValue)
    {
    	// 계산 두번하는것 보다 한번으로
        float volume = Mathf.Log10(sliderValue) * 20;

        audioMixer.SetFloat("BGM", volume);
        audioMixer.SetFloat("SFX", volume);
    }

	// 앞서 말한것 처럼 오디오 믹서의 볼륨은 -80 부터 0 까지의 값을 가진다.
    // 앞에서는 볼륨을 slider 값으로 바꿨다면 이번에는 slider 값을 볼륨으로 바꿔준다.
    // 앞에서는 나눠 줬으니 이번에는 곱해 준다.
    public void SetBGMVolume(float sliderValue)
    {
        audioMixer.SetFloat("BGM", Mathf.Log10(sliderValue) * 20);
    }

    public void SetSFXVolume(float sliderValue)
    {
        audioMixer.SetFloat("SFX", Mathf.Log10(sliderValue) * 20);
    }
}
 

이렇게 만들어진 스크립트를 ui에 반영해주고 slider들을 넣어주고, Audio Source의 Output 부분에 맞는 믹서를 넣어주면 된다.

4. 정리

전체 볼륨을 조절하는 부분도 만들고 싶었지만, Audio Source에서 전체 소리를 담당하는 부분이 없어서 일까 딱히 해결방법을 찾지 못했다.
차선책으로 두개의 값을 동시에 조절하도록 만들었지만 문제는 전체 볼륨을 조절하고 배경음과 효과음을 조절할 때 문제가 생길 수 있다는 점이다. 때문에 만들어는 뒀지만 아직 유니티 상에서는 작동되게 넣어두지는 않았다.
두개 다 작동할 수 있는 방법이 있을 것 같지만 다음 작업을 위해 보류해뒀다.

0개의 댓글

관련 채용 정보