1. BraveSentry, 06.02.2019 #1
    BraveSentry

    BraveSentry Threadstarter Neuer Benutzer

    Ich würde gerne einen SoundPool global laden. Dafür habe ich ihn in einen Service gepackt. In dem Service wird er per Intent geladen und auch die Sounds werden per Intent abgespielt. Laut log werden die sounds auch geladen. Wenn ich sie dann aber abspielen will, bekomme ich ein "sound X not LOADED". Was mache ich falsch?


    Das passiert in der mainActivity:
    Code:
    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
       }
    Das hier in einem Fragment:

    Code:
    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)
    }
    Das ist der Service:

    Code:
    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")           
           }
       })
    }

    Und hier noch das log:

    Code:
    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
    Wenn jemand eine Idee hat, warum das so ist, gerne her damit. Oder ist ein Service für SoundPools überhaupt ungeeignet? Wenn ja, was sollte ich sonst nehmen?
     
  2. jogimuc, 06.02.2019 #2
    jogimuc

    jogimuc Erfahrener Benutzer

    Hallo was mir auffällt ist
    if (intent.hasExtra("name")) {
    soundID = intent.getIntExtra("Name", soundID)
    playPing(soundID)
    }
    ein mal ist name Kleingeschrieben wenn es in die if geht, dann ist der Key aber Groß geschrieben.
    somit düfte kein int aus dem Intent geholt werden.

    Einenen Default wert hast du auch nicht. Wenn der Key nicht aufgelöst werden kann.
     
  3. BraveSentry, 06.02.2019 #3
    BraveSentry

    BraveSentry Threadstarter Neuer Benutzer

    Ich habe die Namen jetzt alle klein geschrieben. Macht leider keinen Unterschied.

    Einen default Wert habe ich doch, wenn ich z.b. das hier schreibe, oder?

    Code:
    interface PutExtraConstants {
        companion object {
            var soundID: Int = R.raw.fping
        }}
     
  4. jogimuc, 06.02.2019 #4
    jogimuc

    jogimuc Erfahrener Benutzer

    Nein
    Ich meinte "soundID = intent.getIntExtra("Name", soundID)"
    Da ist der Parameter nach dem key der wert der benutzt wird wenn der key nicht gefunden wurde. Das müsste in deinem Fall ein Sound Ressource sein.

    woher willst du wissen das ein Sound geladen wurde und eine soundid erstellt wurde kann da kein log erkennen von denen Du sprichst.

    Und durch den intent der wohl nichts enthält wird dein vermeintlicher default wert mit nichts überschrieben.

    und noch etzwas hiermit erstellst du eine neue Variable
    private lateinit var mSoundPool: SoundPool
    die nicht gleich der objekt Variablen ist.

    wenn dann so
    class PutExtraConstants {
    companion object {
    var soundID: Int = R.raw.fping
    }}

    und der zugriff PutExtraConstants.soundID

    Grudlagen Kotlin.
     
    Zuletzt bearbeitet: 06.02.2019
  5. markus.tullius, 06.02.2019 #5
    markus.tullius

    markus.tullius Android-Lexikon

    In deinem Log sind zwei Dinge seltsam:

    Anscheinend ist dein App im MainThread komplett ausgelastet. Und die der Song wird innerhalb von 5s 20 mal geladen.

    Für mich sieht es so aus, als hätte deine App 20 Service, die alle das gleiche Stück laden. Und das alles geschieht im MainThread, weshalb du die Meldung
    The application may be doing too much work on its main thread. bekommst

    Da ich nicht den kompletten Code kenne, ist dies nur eine Vermutung:
    Du startest immer wieder ein neuen Service, ohne den alten zu beenden. So das mehrere Service gleichzeitig das Musikstück abspielen wollen, und das funktioniert nicht, was zu deinem bekannten Problem führt.
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
onStop() ist ja nicht gleich onStop() Android App Entwicklung 29.01.2019
Detektieren ob der Anwendungseigene Service läuft Android App Entwicklung 23.05.2018
Service stoppt wenn App geschlossen wird Android App Entwicklung 16.05.2018
Du betrachtest das Thema "SoundPool im Service lädt nicht - oder doch!?" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.