반응형

SoundPool

설명

  • 동시에 여러가지 사운드를 플레이해야할 경우 사용하는 클래스
  • MediaPlayer는 음악 재생과 같은 역할을 한다면 SoundPool은 효과음 재생을 위한 역할을 수행

코드

MainActivity
class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    private lateinit var soundPool: SoundPool

    private val soundIdMap = hashMapOf<String, Int>()
    private val streamIdMap = hashMapOf<String, Int>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater).apply {
            setContentView(root)
            lifecycleOwner = this@MainActivity
        }

        soundPool = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            SoundPool.Builder()
                .setAudioAttributes(
                    AudioAttributes.Builder()
                        .setUsage(AudioAttributes.USAGE_MEDIA)
                        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                        .build()
                )
                .setMaxStreams(1) // 동시에 재생 가능한 사운드 최대 수
                .build()
        } else {
            SoundPool(1, AudioManager.STREAM_MUSIC, 0)
        }

        soundPool.apply {
            soundIdMap["sound1"] = load(this@MainActivity, R.raw.sound1, 1)
            soundIdMap["sound2"] = load(this@MainActivity, R.raw.sound2, 1)

            setOnLoadCompleteListener { soundPool, sampleId, status ->
                Toast.makeText(this@MainActivity, "load complete", Toast.LENGTH_SHORT).show()
            }
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        soundPool.release()
    }

    fun onClickPlay(view: View) {
        streamIdMap["sound1"] = soundPool.play(soundIdMap["sound1"]!!, 0.5f, 0.5f, 1, 0, 1f)
    }

    fun onClickStop(view: View) {
        soundPool.stop(streamIdMap["sound1"]!!)
        // soundPool.pause(streamIdMap["sound1"]!!) // 해당 사운드 일시정지
        // soundPool.autoPause() // 재생중인 사운드 모두 일시정지
    }
}

참고

반응형

'Development > Android' 카테고리의 다른 글

[Android] DataBinding  (0) 2021.02.09
[Android] kotlin-android-extensions  (0) 2021.02.09
[Android] MediaPlayer  (0) 2021.02.09
[Android] Resources  (0) 2021.02.09
[Android] SQLite  (0) 2021.02.09

+ Recent posts