퇴근하고 만드는 게임 개발 로그. 앞 시리즈는 끝난 걸 부검했고, 이번엔 만드는 중에 쓴다.
새벽에 효과음 생성 AI를 결제하려고 했다.
소리가 아예 없던 건 아니다. 조작할 때 나는 소리는 진작 넣어놨고 BGM도 다섯 곡 있었다. 근데 게임에서 제일 큰 사건들이 죄다 무음이었다. 손님이 몰려오는 순간, 장비가 들어오는 순간, 가게를 통째로 넘기는 순간. 화면에서는 상자가 떨어지고 도장이 찍히는데 귀로는 아무 일도 안 일어난다.
내가 만들려는 게 여유다. 잔잔한 소음에 파묻혀서 과하게 몰입하지 않고 잠깐 쉬는 느낌. 손으로 뭘 하는 감각이 조금이라도 남았으면 하는 것. 그렇게 만들 거면 소리가 절반이다. 절반이 비어 있었다.
크레딧부터 셌다
결제하려고 요금제를 보다가 무료 플랜에도 크레딧이 있는 걸 봤다.
“free 가 월 10000크레딧인데 ?”
생성 한 번에 200크레딧이고 한 번 돌리면 변주가 네 개 나온다. 만 크레딧이면 쉰 번이다. 필요한 건 일곱 개였으니까 무료로도 넘치고 남는다.
문제는 무료로 뽑은 건 상업적으로 못 쓴다는 거였다. 출처도 표기해야 한다. 유료로 뽑아야 게임에 넣을 라이선스가 붙는다. 한 달에 5달러고 한 달 쓰고 해지해도 된다.
일곱 개를 키당 두 변주씩, 열네 번을 API로 한 번에 돌렸다. 안 쓴 변주도 전부 따로 보관해뒀다. 나중에 다시 뽑으면 그게 또 돈이다.
폰에 넣고 들어보니
배선까지 끝내고 빌드해서 폰에 넣었다. 오후에 들어봤다.
“새롭게 들어간 효과음이 터치시 바로 나오지 않고 좀 늦게 나오는거 같다.”
그리고 하나 더. 재고가 다 찼을 때 나는 소리가 듣기 거슬린다고 했다. 탭할 때마다 이상한 게 튄다.
두 마디였는데 파보니까 원인이 셋이었다.
431ms는 파일 안에 있었다
늦게 들리는 건 코드 문제가 아니었다. 상자 떨어지는 소리 파일 맨 앞에 무음 431밀리초가 그냥 들어 있었다. 생성된 걸 그대로 갖다 썼으니까 앞머리가 붙어 있는 줄도 몰랐다. 잘라내니까 17ms가 됐다.
거슬리는 소리는 더 지저분했다. 채택한 변주가 애초에 생성 실패작이었다. 피크가 -32dB밖에 안 되는 30밀리초짜리 클릭 음이다. 거의 안 들려야 정상인데 실제로는 튀었다.
임포트 설정에 모노 Normalize가 켜져 있었기 때문이다. 파일 볼륨을 아무리 맞춰놔도 유니티가 임포트할 때 다시 최대로 밀어올린다. 거의 안 들리던 클릭이 풀스케일로 증폭돼서 나오고 있었다. 보관해둔 다른 변주로 갈아끼우고, 오디오 메타 전체에 normalize: 0을 박고, 앞으로 들어오는 파일에도 강제로 꺼지게 임포트 프로세서를 하나 넣었다.
세 번째는 포맷이었다. mp3는 인코더가 앞에 프라이밍 구간을 붙인다. 그게 25ms쯤 된다. 원샷 열한 개를 전부 wav로 갈았다. 새로 뽑은 일곱 개는 mp3 재인코딩 손실까지 없애려고 보관해둔 원본 변주에서 다시 만들었다. BGM은 스트리밍이라 mp3로 뒀다.
무음 트림 문턱도 한 번 고쳤다. -60dB로 자르니까 상자 소리 앞에 거의 안 들리는 럼블이 191ms 남는다. 가청 기준인 -45dB로 올렸다. 전환하고 나서 원샷 스물세 개를 다시 재보니 앞머리가 전부 40ms 안쪽이었다. 남은 건 자연스러운 어택뿐이다.
볼륨에 층을 만들었다
파일 스물여덟 개의 피크가 -0.4dB에서 -32dB까지 제각각이었다. BGM도 곡마다 4~5dB씩 차이가 났다. 원샷과 루프는 피크 -6dBFS로, BGM은 RMS -16dB로 통일했다.
그런데 파일을 다 맞춰놓는다고 끝이 아니었다. 어떤 소리는 크게 들려야 하고 어떤 소리는 배경에 깔려야 하는데, 그 상대적인 크기를 파일 자체에 박아놓으면 나중에 하나 바꿀 때마다 전부 다시 재야 한다.
그래서 믹싱 데스크를 하나 만들었다. 층을 넷으로 나눴다. 배경, 조작, 사건, UI. BGM은 따로 계수를 둬서 언제나 효과음보다 아래로 깔리게 했다. 키 스물세 개에 개별 트림을 걸어놨고 인스펙터에서 플레이 중에 돌려볼 수 있다.
여유를 만든다는 건 결국 이런 거였다. 뭐 하나 튀어나오지 않게 계속 깎는 것.
다음부터는 스크립트를 거친다
같은 걸 또 겪기 싫어서 반입 스크립트를 하나 짰다. 원본 파일이랑 키 이름만 주면 앞뒤 무음 잘라내고 피크 -6dBFS로 맞춰서 wav로 뱉는다.
“wav 전환으로 없애고, 앞으로 사운드파일을 추가할땐 이과정을 꼭 거치도록해.”
그날 겪은 사고 세 개가 전부 이 절차를 건너뛰어서 생긴 거다. 431ms 무음, 실패작 클릭, 파일별 제각각인 볼륨. 앞으로 효과음 폴더에 mp3가 들어오면 에디터가 경고하게도 해뒀다.
저녁에 다시 빌드해서 들어봤다.
“소리 좋다. 지금은 이슈없어.”
하나 안 끝난 게 남았다. API 키에 스코프 제한이 걸려 있어서 생성 시점에 내 플랜이 뭐였는지 조회가 안 된다. 무료 상태에서 뽑은 거면 상업 라이선스가 안 붙는다. 결제하고 같은 스크립트로 다시 돌리면 되는데, 아직 확인을 못 했다.