Soucis AudioServices

SimmerSimmer Membre
décembre 2014 modifié dans API UIKit #1

Bonjour à  tous,


 


Ma première question sur le forum :o  . J'espère ne pas me faire lyncher pour les éventuelles fautes de vocabulaire, non respect des us et coutumes, etc. Comme précisé dans ma présentation hier, je suis relativement débutant.


 


Donc voilà  : mon appli doit jouer 4 sons. Deux d'entre eux sont des "clics" émis en cas d'action sur des boutons, les deux autres sont des alarmes. Ces quatre sons sont des fichiers caf, ajoutés au projet en faisant un glissé-déplacé vers le Project Navigator, avec l'option "copy items if needed" cochée. J'ai fait la manip (glissé déplacé) en deux fois, d'abord les fichiers cap.caf et altitude.caf, puis switch.caf et knob.caf


J'arrive parfaitement à  lire ces 4 sons depuis l'arborescence du project navigator. 


 


Au niveau du code, on retrouve dans mon header :


#import <AudioToolbox/AudioServices.h>


 


et dans l'interface :


    SystemSoundID sonCap;


    SystemSoundID sonAltitude;


    SystemSoundID sonKnob;


    SystemSoundID sonSwitch;


 


Au niveau de mon implémentation, au début de la méthode viewDidLoad j'initialise mes SystemSoundID. Pour cela j'ai essayé deux méthodes. La première : 


 


        NSURL *urlAltitude = [[NSBundle mainBundle] URLForResource:@altitude withExtension:@caf];


        AudioServicesCreateSystemSoundID((__bridge CFURLRef)urlAltitude, &sonAltitude);


    


        NSURL *urlCap = [[NSBundle mainBundle] URLForResource:@cap withExtension:@caf];


        AudioServicesCreateSystemSoundID((__bridge CFURLRef)urlCap, &sonCap);


    


        NSURL *urlSwitch = [[NSBundle mainBundle] URLForResource:@switch withExtension:@caf];


        AudioServicesCreateSystemSoundID((__bridge CFURLRef)urlSwitch, &sonSwitch);


    


        NSURL *urlKnob = [[NSBundle mainBundle] URLForResource:@knob withExtension:@caf];


        AudioServicesCreateSystemSoundID((__bridge CFURLRef)urlKnob, &sonKnob);


 


La seconde méthode (ma préférée) : 


 


        AudioServicesCreateSystemSoundID(CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("altitude"), CFSTR("caf"), NULL), &sonAltitude);


        


        AudioServicesCreateSystemSoundID(CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("cap"), CFSTR("caf"), NULL), &sonCap);


 


        AudioServicesCreateSystemSoundID(CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("switch"), CFSTR("caf"), NULL), &sonSwitch);


 


        AudioServicesCreateSystemSoundID(CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("knob"), CFSTR("caf"), NULL), &sonKnob);


 

 


Ensuite, là  où j'en ai besoin, je joue le son avec par exemple :


 


AudioServicesPlaySystemSound(sonSwitch);


 


Quelque soit la méthode utilisée pour l'initialisation de mes SystemSoundID, je rencontre le même problème : mes sons sonAltitude et sonCap fonctionnement parfaitement bien. En revanche les sons "clic" (sonKnob et sonSwitch) ne fonctionnent pas.


 


J'ai tenté la récupération des code erreur (OSStatus) renvoyés par AudioServicesCreateSystemSoundID. 


Affiché dans NSLog après avoir été castés en int, ça donne ça :


2014-12-12 22:50:26.875 AirSensor[2337:682226] Status son altitude : 0


2014-12-12 22:50:26.878 AirSensor[2337:682226] Status son cap : 0


2014-12-12 22:50:26.878 AirSensor[2337:682226] Status son Switch : -50


2014-12-12 22:50:26.879 AirSensor[2337:682226] Status son Knob : -50


 


Si vous avez une idée... les cheveux que je n'ai pas encore arrachés vous en seront reconnaissants !


 


Merciii !!!


.


Réponses

  • AliGatorAliGator Membre, Modérateur
    Hello


    Est-ce que ça ne pourrait pas venir du fait que tes sons qui marchent et ceux qui marchent pas ne sont pas au même format ?


    Car certes ils sont tous en ".caf" mais peut-être que certains sont en mono, ou avec un bitRate différent ou je ne sais quelle combinaison de paramètres d'encodage qui ne seraient peut-être pas compatibles avec les formats supportés par iOS ?
  • SimmerSimmer Membre
    décembre 2014 modifié #3
    Ca pourrait peut être oui... J'ai du mal à  trouver de la doc sur le sujet. Après une bonne nuit de sommeil j'essayerai de jouer ces sons dans un autre format (Wav par exemple...)
  • AliGatorAliGator Membre, Modérateur
    J'ai trouvé ça et ça concernant les formats et codecs supportés...?
  • Oyé Oyé !


     


    Merci AliGator de m'avoir mis sur la bonne voie. Car si je n'ai pas encore essayé de régénérer mes fichiers avec les bons formats, j'ai essayé en wav et j'obtiens ça : 


     


    2014-12-13 10:23:13.536 AirSensor[2554:726922] Status son altitude : 0


    2014-12-13 10:23:13.539 AirSensor[2554:726922] Status son cap : 0


    2014-12-13 10:23:13.540 AirSensor[2554:726922] Status son Switch : 0


    2014-12-13 10:23:13.541 AirSensor[2554:726922] Status son Knob : 0


     


    Donc ça fonctionne avec les wav qui, soit dit en passant, sont tout petits et donc je pourrai très bien m'en contenter.  Je n'imaginais pas une seconde que le problème puisse venir des fichiers caf que Xcode arrivait parfaitement à  lire. Je les avais générés en ligne de commande depuis les sons wav, avec des paramètres pris au "petit bonheur la chance". Bien que ça fonctionne très bien et à  petit poids en wav, vais quand même ré-essayer de les convertir en caf en suivant la doc que tu m'as donné. 


Connectez-vous ou Inscrivez-vous pour répondre.