SoundPool в сервисе не загружается - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть SoundPool, который я хочу загружать в разных фрагментах.Поэтому я загружаю его намерением службы в моих начальных действиях onCreate, а затем пытаюсь воспроизвести его с другими намерениями в onClickListeners (и других методах) в других фрагментах.Несмотря на то, что он печатает строки для подтверждения загружаемых звуков, впоследствии он не воспроизводит их, говоря «семпл X не ГОТОВ».Что я делаю не так?

Вот основные действия по созданию:

override fun onCreate(savedInstanceState: Bundle?) {
    var pIntent = Intent(this, SoulSoundService::class.java)
    pIntent.putExtra("Load", "Ein")
    startService(pIntent)
    super.onCreate(savedInstanceState)
    setContentView(com.example.soulfetchnew.R.layout.activity_fullscreen)
    mVisible = false
    }

и onclicklistener (во фрагменте)

override fun onResume() {
    super.onResume()
    majpentlevelbutton.setOnClickListener {playPing()
    it.findNavController().navigate(R.id.action_levelSelectFragment_to_levelFragment)
    }
}

fun playPing(){
    val pIntent = Intent(activity, SoulSoundService::class.java)
    pIntent.putExtra("name", R.raw.dbping)
    activity?.startService(pIntent)
}

И сервис:

open class SoulSoundService : Service() {

private lateinit var mSoundPool: SoundPool
private val myBinder = MyLocalBinder()

override fun onCreate() {
    val mAttributes = AudioAttributes.Builder()
        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
        .setUsage(AudioAttributes.USAGE_GAME)
        .build()

    mSoundPool = SoundPool.Builder()
        .setMaxStreams(14)
        .setAudioAttributes(mAttributes)
        .build()
}

override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
    if (intent.hasExtra("Load")) {
        loadPings()
    }
    if (intent.hasExtra("name")) {
        soundID = intent.getIntExtra("Name", soundID)
        playPing(soundID)
    }
    if (intent.hasExtra("Stop")) {
        stopSelf()
    }
    return super.onStartCommand(intent, flags, startId)
}


fun playPing(soundID: Int){
    mSoundPool.play(soundID, 1f, 1f, 1, 1, 1f)
}

fun loadPings() {
    val abping = mSoundPool.load(this, com.example.soulfetchnew.R.raw.abping, 1)
    val aping = mSoundPool.load(this, com.example.soulfetchnew.R.raw.aping, 1)
    val bbping = mSoundPool.load(this, com.example.soulfetchnew.R.raw.bbping, 1)
    val bping = mSoundPool.load(this, com.example.soulfetchnew.R.raw.bping, 1)
    val cping = mSoundPool.load(this, com.example.soulfetchnew.R.raw.cping, 1)
    val dbping = mSoundPool.load(this, com.example.soulfetchnew.R.raw.dbping, 1)
    val dping = mSoundPool.load(this, com.example.soulfetchnew.R.raw.dping, 1)
    val ebping = mSoundPool.load(this, com.example.soulfetchnew.R.raw.ebping, 1)
    val eping = mSoundPool.load(this, com.example.soulfetchnew.R.raw.eping, 1)
    val fping = mSoundPool.load(this, com.example.soulfetchnew.R.raw.fping, 1)
    val gbping = mSoundPool.load(this, com.example.soulfetchnew.R.raw.gbping, 1)
    val gping = mSoundPool.load(this, com.example.soulfetchnew.R.raw.gping, 1)

    mSoundPool.setOnLoadCompleteListener(object: SoundPool.OnLoadCompleteListener {
        override fun onLoadComplete(mSoundPool: SoundPool, sampleId:Int,
                           status:Int) {
            println("SOUNDS ARE LOADED")            
        }
    })

}

Вот журнал MainActivity:

