7
votes

Streaming avec une avaudioplayer

Pour charger un fichier son, j'ai le code suivant dans mon application: xxx

Tous les sons que je charge sont dans mon ensemble, je voudrais donc savoir si le Méthode "initwithcontentsofurl" flux du fichier son ou si tout le fichier est mis en cache.

J'ai beaucoup de sprites dans mon application, donc je veux minimiser l'espace mémoire utilisé pour les sons.

THX pour votre aide


0 commentaires

4 Réponses :


6
votes

Si vous souhaitez diffuser audio dans votre application, vous pouvez utiliser le lecteur suivant au lieu d'utiliser AvudioPlayer

https://github.com/mattgallagher/ausiostreamer

Pour ce joueur, vous n'avez pas besoin de mettre des fichiers son dans votre paquet, vous pouvez les mettre au serveur et utiliser l'URL pour diffuser audio.

espoir, ce wil vous aidez.


0 commentaires

6
votes

Les sons qui sont joués à l'aide de l'avaudioplayer sont diffusés en temps réel du stockage. L'inconvénient d'être que vous pouvez parfois remarquer un petit décalage lorsque cela est dû au démarrage. Si vous utilisez OpenLall, les sons sont entièrement chargés en mémoire.

Il y a une bonne discussion sur ce genre de chose dans le Objectionnel Documentation - une bibliothèque destinée à simplifier la lecture de sons et d'effets sur l'iPhone.



8
votes

J'ai utilisé Avplayer (non avaudioplayer) à flux fond audio.


0 commentaires

4
votes

"La classe Avaudioplayer ne fournit pas de support au streaming audio Basé sur les URL HTTP. L'URL utilisée avec initwithContentsofurl: doit être une URL de fichier (fichier: //). C'est-à-dire un chemin local ".

https://developer.apple.com/library/ios/ qA / qa1634 / _index.html

Mais vous pouvez contourner, par exemple, écrivez de manière asynchrone au fichier local et Init Avaudioplayer avec cette URL de fichier, cela fonctionnera.


2 commentaires

Vous pouvez faire nsdata * data = [nsdata DatawithContentsofurl: Soundurl]; Avaudioplayer * joueur = [[Avadioplayer ALLOC] InitwithData: Erreur de données: nil]; Fondamentalement, il diffusera les données en mémoire et Avudioplayer va jouer à partir des données à l'intérieur de la mémoire.


@Giadang Oui, mais votre thread sera suspendu jusqu'à ce que le fichier audio ait été complètement téléchargé par la méthode de DatawithContentsofurl: plutôt que de jouer dans un second ou deux fois que la lecture de la lecture continue, comme le fait Avplayer. Donc, non seulement cela prendra cela longtemps, mais si vous ne mettez pas ce code sur un fil d'arrière-plan, l'application sera complètement gelée jusqu'à ce que la chanson ait été téléchargée. Dans l'ensemble, je ne pense pas que ce soit la plus grande solution.