12
votes

Changer le volume sans curseur de volume sur un iPhone

J'ai besoin de votre aide. Comment devrais-je procéder pour changer le volume sonore dans mon application. Je ne veux pas utiliser un curseur de volume. Au lieu de cela, j'ai un uiimageview qui est un bouton de volume dans lequel je tourne dans le sens des aiguilles d'une montre pour augmenter et dans le sens des aiguilles d'une montre pour diminuer le volume sonore. La rotation n'est qu'une animation et j'ai déjà fait cette partie.

J'ai besoin de votre aide et de vos conseils sur la manière d'augmenter / diminuer le volume. Merci


0 commentaires

3 Réponses :


4
votes

Eh bien, prenez la rotation min (R1) et la rotation maximale (R2). Ensuite, faites rotation / (r2-r1) pour obtenir un% comme un curseur.

EDIT:
Pour commettre le changement de volume, ajoutez les éléments suivants: xxx

(Assurez-vous de libérer SystemVolumeLider dans dealloc )

Ensuite, lorsque le volume est modifié, utilisez SETValue pour définir sa valeur. Vous devrez également gérer ce qui se passe lorsque votre utilisateur appuie sur le volume +/- des boutons de l'appareil.


7 commentaires

Vous voudrez peut-être aussi leur dire comment changer le volume pour une réponse complète :)


merci Jrtc & iwasrobbed: d Jrtc: lol ma question était, après avoir le%, quel est le prochain, je suis coincé ici xD


Ouais sûr - j'ai parcouru votre question et j'ai pensé que je l'avais répondu, mais je n'avais pas tout à fait! La réponse a été mise à jour cependant;)


Je ferais attention à l'utilisation de MPVolumeView ... Vous ne pouvez pas changer le volume de manière programmatique sans appeler _commitvolumechange qui est une API privée.


Apparemment, il se met à jour automatiquement depuis iOS 3.0 - Fraoula.com/?p=124


Et vous pouvez également utiliser [mpmusicplayController setvolume:]


À droite, mais gardez à l'esprit que ce n'est que si vous utilisez les boutons de commande de volume sur le côté du périphérique réel. Lemme l'a dit de cette façon: si ce n'est pas enterré dans la référence de la classe, vous ne pouvez probablement pas le faire en utilisant API publique :)



12
votes

Je serais prudent appeler setValue sur un mpvolumeView car il ne fera probablement rien d'autre que de mettre à jour l'apparence du curseur, mais pas le niveau de volume du périphérique réel. Vous devriez plutôt appeler _commitvolumechange qui est une API privée et obtiendra probablement votre application rejetée.

Une réponse courte pour contrôler le volume: cela dépend vraiment de ce que vous essayez de contrôler le volume de.

Si vous voulez un "contrôle tous les son de l'application" Sorte de contrôle, vous pouvez utiliser un mpvolumeView mais vous ne peut pas changer sa valeur de manière programmatique. Vous ne seriez alors que de changer le volume en déplaçant le curseur avec une touche ou en utilisant les boutons de volume situés sur le côté de l'appareil. La meilleure chose à faire est de créer un objet global qui stocke le niveau de volume que l'un de vos objets peut lire avant de jouer leur son.

Si c'est un objet AvadioPlayer , vous créeriez l'objet et utilisez [SETVOLUME DE THEUUDIOPLAYEROBJECT: quelquefloat]; OFFFLOAT est une valeur comprise entre 0,0 et 1,0.

si c'est un objet Systemesound , vous ne pouvez pas contrôler le volume.

Si c'est un audioqueur vous le changeriez via audioQuesUueuSetParameter

Comme je l'ai dit. Tout dépend de comment vous jouez du son.

mise à jour basée sur le commentaire

pour cet exemple particulier , vous définiriez le volume comme celui-ci:

Ajouter au fichier audiostreamer.h xxx

Ajouter au fichier audiostreamer.m xxx

Ajouter au contrôleur d'affichage pour l'endroit où le bouton de volume sera (cela va dans le fichier .m. Je viens de faire cela comme un couple uibutton réel rapide, vous devrez faire la vôtre) et créer une ibaction Pour modifier le volume d'une valeur donnée (vous pouvez passer en 0.0 à travers 1,0 comme flotteur) xxx


7 commentaires

Je veux contrôler le volume de mon application. J'essaie de faire une application à l'aide de classes Matt Gallagher sur la diffusion d'une source MP3 cocoawithlove.com/2008/09/...


Merci beaucoup rob, je vais l'essayer: D Je suis assez nouveau à la programmation iPhone: D Merci: D


Pas un problème, si vous avez des problèmes de mise en œuvre, laissez-moi savoir et je posterai un exemple de projet. Essayez-le en premier, vous en apprendrez plus de cette façon.


Hey Rob, y a-t-il un moyen simple d'enregistrer ce qui a été diffusé avec des classes audio Matt Gallagher. Je veux dire que je veux enregistrer en jouant simultanément.


Désolé, vous devez commencer une nouvelle question pour cela. Stack Overflow est un site à une seule question-Per-post de sorte que les choses restent organisées pour des lecteurs ultérieurs à la recherche de réponses


ok rob: D pourriez-vous m'aider s'il vous plaît avec cela? : S J'ai créé un nouveau post Mais que se passe-t-il si vous utilisez audiounit à la place?



16
votes

Je le considère comme un bogue dans le code d'Apple et nous l'avons signalé à la fois avec des rapports de bogues et en personne, mais comme ils insistent sur une fonctionnalité, vous pourriez aussi bien en bénéficier.

Utilisez le code suivant pour Changez le volume de votre application: xxx

Ceci fonctionnera uniquement après avoir établi votre session audio, soit en jouant un son, soit en la définissant actif comme tel: < Pré> xxx

Remarque que vous aurez besoin de mediaplayer.framework and AVFoundation.framework et que le volume est compris entre 0,0 et 1,0.


2 commentaires

Simple et clair ~~ :) Merci beaucoup. Même si je n'utilise pas mpmusicplayerController (par exemple en utilisant mpmovieplayercontroller), je peux l'utiliser. En raison de l'avaudiosité. :)


'SetVolume:' est obsolète dans iOS 7.0