2017-06-30 1 views
0

J'espérais que quelqu'un puisse m'aider à comprendre un problème que je vois avec la classe Mediaplayer.Deux instances de mediaplayer Android provoquent des problèmes étranges

Je crée une application musicale qui doit lire deux fichiers musicaux en même temps. Dans l'un des cas d'utilisation, je veux être en mesure de lire une piste MP3 et ensuite lancer un autre MP3 pour commencer à jouer à un volume différent sur le dessus de la première.

J'ai trouvé que la classe Android mediaplayer offre cette fonctionnalité et a créé une application de test pour cela en créant simplement deux instances de mediaplayer.

Par exemple ...

MediaPlayer mMediaPlayer1,mMediaPlayer2; 

mMediaPlayer1 = new MediaPlayer(); 
mMediaPlayer2= new MediaPlayer(); 

Le problème que j'ai est que dans l'émulateur il fonctionne très bien et la plupart des appareils que je l'essayer fonctionne très bien, mais sur quelques appareils de test j'obtenir des résultats bizarres quand je essayez de démarrer le second mediaplayer/track.

Ce qui se passe est que le volume de la seconde ou de la première piste audio se réduit soudainement à rien. Je peux voir que le mediaplayer continue de "jouer" car j'ai plusieurs barres de progression configurées pour suivre sa progression mais vous n'entendez rien. J'ai vu ça sur un téléphone OnePlus One et un OnePlus X. Sur ma tablette Asus et sur un téléphone Smasung A3, ça fonctionne bien. Ce n'est pas lié à la version du système d'exploitation, comme je l'ai essayé sur 4.4.2, 5, 6 et 7 avec des résultats mitigés. Il semble définitivement lié au matériel.

J'ai également vu des articles connexes décrivant ce problème mais aucun jusqu'à présent avec une réponse quant à ce qui le cause. Est-ce que quelqu'un peut expliquer cela ou faire la lumière sur le problème? Même si c'est seulement pour comprendre la limitation de ce que je fais?

FYI - J'ai regardé Soundpool mais je ne peux pas l'utiliser parce que les clips que j'utilise sont plus gros que 1Mb.

Merci à l'avance ...

Répondre

0

Merci pour la suggestion. En fin de compte trouvé un moyen autour d'elle. Si vous utilisez l'option AudioAttributes plus récente (API 21 et plus) et que vous définissez le flag FLAG_AUDIBILITY_ENFORCED, cela semble forcer les appareils avec lesquels j'ai des problèmes à jouer les streams .... merci de regarder les gens!

1

Pour votre musique mélange de but que vous pouvez développer votre propre « mixer » qui fonctionnera avec des données audio brutes.

étapes sont les suivantes:

  • extraire des données audio encodées à partir d'un fichier musical par MediaExtractor
  • Le décodage de ces ByteBuffers par Decoder (MediaCodec)
  • le mélange d'un décodées tampon de la première audio avec un décodés tampon forme seconde audio pour obtenir un tampon mixte, here is algorithm
  • jouant le tampon mélangé par AudioTrack

Il y a beaucoup de travail mais ça marchera n'importe où!