12
votes

Looping sans couture avec le bon d'exposition sur Android?

J'essaie de boucler des fichiers abrégés (20 ko), des fichiers OGG sans défaut avec la classe Soundpool et ne peut pas obtenir des résultats cohérents tout en testant sur le matériel. Il joue toujours parfaitement à l'aide de l'émulateur, mais lorsque je teste sur un Nexus 1, ou sur une onglet Samsumg Galaxy 10.1, il y a des POP audibles ou des clics à chaque point de boucle. Ce qui est très étrange, c'est que tout en cohérent une fois que l'application a démarré, les clics sont légèrement différents chaque fois que je redémarre l'application et à des occasions rares (plus fréquemment sur la tablette) la boucle joue correctement.

Les résultats ne sont pas mieux en utilisant MediaPlayer. Est-il déraisonnable de s'attendre à une lecture sans lacune des boucles audio sur Android? Quelqu'un a sûrement une fonctionnalité similaire fonctionnant correctement? Si oui, j'aimerais voir un exemple de la façon dont cela fonctionne.

merci!


3 commentaires

Je suis dans le même bateau, les fichiers WAV fonctionnent mal la même chose: une boucle irréfléchie parfaite semble impossible. Si vous essayez de faderiser / sortir les premiers et les 10 derniers échantillons de la piste, vous entendrez très clairement la pause de Millisecond Long, sans clics, mais le fondu est très audible .. O_OO


Travaille C'est beaucoup de problèmes pour ce que vous voulez, vous pouvez toujours utiliser audiotrack, qui utilise un flux continu de bits.


Cela semblera stupide, mais il est (apparemment) déraisonnable d'attendre une lecture audio sans couture sans soudure.


3 Réponses :


4
votes

J'ai utilisé un piratage fonctionnant bien pour les fichiers uniques: xxx

juste définir mhackloopingpreview à un montant raisonnable; J'utilise 100 ms et ça marche bien. Je dois convenir que c'est une solution de moins que idéale et laide laide , mais au moins cela fait son travail.


4 commentaires

Cela fonctionne, mais pas lorsque l'application est en arrière-plan, il y a un peu de lacune en boucle


Pourriez-vous prolonger l'exemple un peu plus? Pour par exemple, où appelez-vous Démarrer () ou préparez-vous ()?


Cela n'a pas marché pour moi du tout. Peut-être parce que je ne l'ai pas impliqué au bon endroit comme @ Primož'c0deunter'kalj implicite.


L'écart est toujours là ...



0
votes

Cela pourrait ressembler à un flic, mais il y a 2 choses que vous pouvez essayer, dont le premier a fonctionné pour moi.

  1. Formez votre audio Format OGG au taux d'échantillonnage de 48 kHz et 48kbit / s (cela a fonctionné pour moi)

  2. Vous pouvez créer 2 objets MediaPlayer et (comme la réponse de @beowulf Bjornson) approximativement <= 100 ms Démarrer MediaPlayer n ° 2 juste avant le médiaPlayer # 1 extrémités et alternent entre tout le temps.

    J'espère que les gens qui viennent ici essaient ce que j'ai dit parce que j'ai gaspillé environ 3 jours d'essayer de comprendre cela seulement pour être étonné de ne pas être hors de la boîte de la boîte pour le faire sans défaut.


1 commentaires

alors j'ai 2 espaces ..



1
votes

J'ai trouvé autre solution:

afd = assetManager.openFd(nameSound);

player.setDataSource(afd.getFileDescriptor(),
                     afd.getStartOffset(), afd.getLength() - 1000);
afd.close();
player.prepare();
player.setLooping(true);
player.start();


1 commentaires

ne fonctionne pas, une pause entre les boucles arrive