Skip to content
isdnetworks
Go back

어떤 기기에서만 소리가 끊겼다

게임에 효과음을 넣었다. 내 기기에서는 잘 났는데 다른 기기에서 켜니 소리가 끊겼다.

Table of contents

Open Table of contents

여럿이 겹칠 때 끊겼다

가만 있으면 안 끊긴다. 여러 소리가 동시에 날 때 끊겼다. 세어 보니 버튼음과 캐릭터 소리와 효과음이 넷 이상 겹치는 순간이 있었다.

처음에는 기기 차이로 봤다. 기기마다 오디오 사정이 다르니 그럴 만하다고 생각했다.

상한은 엔진이 정하고 있었다

SimpleAudioEngineAndroid 에서 무엇을 부르는지 따라가 봤다. 효과음은 Cocos2dxSound 를 거치고 그 안은 SoundPool 이었다.

private static final int MAX_SIMULTANEOUS_STREAMS_DEFAULT = 5;

SoundPool 은 만들 때 동시 재생 수를 정하고 그 값이 5로 박혀 있었다. 기기 사정이 아니라 이 상수가 상한이었다. 넷이 겹치는 것을 세어 놓고 기기를 의심한 것이 헛다리였다.

같은 소리를 합쳤다

상한을 올릴 수도 있었지만 동시에 나는 수를 줄이는 쪽을 먼저 했다. 겹치는 것을 세어 보니 상당수가 같은 소리였다. 적 다섯 마리가 동시에 맞으면 같은 타격음이 다섯 개 난다.

하나만 내도 귀로는 티가 안 났다. 다만 전부 합치면 연속 타격이 한 번으로 들린다. 아주 짧은 시간 안에 들어온 것만 합쳤다. 그 시간은 몇 가지 값으로 들어 보고 귀로 정했다.

중요도와 배경음의 자리

소리마다 중요도를 붙여 상한에 가까우면 낮은 것부터 안 내게 했다. 타격음과 피격음은 없으면 이상하고 버튼음은 없어도 된다.

중요도를 안 두면 상한에 닿았을 때 무엇이 빠질지를 SoundPool 이 정한다. 그러면 타격음이 빠지고 버튼음이 남는 경우가 생긴다.

배경음은 걱정할 것이 없었다. Cocos2dxMusicMediaPlayer 로 따로 틀고 있어서 SoundPool 의 다섯 자리와 상관이 없다. 효과음만 세면 되는 것이었고 그것도 코드를 따라가 보고 알았다.

정리


Share this post on:

Previous Post
후보를 두 번에 걸쳐 좁혔다
Next Post
빌드는 성공인데 고친 게 안 들어갔다