Jouer un son

Bonjour, je poste ce message car je veut jouer un son , et j'ai une erreur quelque part car le son ne se joue pas ..



voila mon code



header .m


<br />
-(IBAction)do1 {<br />
   <br />
    NSString *path = [[NSBundle mainBundle] pathForResource:@&quot;2502&quot; ofType:@&quot;mp3&quot;];<br />
   <br />
  AVAudioPlayer *audioPlayer = [[AVAudioPlayer  alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];<br />
    [audioPlayer play];<br />
   <br />
   <br />
}<br />




header .h


<br />
#import &lt;UIKit/UIKit.h&gt;<br />
#import &lt;AVFoundation/AVFoundation.h&gt;<br />
@interface Menu : UIViewController   &lt;AVAudioPlayerDelegate&gt;    {<br />
   <br />
}<br />
<br />
-(IBAction)do1;  <br />




aussi , je ne sais pas si ca a des rapport , mais dans la console quand je lance l'application , j'ai

ca qui s'affiche :
<br />
Appli[1457:907] Unknown class M in Interface Builder file.<br />




le nom de mon fichier mp3 est "2502.mp3".

J'utilise un storyboard , j'ai Xcode 4.6 et le SDK 6.1 .

Merci de votre aide !!

Réponses

  • LarmeLarme Membre
    L'UIViewController, dans ton InterfaceBuilder ne serait pas de la classe M au lieu de Menu ?
  • Non pourtant ! Et sur mon storyboard j'ai qu'un UIViewController , qui est Menu.
  • CéroceCéroce Membre, Modérateur
    mars 2013 modifié #4
    Essaie de déclarer une propriété strong pour l'AVAudioPlayer, il est possible qu'il soit détruit avant d'avoir commencé à  jouer.
  • 'Céroce' a écrit:


    Essaie de déclarer une propriété strong pour l'AVAudioPlayer, il est possible qu'il soit détruit avant d'avoir commencé à  jouer.




    C'est bon j'ai donc rajouté comme dit m'a dit
    <br />
    @property (strong, nonatomic) AVAudioPlayer *audioPlayer;<br />
    


    et ca marche , merci beaucoup !

    et pourquoi sans cette proprieté ca ne marchait pas ?
  • AliGatorAliGator Membre, Modérateur
    Parce que si l'AVAudioPlayer n'est déclaré que dans ta méthode, il n'est plus référencé nulle part, dès que tu sors de ta méthode il n'est plus accessible du coup ARC fait le ménage et il disparait.



    En bref, il est détruit à  la sortie de la méthode "dol", ce qui fait que la méthode "play" (qui lance la lecture mais bien sûr de manière asynchrone et non bloquante) n'a à  peine le temps de jouer 1ms du son avant la destruction du player.



    Alors que si tu gardes une property(strong), le player reste en vie tant que tu ne remets pas cette propriété à  nil (ou que ton objet "Menu" n'est pas lui-même détruit) donc il a le temps de jouer le son.
  • jpimbertjpimbert Membre
    mars 2013 modifié #7


    C'est bon j'ai donc rajouté comme dit m'a dit
    <br />
    @property (strong, nonatomic) AVAudioPlayer *audioPlayer;<br />
    


    et ca marche , merci beaucoup !

    et pourquoi sans cette proprieté ca ne marchait pas ?


    Si l'audio player n'est pas référencé fortement il est détruit par ARC.

    Avec ARC il faut prendre l'habitude de créer des propriétés strong pour les objets qui doivent perdurer "un certain temps". C'est la façon la plus simple de garder une référence forte.



    (j'aimerais bien voir la myriade de doigts sur la quantité de mains d'Ali, un jour)
  • Ok d'accord j'ai compris image/smile.png' class='bbc_emoticon' alt=':)' /> merci encore et bonne apres midi image/smile.png' class='bbc_emoticon' alt=':)' />
Connectez-vous ou Inscrivez-vous pour répondre.