2019-02-06 14:12:14.225 17449-17449/com.example.soulfetchnew I/Choreographer: Skipped 57 frames!  The application may be doing too much work on its main thread.
2019-02-06 14:12:14.253 17449-17467/com.example.soulfetchnew D/EGL_emulation: eglMakeCurrent: 0xb3485120: ver 3 0 (tinfo 0xb3483780)
2019-02-06 14:12:15.537 17449-17493/com.example.soulfetchnew I/OMXClient: MuxOMX ctor
2019-02-06 14:12:16.434 17449-17496/com.example.soulfetchnew I/OMXClient: MuxOMX ctor
2019-02-06 14:12:17.113 17449-17499/com.example.soulfetchnew I/OMXClient: MuxOMX ctor
2019-02-06 14:12:17.270 17449-17449/com.example.soulfetchnew I/Choreographer: Skipped 183 frames!  The application may be doing too much work on its main thread.
2019-02-06 14:12:17.524 17449-17502/com.example.soulfetchnew I/OMXClient: MuxOMX ctor
2019-02-06 14:12:17.573 17449-17449/com.example.soulfetchnew I/System.out: SOUNDS ARE LOADED
2019-02-06 14:12:17.573 17449-17449/com.example.soulfetchnew I/System.out: SOUNDS ARE LOADED
2019-02-06 14:12:17.705 17449-17449/com.example.soulfetchnew I/System.out: SOUNDS ARE LOADED
2019-02-06 14:12:18.175 17449-17449/com.example.soulfetchnew I/System.out: SOUNDS ARE LOADED
2019-02-06 14:12:18.322 17449-17505/com.example.soulfetchnew I/OMXClient: MuxOMX ctor
2019-02-06 14:12:18.508 17449-17449/com.example.soulfetchnew I/System.out: SOUNDS ARE LOADED
2019-02-06 14:12:19.230 17449-17449/com.example.soulfetchnew I/System.out: SOUNDS ARE LOADED
2019-02-06 14:12:19.242 17449-17508/com.example.soulfetchnew I/OMXClient: MuxOMX ctor
2019-02-06 14:12:19.403 17449-17449/com.example.soulfetchnew I/System.out: SOUNDS ARE LOADED
2019-02-06 14:12:19.412 17449-17511/com.example.soulfetchnew I/OMXClient: MuxOMX ctor
2019-02-06 14:12:19.583 17449-17449/com.example.soulfetchnew I/System.out: SOUNDS ARE LOADED
2019-02-06 14:12:19.591 17449-17514/com.example.soulfetchnew I/OMXClient: MuxOMX ctor
2019-02-06 14:12:19.732 17449-17449/com.example.soulfetchnew I/System.out: SOUNDS ARE LOADED
2019-02-06 14:12:19.739 17449-17517/com.example.soulfetchnew I/OMXClient: MuxOMX ctor
2019-02-06 14:12:19.879 17449-17449/com.example.soulfetchnew I/System.out: SOUNDS ARE LOADED
2019-02-06 14:12:19.886 17449-17520/com.example.soulfetchnew I/OMXClient: MuxOMX ctor
2019-02-06 14:12:20.034 17449-17449/com.example.soulfetchnew I/System.out: SOUNDS ARE LOADED
2019-02-06 14:12:20.044 17449-17523/com.example.soulfetchnew I/OMXClient: MuxOMX ctor
2019-02-06 14:12:20.203 17449-17449/com.example.soulfetchnew I/System.out: SOUNDS ARE LOADED

А в новом фрагменте:

2019-02-06 14:12:23.141 17449-17454/com.example.soulfetchnew I/art: Do partial code cache collection, code=20KB, data=29KB
2019-02-06 14:12:23.141 17449-17454/com.example.soulfetchnew I/art: After code cache collection, code=20KB, data=29KB
2019-02-06 14:12:23.141 17449-17454/com.example.soulfetchnew I/art: Increasing code cache capacity to 128KB
2019-02-06 14:12:26.787 17449-17454/com.example.soulfetchnew I/art: Do partial code cache collection, code=61KB, data=60KB
2019-02-06 14:12:26.855 17449-17454/com.example.soulfetchnew I/art: After code cache collection, code=60KB, data=60KB
2019-02-06 14:12:26.855 17449-17454/com.example.soulfetchnew I/art: Increasing code cache capacity to 256KB
2019-02-06 14:12:26.917 17449-17449/com.example.soulfetchnew W/SoundPool:   sample 2131623947 not READY

1 Ответ

0 голосов
/ 06 февраля 2019

Вы должны использовать значение, возвращаемое load() для воспроизведения звука.То есть abping, aping и т. Д. Вы пытаетесь воспроизвести их на основе идентификатора ресурса, который является неправильным.Идентификатор ресурса используется только для загрузки звука (как вы сделали).

...